# coding=utf-8
# *** WARNING: this file was generated by pulumi-language-python. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import builtins
import copy
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from . import _utilities
from . import outputs

__all__ = [
    'AccountAuthenticationSamlFieldMapping',
    'AlloydbomniAlloydbomni',
    'AlloydbomniAlloydbomniParam',
    'AlloydbomniAlloydbomniUserConfig',
    'AlloydbomniAlloydbomniUserConfigIpFilterObject',
    'AlloydbomniAlloydbomniUserConfigPg',
    'AlloydbomniAlloydbomniUserConfigPgaudit',
    'AlloydbomniAlloydbomniUserConfigPgbouncer',
    'AlloydbomniAlloydbomniUserConfigPglookout',
    'AlloydbomniAlloydbomniUserConfigPrivateAccess',
    'AlloydbomniAlloydbomniUserConfigPrivatelinkAccess',
    'AlloydbomniAlloydbomniUserConfigPublicAccess',
    'AlloydbomniComponent',
    'AlloydbomniServiceIntegration',
    'AlloydbomniTag',
    'AlloydbomniTechEmail',
    'CassandraCassandra',
    'CassandraCassandraUserConfig',
    'CassandraCassandraUserConfigCassandra',
    'CassandraCassandraUserConfigIpFilterObject',
    'CassandraCassandraUserConfigPrivateAccess',
    'CassandraCassandraUserConfigPublicAccess',
    'CassandraComponent',
    'CassandraServiceIntegration',
    'CassandraTag',
    'CassandraTechEmail',
    'ClickhouseClickhouse',
    'ClickhouseClickhouseUserConfig',
    'ClickhouseClickhouseUserConfigIpFilterObject',
    'ClickhouseClickhouseUserConfigPrivateAccess',
    'ClickhouseClickhouseUserConfigPrivatelinkAccess',
    'ClickhouseClickhouseUserConfigPublicAccess',
    'ClickhouseComponent',
    'ClickhouseGrantPrivilegeGrant',
    'ClickhouseGrantRoleGrant',
    'ClickhouseServiceIntegration',
    'ClickhouseTag',
    'ClickhouseTechEmail',
    'DragonflyComponent',
    'DragonflyDragonfly',
    'DragonflyDragonflyUserConfig',
    'DragonflyDragonflyUserConfigIpFilterObject',
    'DragonflyDragonflyUserConfigMigration',
    'DragonflyDragonflyUserConfigPrivateAccess',
    'DragonflyDragonflyUserConfigPrivatelinkAccess',
    'DragonflyDragonflyUserConfigPublicAccess',
    'DragonflyServiceIntegration',
    'DragonflyTag',
    'DragonflyTechEmail',
    'FlinkApplicationVersionSink',
    'FlinkApplicationVersionSource',
    'FlinkComponent',
    'FlinkFlink',
    'FlinkFlinkUserConfig',
    'FlinkFlinkUserConfigIpFilterObject',
    'FlinkFlinkUserConfigPrivatelinkAccess',
    'FlinkFlinkUserConfigPublicAccess',
    'FlinkJarApplicationApplicationVersion',
    'FlinkJarApplicationApplicationVersionFileInfo',
    'FlinkJarApplicationCurrentDeployment',
    'FlinkJarApplicationVersionFileInfo',
    'FlinkServiceIntegration',
    'FlinkTag',
    'FlinkTechEmail',
    'GovernanceAccessAccessData',
    'GovernanceAccessAccessDataAcl',
    'GovernanceAccessTimeouts',
    'GrafanaComponent',
    'GrafanaGrafana',
    'GrafanaGrafanaUserConfig',
    'GrafanaGrafanaUserConfigAuthAzuread',
    'GrafanaGrafanaUserConfigAuthGenericOauth',
    'GrafanaGrafanaUserConfigAuthGithub',
    'GrafanaGrafanaUserConfigAuthGitlab',
    'GrafanaGrafanaUserConfigAuthGoogle',
    'GrafanaGrafanaUserConfigDateFormats',
    'GrafanaGrafanaUserConfigExternalImageStorage',
    'GrafanaGrafanaUserConfigIpFilterObject',
    'GrafanaGrafanaUserConfigPrivateAccess',
    'GrafanaGrafanaUserConfigPrivatelinkAccess',
    'GrafanaGrafanaUserConfigPublicAccess',
    'GrafanaGrafanaUserConfigSmtpServer',
    'GrafanaServiceIntegration',
    'GrafanaTag',
    'GrafanaTechEmail',
    'InfluxDbComponent',
    'InfluxDbInfluxdb',
    'InfluxDbInfluxdbUserConfig',
    'InfluxDbInfluxdbUserConfigInfluxdb',
    'InfluxDbInfluxdbUserConfigIpFilterObject',
    'InfluxDbInfluxdbUserConfigPrivateAccess',
    'InfluxDbInfluxdbUserConfigPrivatelinkAccess',
    'InfluxDbInfluxdbUserConfigPublicAccess',
    'InfluxDbServiceIntegration',
    'InfluxDbTag',
    'InfluxDbTechEmail',
    'KafkaComponent',
    'KafkaConnectComponent',
    'KafkaConnectKafkaConnectUserConfig',
    'KafkaConnectKafkaConnectUserConfigIpFilterObject',
    'KafkaConnectKafkaConnectUserConfigKafkaConnect',
    'KafkaConnectKafkaConnectUserConfigPluginVersion',
    'KafkaConnectKafkaConnectUserConfigPrivateAccess',
    'KafkaConnectKafkaConnectUserConfigPrivatelinkAccess',
    'KafkaConnectKafkaConnectUserConfigPublicAccess',
    'KafkaConnectKafkaConnectUserConfigSecretProvider',
    'KafkaConnectKafkaConnectUserConfigSecretProviderAws',
    'KafkaConnectKafkaConnectUserConfigSecretProviderVault',
    'KafkaConnectServiceIntegration',
    'KafkaConnectTag',
    'KafkaConnectTechEmail',
    'KafkaConnectorTask',
    'KafkaKafka',
    'KafkaKafkaUserConfig',
    'KafkaKafkaUserConfigFollowerFetching',
    'KafkaKafkaUserConfigIpFilterObject',
    'KafkaKafkaUserConfigKafka',
    'KafkaKafkaUserConfigKafkaAuthenticationMethods',
    'KafkaKafkaUserConfigKafkaConnectConfig',
    'KafkaKafkaUserConfigKafkaConnectPluginVersion',
    'KafkaKafkaUserConfigKafkaConnectSecretProvider',
    'KafkaKafkaUserConfigKafkaConnectSecretProviderAws',
    'KafkaKafkaUserConfigKafkaConnectSecretProviderVault',
    'KafkaKafkaUserConfigKafkaRestConfig',
    'KafkaKafkaUserConfigKafkaSaslMechanisms',
    'KafkaKafkaUserConfigPrivateAccess',
    'KafkaKafkaUserConfigPrivatelinkAccess',
    'KafkaKafkaUserConfigPublicAccess',
    'KafkaKafkaUserConfigSchemaRegistryConfig',
    'KafkaKafkaUserConfigSingleZone',
    'KafkaKafkaUserConfigTieredStorage',
    'KafkaKafkaUserConfigTieredStorageLocalCache',
    'KafkaMirrorMakerComponent',
    'KafkaMirrorMakerKafkaMirrormakerUserConfig',
    'KafkaMirrorMakerKafkaMirrormakerUserConfigIpFilterObject',
    'KafkaMirrorMakerKafkaMirrormakerUserConfigKafkaMirrormaker',
    'KafkaMirrorMakerServiceIntegration',
    'KafkaMirrorMakerTag',
    'KafkaMirrorMakerTechEmail',
    'KafkaServiceIntegration',
    'KafkaTag',
    'KafkaTechEmail',
    'KafkaTopicConfig',
    'KafkaTopicTag',
    'M3AggregatorComponent',
    'M3AggregatorM3aggregator',
    'M3AggregatorM3aggregatorUserConfig',
    'M3AggregatorM3aggregatorUserConfigIpFilterObject',
    'M3AggregatorServiceIntegration',
    'M3AggregatorTag',
    'M3AggregatorTechEmail',
    'M3DbComponent',
    'M3DbM3db',
    'M3DbM3dbUserConfig',
    'M3DbM3dbUserConfigIpFilterObject',
    'M3DbM3dbUserConfigLimits',
    'M3DbM3dbUserConfigM3',
    'M3DbM3dbUserConfigM3TagOptions',
    'M3DbM3dbUserConfigNamespace',
    'M3DbM3dbUserConfigNamespaceOptions',
    'M3DbM3dbUserConfigNamespaceOptionsRetentionOptions',
    'M3DbM3dbUserConfigPrivateAccess',
    'M3DbM3dbUserConfigPublicAccess',
    'M3DbM3dbUserConfigRules',
    'M3DbM3dbUserConfigRulesMapping',
    'M3DbM3dbUserConfigRulesMappingNamespacesObject',
    'M3DbM3dbUserConfigRulesMappingTag',
    'M3DbServiceIntegration',
    'M3DbTag',
    'M3DbTechEmail',
    'MySqlComponent',
    'MySqlMysql',
    'MySqlMysqlParam',
    'MySqlMysqlUserConfig',
    'MySqlMysqlUserConfigIpFilterObject',
    'MySqlMysqlUserConfigMigration',
    'MySqlMysqlUserConfigMysql',
    'MySqlMysqlUserConfigPrivateAccess',
    'MySqlMysqlUserConfigPrivatelinkAccess',
    'MySqlMysqlUserConfigPublicAccess',
    'MySqlServiceIntegration',
    'MySqlTag',
    'MySqlTechEmail',
    'OpenSearchComponent',
    'OpenSearchOpensearch',
    'OpenSearchOpensearchUserConfig',
    'OpenSearchOpensearchUserConfigAzureMigration',
    'OpenSearchOpensearchUserConfigGcsMigration',
    'OpenSearchOpensearchUserConfigIndexPattern',
    'OpenSearchOpensearchUserConfigIndexRollup',
    'OpenSearchOpensearchUserConfigIndexTemplate',
    'OpenSearchOpensearchUserConfigIpFilterObject',
    'OpenSearchOpensearchUserConfigOpenid',
    'OpenSearchOpensearchUserConfigOpensearch',
    'OpenSearchOpensearchUserConfigOpensearchAuthFailureListeners',
    'OpenSearchOpensearchUserConfigOpensearchAuthFailureListenersInternalAuthenticationBackendLimiting',
    'OpenSearchOpensearchUserConfigOpensearchAuthFailureListenersIpRateLimiting',
    'OpenSearchOpensearchUserConfigOpensearchClusterSearchRequestSlowlog',
    'OpenSearchOpensearchUserConfigOpensearchClusterSearchRequestSlowlogThreshold',
    'OpenSearchOpensearchUserConfigOpensearchDashboards',
    'OpenSearchOpensearchUserConfigOpensearchDiskWatermarks',
    'OpenSearchOpensearchUserConfigOpensearchSearchBackpressure',
    'OpenSearchOpensearchUserConfigOpensearchSearchBackpressureNodeDuress',
    'OpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchShardTask',
    'OpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchTask',
    'OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueries',
    'OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesCpu',
    'OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesLatency',
    'OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesMemory',
    'OpenSearchOpensearchUserConfigOpensearchSegrep',
    'OpenSearchOpensearchUserConfigOpensearchShardIndexingPressure',
    'OpenSearchOpensearchUserConfigOpensearchShardIndexingPressureOperatingFactor',
    'OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameter',
    'OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterNode',
    'OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterShard',
    'OpenSearchOpensearchUserConfigPrivateAccess',
    'OpenSearchOpensearchUserConfigPrivatelinkAccess',
    'OpenSearchOpensearchUserConfigPublicAccess',
    'OpenSearchOpensearchUserConfigS3Migration',
    'OpenSearchOpensearchUserConfigSaml',
    'OpenSearchServiceIntegration',
    'OpenSearchTag',
    'OpenSearchTechEmail',
    'OrganizationAddressTimeouts',
    'OrganizationBillingGroupTimeouts',
    'OrganizationGroupProjectTimeouts',
    'OrganizationPermissionPermission',
    'OrganizationProjectTag',
    'OrganizationProjectTimeouts',
    'OrganizationTimeouts',
    'OrganizationUserGroupMemberTimeouts',
    'PgComponent',
    'PgPg',
    'PgPgParam',
    'PgPgUserConfig',
    'PgPgUserConfigIpFilterObject',
    'PgPgUserConfigMigration',
    'PgPgUserConfigPg',
    'PgPgUserConfigPgQualstats',
    'PgPgUserConfigPgaudit',
    'PgPgUserConfigPgbouncer',
    'PgPgUserConfigPglookout',
    'PgPgUserConfigPrivateAccess',
    'PgPgUserConfigPrivatelinkAccess',
    'PgPgUserConfigPublicAccess',
    'PgPgUserConfigTimescaledb',
    'PgServiceIntegration',
    'PgTag',
    'PgTechEmail',
    'ProjectTag',
    'RedisComponent',
    'RedisRedis',
    'RedisRedisUserConfig',
    'RedisRedisUserConfigIpFilterObject',
    'RedisRedisUserConfigMigration',
    'RedisRedisUserConfigPrivateAccess',
    'RedisRedisUserConfigPrivatelinkAccess',
    'RedisRedisUserConfigPublicAccess',
    'RedisServiceIntegration',
    'RedisTag',
    'RedisTechEmail',
    'ServiceIntegrationClickhouseKafkaUserConfig',
    'ServiceIntegrationClickhouseKafkaUserConfigTable',
    'ServiceIntegrationClickhouseKafkaUserConfigTableColumn',
    'ServiceIntegrationClickhouseKafkaUserConfigTableTopic',
    'ServiceIntegrationClickhousePostgresqlUserConfig',
    'ServiceIntegrationClickhousePostgresqlUserConfigDatabase',
    'ServiceIntegrationDatadogUserConfig',
    'ServiceIntegrationDatadogUserConfigDatadogTag',
    'ServiceIntegrationDatadogUserConfigOpensearch',
    'ServiceIntegrationDatadogUserConfigRedis',
    'ServiceIntegrationEndpointAutoscalerUserConfig',
    'ServiceIntegrationEndpointAutoscalerUserConfigAutoscaling',
    'ServiceIntegrationEndpointDatadogUserConfig',
    'ServiceIntegrationEndpointDatadogUserConfigDatadogTag',
    'ServiceIntegrationEndpointExternalAwsCloudwatchLogsUserConfig',
    'ServiceIntegrationEndpointExternalAwsCloudwatchMetricsUserConfig',
    'ServiceIntegrationEndpointExternalAwsS3UserConfig',
    'ServiceIntegrationEndpointExternalAzureBlobStorageUserConfig',
    'ServiceIntegrationEndpointExternalClickhouseUserConfig',
    'ServiceIntegrationEndpointExternalElasticsearchLogsUserConfig',
    'ServiceIntegrationEndpointExternalGoogleCloudBigquery',
    'ServiceIntegrationEndpointExternalGoogleCloudLoggingUserConfig',
    'ServiceIntegrationEndpointExternalKafkaUserConfig',
    'ServiceIntegrationEndpointExternalMysqlUserConfig',
    'ServiceIntegrationEndpointExternalOpensearchLogsUserConfig',
    'ServiceIntegrationEndpointExternalPostgresql',
    'ServiceIntegrationEndpointExternalPrometheusUserConfig',
    'ServiceIntegrationEndpointExternalSchemaRegistryUserConfig',
    'ServiceIntegrationEndpointJolokiaUserConfig',
    'ServiceIntegrationEndpointPrometheusUserConfig',
    'ServiceIntegrationEndpointRsyslogUserConfig',
    'ServiceIntegrationExternalAwsCloudwatchLogsUserConfig',
    'ServiceIntegrationExternalAwsCloudwatchMetricsUserConfig',
    'ServiceIntegrationExternalAwsCloudwatchMetricsUserConfigDroppedMetric',
    'ServiceIntegrationExternalAwsCloudwatchMetricsUserConfigExtraMetric',
    'ServiceIntegrationExternalElasticsearchLogsUserConfig',
    'ServiceIntegrationExternalOpensearchLogsUserConfig',
    'ServiceIntegrationFlinkExternalPostgresqlUserConfig',
    'ServiceIntegrationKafkaConnectUserConfig',
    'ServiceIntegrationKafkaConnectUserConfigKafkaConnect',
    'ServiceIntegrationKafkaLogsUserConfig',
    'ServiceIntegrationKafkaMirrormakerUserConfig',
    'ServiceIntegrationKafkaMirrormakerUserConfigKafkaMirrormaker',
    'ServiceIntegrationLogsUserConfig',
    'ServiceIntegrationMetricsUserConfig',
    'ServiceIntegrationMetricsUserConfigSourceMysql',
    'ServiceIntegrationMetricsUserConfigSourceMysqlTelegraf',
    'ServiceIntegrationPrometheusUserConfig',
    'ServiceIntegrationPrometheusUserConfigSourceMysql',
    'ServiceIntegrationPrometheusUserConfigSourceMysqlTelegraf',
    'ThanosComponent',
    'ThanosServiceIntegration',
    'ThanosTag',
    'ThanosTechEmail',
    'ThanosThanos',
    'ThanosThanosUserConfig',
    'ThanosThanosUserConfigCompactor',
    'ThanosThanosUserConfigIpFilterObject',
    'ThanosThanosUserConfigPrivateAccess',
    'ThanosThanosUserConfigPrivatelinkAccess',
    'ThanosThanosUserConfigPublicAccess',
    'ThanosThanosUserConfigQuery',
    'ThanosThanosUserConfigQueryFrontend',
    'ValkeyComponent',
    'ValkeyServiceIntegration',
    'ValkeyTag',
    'ValkeyTechEmail',
    'ValkeyValkey',
    'ValkeyValkeyUserConfig',
    'ValkeyValkeyUserConfigIpFilterObject',
    'ValkeyValkeyUserConfigMigration',
    'ValkeyValkeyUserConfigPrivateAccess',
    'ValkeyValkeyUserConfigPrivatelinkAccess',
    'ValkeyValkeyUserConfigPublicAccess',
    'GetAccountAuthenticationSamlFieldMappingResult',
    'GetAlloydbomniAlloydbomniResult',
    'GetAlloydbomniAlloydbomniParamResult',
    'GetAlloydbomniAlloydbomniUserConfigResult',
    'GetAlloydbomniAlloydbomniUserConfigIpFilterObjectResult',
    'GetAlloydbomniAlloydbomniUserConfigPgResult',
    'GetAlloydbomniAlloydbomniUserConfigPgauditResult',
    'GetAlloydbomniAlloydbomniUserConfigPgbouncerResult',
    'GetAlloydbomniAlloydbomniUserConfigPglookoutResult',
    'GetAlloydbomniAlloydbomniUserConfigPrivateAccessResult',
    'GetAlloydbomniAlloydbomniUserConfigPrivatelinkAccessResult',
    'GetAlloydbomniAlloydbomniUserConfigPublicAccessResult',
    'GetAlloydbomniComponentResult',
    'GetAlloydbomniServiceIntegrationResult',
    'GetAlloydbomniTagResult',
    'GetAlloydbomniTechEmailResult',
    'GetCassandaCassandraResult',
    'GetCassandaCassandraUserConfigResult',
    'GetCassandaCassandraUserConfigCassandraResult',
    'GetCassandaCassandraUserConfigIpFilterObjectResult',
    'GetCassandaCassandraUserConfigPrivateAccessResult',
    'GetCassandaCassandraUserConfigPublicAccessResult',
    'GetCassandaComponentResult',
    'GetCassandaServiceIntegrationResult',
    'GetCassandaTagResult',
    'GetCassandaTechEmailResult',
    'GetCassandraCassandraResult',
    'GetCassandraCassandraUserConfigResult',
    'GetCassandraCassandraUserConfigCassandraResult',
    'GetCassandraCassandraUserConfigIpFilterObjectResult',
    'GetCassandraCassandraUserConfigPrivateAccessResult',
    'GetCassandraCassandraUserConfigPublicAccessResult',
    'GetCassandraComponentResult',
    'GetCassandraServiceIntegrationResult',
    'GetCassandraTagResult',
    'GetCassandraTechEmailResult',
    'GetClickhouseClickhouseResult',
    'GetClickhouseClickhouseUserConfigResult',
    'GetClickhouseClickhouseUserConfigIpFilterObjectResult',
    'GetClickhouseClickhouseUserConfigPrivateAccessResult',
    'GetClickhouseClickhouseUserConfigPrivatelinkAccessResult',
    'GetClickhouseClickhouseUserConfigPublicAccessResult',
    'GetClickhouseComponentResult',
    'GetClickhouseServiceIntegrationResult',
    'GetClickhouseTagResult',
    'GetClickhouseTechEmailResult',
    'GetDragonflyComponentResult',
    'GetDragonflyDragonflyResult',
    'GetDragonflyDragonflyUserConfigResult',
    'GetDragonflyDragonflyUserConfigIpFilterObjectResult',
    'GetDragonflyDragonflyUserConfigMigrationResult',
    'GetDragonflyDragonflyUserConfigPrivateAccessResult',
    'GetDragonflyDragonflyUserConfigPrivatelinkAccessResult',
    'GetDragonflyDragonflyUserConfigPublicAccessResult',
    'GetDragonflyServiceIntegrationResult',
    'GetDragonflyTagResult',
    'GetDragonflyTechEmailResult',
    'GetFlinkApplicationVersionSinkResult',
    'GetFlinkApplicationVersionSourceResult',
    'GetFlinkComponentResult',
    'GetFlinkFlinkResult',
    'GetFlinkFlinkUserConfigResult',
    'GetFlinkFlinkUserConfigIpFilterObjectResult',
    'GetFlinkFlinkUserConfigPrivatelinkAccessResult',
    'GetFlinkFlinkUserConfigPublicAccessResult',
    'GetFlinkServiceIntegrationResult',
    'GetFlinkTagResult',
    'GetFlinkTechEmailResult',
    'GetGrafanaComponentResult',
    'GetGrafanaGrafanaResult',
    'GetGrafanaGrafanaUserConfigResult',
    'GetGrafanaGrafanaUserConfigAuthAzureadResult',
    'GetGrafanaGrafanaUserConfigAuthGenericOauthResult',
    'GetGrafanaGrafanaUserConfigAuthGithubResult',
    'GetGrafanaGrafanaUserConfigAuthGitlabResult',
    'GetGrafanaGrafanaUserConfigAuthGoogleResult',
    'GetGrafanaGrafanaUserConfigDateFormatsResult',
    'GetGrafanaGrafanaUserConfigExternalImageStorageResult',
    'GetGrafanaGrafanaUserConfigIpFilterObjectResult',
    'GetGrafanaGrafanaUserConfigPrivateAccessResult',
    'GetGrafanaGrafanaUserConfigPrivatelinkAccessResult',
    'GetGrafanaGrafanaUserConfigPublicAccessResult',
    'GetGrafanaGrafanaUserConfigSmtpServerResult',
    'GetGrafanaServiceIntegrationResult',
    'GetGrafanaTagResult',
    'GetGrafanaTechEmailResult',
    'GetInfluxDbComponentResult',
    'GetInfluxDbInfluxdbResult',
    'GetInfluxDbInfluxdbUserConfigResult',
    'GetInfluxDbInfluxdbUserConfigInfluxdbResult',
    'GetInfluxDbInfluxdbUserConfigIpFilterObjectResult',
    'GetInfluxDbInfluxdbUserConfigPrivateAccessResult',
    'GetInfluxDbInfluxdbUserConfigPrivatelinkAccessResult',
    'GetInfluxDbInfluxdbUserConfigPublicAccessResult',
    'GetInfluxDbServiceIntegrationResult',
    'GetInfluxDbTagResult',
    'GetInfluxDbTechEmailResult',
    'GetKafkaComponentResult',
    'GetKafkaConnectComponentResult',
    'GetKafkaConnectKafkaConnectUserConfigResult',
    'GetKafkaConnectKafkaConnectUserConfigIpFilterObjectResult',
    'GetKafkaConnectKafkaConnectUserConfigKafkaConnectResult',
    'GetKafkaConnectKafkaConnectUserConfigPluginVersionResult',
    'GetKafkaConnectKafkaConnectUserConfigPrivateAccessResult',
    'GetKafkaConnectKafkaConnectUserConfigPrivatelinkAccessResult',
    'GetKafkaConnectKafkaConnectUserConfigPublicAccessResult',
    'GetKafkaConnectKafkaConnectUserConfigSecretProviderResult',
    'GetKafkaConnectKafkaConnectUserConfigSecretProviderAwsResult',
    'GetKafkaConnectKafkaConnectUserConfigSecretProviderVaultResult',
    'GetKafkaConnectServiceIntegrationResult',
    'GetKafkaConnectTagResult',
    'GetKafkaConnectTechEmailResult',
    'GetKafkaConnectorTaskResult',
    'GetKafkaKafkaResult',
    'GetKafkaKafkaUserConfigResult',
    'GetKafkaKafkaUserConfigFollowerFetchingResult',
    'GetKafkaKafkaUserConfigIpFilterObjectResult',
    'GetKafkaKafkaUserConfigKafkaResult',
    'GetKafkaKafkaUserConfigKafkaAuthenticationMethodsResult',
    'GetKafkaKafkaUserConfigKafkaConnectConfigResult',
    'GetKafkaKafkaUserConfigKafkaConnectPluginVersionResult',
    'GetKafkaKafkaUserConfigKafkaConnectSecretProviderResult',
    'GetKafkaKafkaUserConfigKafkaConnectSecretProviderAwsResult',
    'GetKafkaKafkaUserConfigKafkaConnectSecretProviderVaultResult',
    'GetKafkaKafkaUserConfigKafkaRestConfigResult',
    'GetKafkaKafkaUserConfigKafkaSaslMechanismsResult',
    'GetKafkaKafkaUserConfigPrivateAccessResult',
    'GetKafkaKafkaUserConfigPrivatelinkAccessResult',
    'GetKafkaKafkaUserConfigPublicAccessResult',
    'GetKafkaKafkaUserConfigSchemaRegistryConfigResult',
    'GetKafkaKafkaUserConfigSingleZoneResult',
    'GetKafkaKafkaUserConfigTieredStorageResult',
    'GetKafkaKafkaUserConfigTieredStorageLocalCacheResult',
    'GetKafkaMirrorMakerComponentResult',
    'GetKafkaMirrorMakerKafkaMirrormakerUserConfigResult',
    'GetKafkaMirrorMakerKafkaMirrormakerUserConfigIpFilterObjectResult',
    'GetKafkaMirrorMakerKafkaMirrormakerUserConfigKafkaMirrormakerResult',
    'GetKafkaMirrorMakerServiceIntegrationResult',
    'GetKafkaMirrorMakerTagResult',
    'GetKafkaMirrorMakerTechEmailResult',
    'GetKafkaServiceIntegrationResult',
    'GetKafkaTagResult',
    'GetKafkaTechEmailResult',
    'GetKafkaTopicConfigResult',
    'GetKafkaTopicTagResult',
    'GetM3AggregatorComponentResult',
    'GetM3AggregatorM3aggregatorResult',
    'GetM3AggregatorM3aggregatorUserConfigResult',
    'GetM3AggregatorM3aggregatorUserConfigIpFilterObjectResult',
    'GetM3AggregatorServiceIntegrationResult',
    'GetM3AggregatorTagResult',
    'GetM3AggregatorTechEmailResult',
    'GetM3DbComponentResult',
    'GetM3DbM3dbResult',
    'GetM3DbM3dbUserConfigResult',
    'GetM3DbM3dbUserConfigIpFilterObjectResult',
    'GetM3DbM3dbUserConfigLimitsResult',
    'GetM3DbM3dbUserConfigM3Result',
    'GetM3DbM3dbUserConfigM3TagOptionsResult',
    'GetM3DbM3dbUserConfigNamespaceResult',
    'GetM3DbM3dbUserConfigNamespaceOptionsResult',
    'GetM3DbM3dbUserConfigNamespaceOptionsRetentionOptionsResult',
    'GetM3DbM3dbUserConfigPrivateAccessResult',
    'GetM3DbM3dbUserConfigPublicAccessResult',
    'GetM3DbM3dbUserConfigRulesResult',
    'GetM3DbM3dbUserConfigRulesMappingResult',
    'GetM3DbM3dbUserConfigRulesMappingNamespacesObjectResult',
    'GetM3DbM3dbUserConfigRulesMappingTagResult',
    'GetM3DbServiceIntegrationResult',
    'GetM3DbTagResult',
    'GetM3DbTechEmailResult',
    'GetMySqlComponentResult',
    'GetMySqlMysqlResult',
    'GetMySqlMysqlParamResult',
    'GetMySqlMysqlUserConfigResult',
    'GetMySqlMysqlUserConfigIpFilterObjectResult',
    'GetMySqlMysqlUserConfigMigrationResult',
    'GetMySqlMysqlUserConfigMysqlResult',
    'GetMySqlMysqlUserConfigPrivateAccessResult',
    'GetMySqlMysqlUserConfigPrivatelinkAccessResult',
    'GetMySqlMysqlUserConfigPublicAccessResult',
    'GetMySqlServiceIntegrationResult',
    'GetMySqlTagResult',
    'GetMySqlTechEmailResult',
    'GetOpenSearchComponentResult',
    'GetOpenSearchOpensearchResult',
    'GetOpenSearchOpensearchUserConfigResult',
    'GetOpenSearchOpensearchUserConfigAzureMigrationResult',
    'GetOpenSearchOpensearchUserConfigGcsMigrationResult',
    'GetOpenSearchOpensearchUserConfigIndexPatternResult',
    'GetOpenSearchOpensearchUserConfigIndexRollupResult',
    'GetOpenSearchOpensearchUserConfigIndexTemplateResult',
    'GetOpenSearchOpensearchUserConfigIpFilterObjectResult',
    'GetOpenSearchOpensearchUserConfigOpenidResult',
    'GetOpenSearchOpensearchUserConfigOpensearchResult',
    'GetOpenSearchOpensearchUserConfigOpensearchAuthFailureListenersResult',
    'GetOpenSearchOpensearchUserConfigOpensearchAuthFailureListenersInternalAuthenticationBackendLimitingResult',
    'GetOpenSearchOpensearchUserConfigOpensearchAuthFailureListenersIpRateLimitingResult',
    'GetOpenSearchOpensearchUserConfigOpensearchClusterSearchRequestSlowlogResult',
    'GetOpenSearchOpensearchUserConfigOpensearchClusterSearchRequestSlowlogThresholdResult',
    'GetOpenSearchOpensearchUserConfigOpensearchDashboardsResult',
    'GetOpenSearchOpensearchUserConfigOpensearchDiskWatermarksResult',
    'GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureResult',
    'GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureNodeDuressResult',
    'GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchShardTaskResult',
    'GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchTaskResult',
    'GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesResult',
    'GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesCpuResult',
    'GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesLatencyResult',
    'GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesMemoryResult',
    'GetOpenSearchOpensearchUserConfigOpensearchSegrepResult',
    'GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressureResult',
    'GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressureOperatingFactorResult',
    'GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterResult',
    'GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterNodeResult',
    'GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterShardResult',
    'GetOpenSearchOpensearchUserConfigPrivateAccessResult',
    'GetOpenSearchOpensearchUserConfigPrivatelinkAccessResult',
    'GetOpenSearchOpensearchUserConfigPublicAccessResult',
    'GetOpenSearchOpensearchUserConfigS3MigrationResult',
    'GetOpenSearchOpensearchUserConfigSamlResult',
    'GetOpenSearchServiceIntegrationResult',
    'GetOpenSearchTagResult',
    'GetOpenSearchTechEmailResult',
    'GetOrganizationAddressTimeoutsResult',
    'GetOrganizationBillingGroupListBillingGroupResult',
    'GetOrganizationBillingGroupListTimeoutsResult',
    'GetOrganizationBillingGroupTimeoutsResult',
    'GetOrganizationProjectTagResult',
    'GetOrganizationProjectTimeoutsResult',
    'GetOrganizationTimeoutsResult',
    'GetOrganizationUserListUserResult',
    'GetOrganizationUserListUserUserInfoResult',
    'GetPgComponentResult',
    'GetPgPgResult',
    'GetPgPgParamResult',
    'GetPgPgUserConfigResult',
    'GetPgPgUserConfigIpFilterObjectResult',
    'GetPgPgUserConfigMigrationResult',
    'GetPgPgUserConfigPgResult',
    'GetPgPgUserConfigPgQualstatsResult',
    'GetPgPgUserConfigPgauditResult',
    'GetPgPgUserConfigPgbouncerResult',
    'GetPgPgUserConfigPglookoutResult',
    'GetPgPgUserConfigPrivateAccessResult',
    'GetPgPgUserConfigPrivatelinkAccessResult',
    'GetPgPgUserConfigPublicAccessResult',
    'GetPgPgUserConfigTimescaledbResult',
    'GetPgServiceIntegrationResult',
    'GetPgTagResult',
    'GetPgTechEmailResult',
    'GetProjectTagResult',
    'GetRedisComponentResult',
    'GetRedisRediResult',
    'GetRedisRedisUserConfigResult',
    'GetRedisRedisUserConfigIpFilterObjectResult',
    'GetRedisRedisUserConfigMigrationResult',
    'GetRedisRedisUserConfigPrivateAccessResult',
    'GetRedisRedisUserConfigPrivatelinkAccessResult',
    'GetRedisRedisUserConfigPublicAccessResult',
    'GetRedisServiceIntegrationResult',
    'GetRedisTagResult',
    'GetRedisTechEmailResult',
    'GetServiceIntegrationClickhouseKafkaUserConfigResult',
    'GetServiceIntegrationClickhouseKafkaUserConfigTableResult',
    'GetServiceIntegrationClickhouseKafkaUserConfigTableColumnResult',
    'GetServiceIntegrationClickhouseKafkaUserConfigTableTopicResult',
    'GetServiceIntegrationClickhousePostgresqlUserConfigResult',
    'GetServiceIntegrationClickhousePostgresqlUserConfigDatabaseResult',
    'GetServiceIntegrationDatadogUserConfigResult',
    'GetServiceIntegrationDatadogUserConfigDatadogTagResult',
    'GetServiceIntegrationDatadogUserConfigOpensearchResult',
    'GetServiceIntegrationDatadogUserConfigRedisResult',
    'GetServiceIntegrationEndpointAutoscalerUserConfigResult',
    'GetServiceIntegrationEndpointAutoscalerUserConfigAutoscalingResult',
    'GetServiceIntegrationEndpointDatadogUserConfigResult',
    'GetServiceIntegrationEndpointDatadogUserConfigDatadogTagResult',
    'GetServiceIntegrationEndpointExternalAwsCloudwatchLogsUserConfigResult',
    'GetServiceIntegrationEndpointExternalAwsCloudwatchMetricsUserConfigResult',
    'GetServiceIntegrationEndpointExternalAwsS3UserConfigResult',
    'GetServiceIntegrationEndpointExternalAzureBlobStorageUserConfigResult',
    'GetServiceIntegrationEndpointExternalClickhouseUserConfigResult',
    'GetServiceIntegrationEndpointExternalElasticsearchLogsUserConfigResult',
    'GetServiceIntegrationEndpointExternalGoogleCloudBigqueryResult',
    'GetServiceIntegrationEndpointExternalGoogleCloudLoggingUserConfigResult',
    'GetServiceIntegrationEndpointExternalKafkaUserConfigResult',
    'GetServiceIntegrationEndpointExternalMysqlUserConfigResult',
    'GetServiceIntegrationEndpointExternalOpensearchLogsUserConfigResult',
    'GetServiceIntegrationEndpointExternalPostgresqlResult',
    'GetServiceIntegrationEndpointExternalPrometheusUserConfigResult',
    'GetServiceIntegrationEndpointExternalSchemaRegistryUserConfigResult',
    'GetServiceIntegrationEndpointJolokiaUserConfigResult',
    'GetServiceIntegrationEndpointPrometheusUserConfigResult',
    'GetServiceIntegrationEndpointRsyslogUserConfigResult',
    'GetServiceIntegrationExternalAwsCloudwatchLogsUserConfigResult',
    'GetServiceIntegrationExternalAwsCloudwatchMetricsUserConfigResult',
    'GetServiceIntegrationExternalAwsCloudwatchMetricsUserConfigDroppedMetricResult',
    'GetServiceIntegrationExternalAwsCloudwatchMetricsUserConfigExtraMetricResult',
    'GetServiceIntegrationExternalElasticsearchLogsUserConfigResult',
    'GetServiceIntegrationExternalOpensearchLogsUserConfigResult',
    'GetServiceIntegrationFlinkExternalPostgresqlUserConfigResult',
    'GetServiceIntegrationKafkaConnectUserConfigResult',
    'GetServiceIntegrationKafkaConnectUserConfigKafkaConnectResult',
    'GetServiceIntegrationKafkaLogsUserConfigResult',
    'GetServiceIntegrationKafkaMirrormakerUserConfigResult',
    'GetServiceIntegrationKafkaMirrormakerUserConfigKafkaMirrormakerResult',
    'GetServiceIntegrationLogsUserConfigResult',
    'GetServiceIntegrationMetricsUserConfigResult',
    'GetServiceIntegrationMetricsUserConfigSourceMysqlResult',
    'GetServiceIntegrationMetricsUserConfigSourceMysqlTelegrafResult',
    'GetServiceIntegrationPrometheusUserConfigResult',
    'GetServiceIntegrationPrometheusUserConfigSourceMysqlResult',
    'GetServiceIntegrationPrometheusUserConfigSourceMysqlTelegrafResult',
    'GetThanosComponentResult',
    'GetThanosServiceIntegrationResult',
    'GetThanosTagResult',
    'GetThanosTechEmailResult',
    'GetThanosThanoResult',
    'GetThanosThanosUserConfigResult',
    'GetThanosThanosUserConfigCompactorResult',
    'GetThanosThanosUserConfigIpFilterObjectResult',
    'GetThanosThanosUserConfigPrivateAccessResult',
    'GetThanosThanosUserConfigPrivatelinkAccessResult',
    'GetThanosThanosUserConfigPublicAccessResult',
    'GetThanosThanosUserConfigQueryResult',
    'GetThanosThanosUserConfigQueryFrontendResult',
    'GetValkeyComponentResult',
    'GetValkeyServiceIntegrationResult',
    'GetValkeyTagResult',
    'GetValkeyTechEmailResult',
    'GetValkeyValkeyResult',
    'GetValkeyValkeyUserConfigResult',
    'GetValkeyValkeyUserConfigIpFilterObjectResult',
    'GetValkeyValkeyUserConfigMigrationResult',
    'GetValkeyValkeyUserConfigPrivateAccessResult',
    'GetValkeyValkeyUserConfigPrivatelinkAccessResult',
    'GetValkeyValkeyUserConfigPublicAccessResult',
]

@pulumi.output_type
class AccountAuthenticationSamlFieldMapping(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "firstName":
            suggest = "first_name"
        elif key == "lastName":
            suggest = "last_name"
        elif key == "realName":
            suggest = "real_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in AccountAuthenticationSamlFieldMapping. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        AccountAuthenticationSamlFieldMapping.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        AccountAuthenticationSamlFieldMapping.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 email: Optional[builtins.str] = None,
                 first_name: Optional[builtins.str] = None,
                 identity: Optional[builtins.str] = None,
                 last_name: Optional[builtins.str] = None,
                 real_name: Optional[builtins.str] = None):
        """
        :param builtins.str email: Field name for user email
        :param builtins.str first_name: Field name for user's first name
        :param builtins.str identity: Field name for user's identity. This field must always exist in responses, and must be immutable and unique. Contents of this field are used to identify the user. Using user ID (such as unix user id) is highly recommended, as email address may change, requiring relinking user to Aiven user.
        :param builtins.str last_name: Field name for user's last name
        :param builtins.str real_name: Field name for user's full name. If specified, first*name and last*name mappings are ignored
        """
        if email is not None:
            pulumi.set(__self__, "email", email)
        if first_name is not None:
            pulumi.set(__self__, "first_name", first_name)
        if identity is not None:
            pulumi.set(__self__, "identity", identity)
        if last_name is not None:
            pulumi.set(__self__, "last_name", last_name)
        if real_name is not None:
            pulumi.set(__self__, "real_name", real_name)

    @property
    @pulumi.getter
    def email(self) -> Optional[builtins.str]:
        """
        Field name for user email
        """
        return pulumi.get(self, "email")

    @property
    @pulumi.getter(name="firstName")
    def first_name(self) -> Optional[builtins.str]:
        """
        Field name for user's first name
        """
        return pulumi.get(self, "first_name")

    @property
    @pulumi.getter
    def identity(self) -> Optional[builtins.str]:
        """
        Field name for user's identity. This field must always exist in responses, and must be immutable and unique. Contents of this field are used to identify the user. Using user ID (such as unix user id) is highly recommended, as email address may change, requiring relinking user to Aiven user.
        """
        return pulumi.get(self, "identity")

    @property
    @pulumi.getter(name="lastName")
    def last_name(self) -> Optional[builtins.str]:
        """
        Field name for user's last name
        """
        return pulumi.get(self, "last_name")

    @property
    @pulumi.getter(name="realName")
    def real_name(self) -> Optional[builtins.str]:
        """
        Field name for user's full name. If specified, first*name and last*name mappings are ignored
        """
        return pulumi.get(self, "real_name")


@pulumi.output_type
class AlloydbomniAlloydbomni(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "maxConnections":
            suggest = "max_connections"
        elif key == "replicaUri":
            suggest = "replica_uri"
        elif key == "standbyUris":
            suggest = "standby_uris"
        elif key == "syncingUris":
            suggest = "syncing_uris"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in AlloydbomniAlloydbomni. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        AlloydbomniAlloydbomni.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        AlloydbomniAlloydbomni.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 bouncer: Optional[builtins.str] = None,
                 dbname: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 max_connections: Optional[builtins.int] = None,
                 params: Optional[Sequence['outputs.AlloydbomniAlloydbomniParam']] = None,
                 password: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 replica_uri: Optional[builtins.str] = None,
                 sslmode: Optional[builtins.str] = None,
                 standby_uris: Optional[Sequence[builtins.str]] = None,
                 syncing_uris: Optional[Sequence[builtins.str]] = None,
                 uri: Optional[builtins.str] = None,
                 uris: Optional[Sequence[builtins.str]] = None,
                 user: Optional[builtins.str] = None):
        """
        :param builtins.str bouncer: PgBouncer connection details for [connection pooling](https://aiven.io/docs/products/postgresql/concepts/pg-connection-pooling).
        :param builtins.str dbname: Primary AlloyDB Omni database name.
        :param builtins.str host: AlloyDB Omni primary node host IP or name.
        :param builtins.int max_connections: The [number of allowed connections](https://aiven.io/docs/products/postgresql/reference/pg-connection-limits). Varies based on the service plan.
        :param Sequence['AlloydbomniAlloydbomniParamArgs'] params: AlloyDB Omni connection parameters.
        :param builtins.str password: AlloyDB Omni admin user password.
        :param builtins.int port: AlloyDB Omni port.
        :param builtins.str replica_uri: AlloyDB Omni replica URI for services with a replica.
        :param builtins.str sslmode: AlloyDB Omni SSL mode setting.
        :param Sequence[builtins.str] standby_uris: AlloyDB Omni standby connection URIs.
        :param Sequence[builtins.str] syncing_uris: AlloyDB Omni syncing connection URIs.
        :param builtins.str uri: AlloyDB Omni primary connection URI.
        :param Sequence[builtins.str] uris: AlloyDB Omni primary connection URIs.
        :param builtins.str user: AlloyDB Omni admin user name.
        """
        if bouncer is not None:
            pulumi.set(__self__, "bouncer", bouncer)
        if dbname is not None:
            pulumi.set(__self__, "dbname", dbname)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if max_connections is not None:
            pulumi.set(__self__, "max_connections", max_connections)
        if params is not None:
            pulumi.set(__self__, "params", params)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if replica_uri is not None:
            pulumi.set(__self__, "replica_uri", replica_uri)
        if sslmode is not None:
            pulumi.set(__self__, "sslmode", sslmode)
        if standby_uris is not None:
            pulumi.set(__self__, "standby_uris", standby_uris)
        if syncing_uris is not None:
            pulumi.set(__self__, "syncing_uris", syncing_uris)
        if uri is not None:
            pulumi.set(__self__, "uri", uri)
        if uris is not None:
            pulumi.set(__self__, "uris", uris)
        if user is not None:
            pulumi.set(__self__, "user", user)

    @property
    @pulumi.getter
    @_utilities.deprecated("""This field was added by mistake and has never worked. It will be removed in future versions.""")
    def bouncer(self) -> Optional[builtins.str]:
        """
        PgBouncer connection details for [connection pooling](https://aiven.io/docs/products/postgresql/concepts/pg-connection-pooling).
        """
        return pulumi.get(self, "bouncer")

    @property
    @pulumi.getter
    def dbname(self) -> Optional[builtins.str]:
        """
        Primary AlloyDB Omni database name.
        """
        return pulumi.get(self, "dbname")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        AlloyDB Omni primary node host IP or name.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="maxConnections")
    def max_connections(self) -> Optional[builtins.int]:
        """
        The [number of allowed connections](https://aiven.io/docs/products/postgresql/reference/pg-connection-limits). Varies based on the service plan.
        """
        return pulumi.get(self, "max_connections")

    @property
    @pulumi.getter
    def params(self) -> Optional[Sequence['outputs.AlloydbomniAlloydbomniParam']]:
        """
        AlloyDB Omni connection parameters.
        """
        return pulumi.get(self, "params")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        AlloyDB Omni admin user password.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        AlloyDB Omni port.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter(name="replicaUri")
    def replica_uri(self) -> Optional[builtins.str]:
        """
        AlloyDB Omni replica URI for services with a replica.
        """
        return pulumi.get(self, "replica_uri")

    @property
    @pulumi.getter
    def sslmode(self) -> Optional[builtins.str]:
        """
        AlloyDB Omni SSL mode setting.
        """
        return pulumi.get(self, "sslmode")

    @property
    @pulumi.getter(name="standbyUris")
    def standby_uris(self) -> Optional[Sequence[builtins.str]]:
        """
        AlloyDB Omni standby connection URIs.
        """
        return pulumi.get(self, "standby_uris")

    @property
    @pulumi.getter(name="syncingUris")
    def syncing_uris(self) -> Optional[Sequence[builtins.str]]:
        """
        AlloyDB Omni syncing connection URIs.
        """
        return pulumi.get(self, "syncing_uris")

    @property
    @pulumi.getter
    def uri(self) -> Optional[builtins.str]:
        """
        AlloyDB Omni primary connection URI.
        """
        return pulumi.get(self, "uri")

    @property
    @pulumi.getter
    def uris(self) -> Optional[Sequence[builtins.str]]:
        """
        AlloyDB Omni primary connection URIs.
        """
        return pulumi.get(self, "uris")

    @property
    @pulumi.getter
    def user(self) -> Optional[builtins.str]:
        """
        AlloyDB Omni admin user name.
        """
        return pulumi.get(self, "user")


@pulumi.output_type
class AlloydbomniAlloydbomniParam(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "databaseName":
            suggest = "database_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in AlloydbomniAlloydbomniParam. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        AlloydbomniAlloydbomniParam.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        AlloydbomniAlloydbomniParam.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 database_name: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 sslmode: Optional[builtins.str] = None,
                 user: Optional[builtins.str] = None):
        """
        :param builtins.str database_name: Primary AlloyDB Omni database name.
        :param builtins.str host: AlloyDB Omni host IP or name.
        :param builtins.str password: AlloyDB Omni admin user password.
        :param builtins.int port: AlloyDB Omni port.
        :param builtins.str sslmode: AlloyDB Omni SSL mode setting.
        :param builtins.str user: AlloyDB Omni admin user name.
        """
        if database_name is not None:
            pulumi.set(__self__, "database_name", database_name)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if sslmode is not None:
            pulumi.set(__self__, "sslmode", sslmode)
        if user is not None:
            pulumi.set(__self__, "user", user)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> Optional[builtins.str]:
        """
        Primary AlloyDB Omni database name.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        AlloyDB Omni host IP or name.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        AlloyDB Omni admin user password.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        AlloyDB Omni port.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def sslmode(self) -> Optional[builtins.str]:
        """
        AlloyDB Omni SSL mode setting.
        """
        return pulumi.get(self, "sslmode")

    @property
    @pulumi.getter
    def user(self) -> Optional[builtins.str]:
        """
        AlloyDB Omni admin user name.
        """
        return pulumi.get(self, "user")


@pulumi.output_type
class AlloydbomniAlloydbomniUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "additionalBackupRegions":
            suggest = "additional_backup_regions"
        elif key == "adminPassword":
            suggest = "admin_password"
        elif key == "adminUsername":
            suggest = "admin_username"
        elif key == "alloydbomniVersion":
            suggest = "alloydbomni_version"
        elif key == "backupHour":
            suggest = "backup_hour"
        elif key == "backupMinute":
            suggest = "backup_minute"
        elif key == "enableIpv6":
            suggest = "enable_ipv6"
        elif key == "googleColumnarEngineEnabled":
            suggest = "google_columnar_engine_enabled"
        elif key == "googleColumnarEngineMemorySizePercentage":
            suggest = "google_columnar_engine_memory_size_percentage"
        elif key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "pgReadReplica":
            suggest = "pg_read_replica"
        elif key == "pgServiceToForkFrom":
            suggest = "pg_service_to_fork_from"
        elif key == "pgVersion":
            suggest = "pg_version"
        elif key == "privateAccess":
            suggest = "private_access"
        elif key == "privatelinkAccess":
            suggest = "privatelink_access"
        elif key == "projectToForkFrom":
            suggest = "project_to_fork_from"
        elif key == "publicAccess":
            suggest = "public_access"
        elif key == "recoveryTargetTime":
            suggest = "recovery_target_time"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "serviceToForkFrom":
            suggest = "service_to_fork_from"
        elif key == "sharedBuffersPercentage":
            suggest = "shared_buffers_percentage"
        elif key == "staticIps":
            suggest = "static_ips"
        elif key == "synchronousReplication":
            suggest = "synchronous_replication"
        elif key == "workMem":
            suggest = "work_mem"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in AlloydbomniAlloydbomniUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        AlloydbomniAlloydbomniUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        AlloydbomniAlloydbomniUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 admin_password: Optional[builtins.str] = None,
                 admin_username: Optional[builtins.str] = None,
                 alloydbomni_version: Optional[builtins.str] = None,
                 backup_hour: Optional[builtins.int] = None,
                 backup_minute: Optional[builtins.int] = None,
                 enable_ipv6: Optional[builtins.bool] = None,
                 google_columnar_engine_enabled: Optional[builtins.bool] = None,
                 google_columnar_engine_memory_size_percentage: Optional[builtins.int] = None,
                 ip_filter_objects: Optional[Sequence['outputs.AlloydbomniAlloydbomniUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 pg: Optional['outputs.AlloydbomniAlloydbomniUserConfigPg'] = None,
                 pg_read_replica: Optional[builtins.bool] = None,
                 pg_service_to_fork_from: Optional[builtins.str] = None,
                 pg_version: Optional[builtins.str] = None,
                 pgaudit: Optional['outputs.AlloydbomniAlloydbomniUserConfigPgaudit'] = None,
                 pgbouncer: Optional['outputs.AlloydbomniAlloydbomniUserConfigPgbouncer'] = None,
                 pglookout: Optional['outputs.AlloydbomniAlloydbomniUserConfigPglookout'] = None,
                 private_access: Optional['outputs.AlloydbomniAlloydbomniUserConfigPrivateAccess'] = None,
                 privatelink_access: Optional['outputs.AlloydbomniAlloydbomniUserConfigPrivatelinkAccess'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.AlloydbomniAlloydbomniUserConfigPublicAccess'] = None,
                 recovery_target_time: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 shared_buffers_percentage: Optional[builtins.float] = None,
                 static_ips: Optional[builtins.bool] = None,
                 synchronous_replication: Optional[builtins.str] = None,
                 variant: Optional[builtins.str] = None,
                 work_mem: Optional[builtins.int] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.str admin_password: Custom password for admin user. Defaults to random string. This must be set only when a new service is being created.
        :param builtins.str admin_username: Custom username for admin user. This must be set only when a new service is being created. Example: `avnadmin`.
        :param builtins.str alloydbomni_version: Enum: `15`, and newer. PostgreSQL major version.
        :param builtins.int backup_hour: The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        :param builtins.int backup_minute: The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        :param builtins.bool enable_ipv6: Register AAAA DNS records for the service, and allow IPv6 packets to service ports.
        :param builtins.bool google_columnar_engine_enabled: Enables or disables the columnar engine. When enabled, it accelerates SQL query processing. Default: `true`.
        :param builtins.int google_columnar_engine_memory_size_percentage: Allocate the amount of RAM to store columnar data. Default: `10`.
        :param Sequence['AlloydbomniAlloydbomniUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'AlloydbomniAlloydbomniUserConfigPgArgs' pg: postgresql.conf configuration values
        :param builtins.bool pg_read_replica: Should the service which is being forked be a read replica (deprecated, use read_replica service integration instead).
        :param builtins.str pg_service_to_fork_from: Name of the PG Service from which to fork (deprecated, use service*to*fork_from). This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.str pg_version: Enum: `15`, and newer. PostgreSQL major version.
        :param 'AlloydbomniAlloydbomniUserConfigPgauditArgs' pgaudit: System-wide settings for the pgaudit extension
        :param 'AlloydbomniAlloydbomniUserConfigPgbouncerArgs' pgbouncer: PGBouncer connection pooling settings
        :param 'AlloydbomniAlloydbomniUserConfigPglookoutArgs' pglookout: System-wide settings for pglookout
        :param 'AlloydbomniAlloydbomniUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'AlloydbomniAlloydbomniUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'AlloydbomniAlloydbomniUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_target_time: Recovery target time when forking a service. This has effect only when a new service is being created. Example: `2019-01-01 23:34:45`.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.float shared_buffers_percentage: Percentage of total RAM that the database server uses for shared memory buffers. Valid range is 20-60 (float), which corresponds to 20% - 60%. This setting adjusts the shared_buffers configuration value. Changing this parameter causes a service restart. Example: `41.5`.
        :param builtins.bool static_ips: Use static public IP addresses.
        :param builtins.str synchronous_replication: Enum: `off`, `quorum`. Synchronous replication type. Note that the service plan also needs to support synchronous replication.
        :param builtins.str variant: Enum: `aiven`, `timescale`. Variant of the PostgreSQL service, may affect the features that are exposed by default.
        :param builtins.int work_mem: Sets the maximum amount of memory to be used by a query operation (such as a sort or hash table) before writing to temporary disk files, in MB. The default is 1MB + 0.075% of total RAM (up to 32MB). Example: `4`.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if admin_password is not None:
            pulumi.set(__self__, "admin_password", admin_password)
        if admin_username is not None:
            pulumi.set(__self__, "admin_username", admin_username)
        if alloydbomni_version is not None:
            pulumi.set(__self__, "alloydbomni_version", alloydbomni_version)
        if backup_hour is not None:
            pulumi.set(__self__, "backup_hour", backup_hour)
        if backup_minute is not None:
            pulumi.set(__self__, "backup_minute", backup_minute)
        if enable_ipv6 is not None:
            pulumi.set(__self__, "enable_ipv6", enable_ipv6)
        if google_columnar_engine_enabled is not None:
            pulumi.set(__self__, "google_columnar_engine_enabled", google_columnar_engine_enabled)
        if google_columnar_engine_memory_size_percentage is not None:
            pulumi.set(__self__, "google_columnar_engine_memory_size_percentage", google_columnar_engine_memory_size_percentage)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if pg is not None:
            pulumi.set(__self__, "pg", pg)
        if pg_read_replica is not None:
            pulumi.set(__self__, "pg_read_replica", pg_read_replica)
        if pg_service_to_fork_from is not None:
            pulumi.set(__self__, "pg_service_to_fork_from", pg_service_to_fork_from)
        if pg_version is not None:
            pulumi.set(__self__, "pg_version", pg_version)
        if pgaudit is not None:
            pulumi.set(__self__, "pgaudit", pgaudit)
        if pgbouncer is not None:
            pulumi.set(__self__, "pgbouncer", pgbouncer)
        if pglookout is not None:
            pulumi.set(__self__, "pglookout", pglookout)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_target_time is not None:
            pulumi.set(__self__, "recovery_target_time", recovery_target_time)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if shared_buffers_percentage is not None:
            pulumi.set(__self__, "shared_buffers_percentage", shared_buffers_percentage)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)
        if synchronous_replication is not None:
            pulumi.set(__self__, "synchronous_replication", synchronous_replication)
        if variant is not None:
            pulumi.set(__self__, "variant", variant)
        if work_mem is not None:
            pulumi.set(__self__, "work_mem", work_mem)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="adminPassword")
    def admin_password(self) -> Optional[builtins.str]:
        """
        Custom password for admin user. Defaults to random string. This must be set only when a new service is being created.
        """
        return pulumi.get(self, "admin_password")

    @property
    @pulumi.getter(name="adminUsername")
    def admin_username(self) -> Optional[builtins.str]:
        """
        Custom username for admin user. This must be set only when a new service is being created. Example: `avnadmin`.
        """
        return pulumi.get(self, "admin_username")

    @property
    @pulumi.getter(name="alloydbomniVersion")
    def alloydbomni_version(self) -> Optional[builtins.str]:
        """
        Enum: `15`, and newer. PostgreSQL major version.
        """
        return pulumi.get(self, "alloydbomni_version")

    @property
    @pulumi.getter(name="backupHour")
    def backup_hour(self) -> Optional[builtins.int]:
        """
        The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        """
        return pulumi.get(self, "backup_hour")

    @property
    @pulumi.getter(name="backupMinute")
    def backup_minute(self) -> Optional[builtins.int]:
        """
        The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        """
        return pulumi.get(self, "backup_minute")

    @property
    @pulumi.getter(name="enableIpv6")
    def enable_ipv6(self) -> Optional[builtins.bool]:
        """
        Register AAAA DNS records for the service, and allow IPv6 packets to service ports.
        """
        return pulumi.get(self, "enable_ipv6")

    @property
    @pulumi.getter(name="googleColumnarEngineEnabled")
    def google_columnar_engine_enabled(self) -> Optional[builtins.bool]:
        """
        Enables or disables the columnar engine. When enabled, it accelerates SQL query processing. Default: `true`.
        """
        return pulumi.get(self, "google_columnar_engine_enabled")

    @property
    @pulumi.getter(name="googleColumnarEngineMemorySizePercentage")
    def google_columnar_engine_memory_size_percentage(self) -> Optional[builtins.int]:
        """
        Allocate the amount of RAM to store columnar data. Default: `10`.
        """
        return pulumi.get(self, "google_columnar_engine_memory_size_percentage")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.AlloydbomniAlloydbomniUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter
    def pg(self) -> Optional['outputs.AlloydbomniAlloydbomniUserConfigPg']:
        """
        postgresql.conf configuration values
        """
        return pulumi.get(self, "pg")

    @property
    @pulumi.getter(name="pgReadReplica")
    def pg_read_replica(self) -> Optional[builtins.bool]:
        """
        Should the service which is being forked be a read replica (deprecated, use read_replica service integration instead).
        """
        return pulumi.get(self, "pg_read_replica")

    @property
    @pulumi.getter(name="pgServiceToForkFrom")
    def pg_service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of the PG Service from which to fork (deprecated, use service*to*fork_from). This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "pg_service_to_fork_from")

    @property
    @pulumi.getter(name="pgVersion")
    def pg_version(self) -> Optional[builtins.str]:
        """
        Enum: `15`, and newer. PostgreSQL major version.
        """
        return pulumi.get(self, "pg_version")

    @property
    @pulumi.getter
    def pgaudit(self) -> Optional['outputs.AlloydbomniAlloydbomniUserConfigPgaudit']:
        """
        System-wide settings for the pgaudit extension
        """
        return pulumi.get(self, "pgaudit")

    @property
    @pulumi.getter
    def pgbouncer(self) -> Optional['outputs.AlloydbomniAlloydbomniUserConfigPgbouncer']:
        """
        PGBouncer connection pooling settings
        """
        return pulumi.get(self, "pgbouncer")

    @property
    @pulumi.getter
    def pglookout(self) -> Optional['outputs.AlloydbomniAlloydbomniUserConfigPglookout']:
        """
        System-wide settings for pglookout
        """
        return pulumi.get(self, "pglookout")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.AlloydbomniAlloydbomniUserConfigPrivateAccess']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.AlloydbomniAlloydbomniUserConfigPrivatelinkAccess']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.AlloydbomniAlloydbomniUserConfigPublicAccess']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryTargetTime")
    def recovery_target_time(self) -> Optional[builtins.str]:
        """
        Recovery target time when forking a service. This has effect only when a new service is being created. Example: `2019-01-01 23:34:45`.
        """
        return pulumi.get(self, "recovery_target_time")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="sharedBuffersPercentage")
    def shared_buffers_percentage(self) -> Optional[builtins.float]:
        """
        Percentage of total RAM that the database server uses for shared memory buffers. Valid range is 20-60 (float), which corresponds to 20% - 60%. This setting adjusts the shared_buffers configuration value. Changing this parameter causes a service restart. Example: `41.5`.
        """
        return pulumi.get(self, "shared_buffers_percentage")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")

    @property
    @pulumi.getter(name="synchronousReplication")
    def synchronous_replication(self) -> Optional[builtins.str]:
        """
        Enum: `off`, `quorum`. Synchronous replication type. Note that the service plan also needs to support synchronous replication.
        """
        return pulumi.get(self, "synchronous_replication")

    @property
    @pulumi.getter
    def variant(self) -> Optional[builtins.str]:
        """
        Enum: `aiven`, `timescale`. Variant of the PostgreSQL service, may affect the features that are exposed by default.
        """
        return pulumi.get(self, "variant")

    @property
    @pulumi.getter(name="workMem")
    def work_mem(self) -> Optional[builtins.int]:
        """
        Sets the maximum amount of memory to be used by a query operation (such as a sort or hash table) before writing to temporary disk files, in MB. The default is 1MB + 0.075% of total RAM (up to 32MB). Example: `4`.
        """
        return pulumi.get(self, "work_mem")


@pulumi.output_type
class AlloydbomniAlloydbomniUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class AlloydbomniAlloydbomniUserConfigPg(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "autovacuumAnalyzeScaleFactor":
            suggest = "autovacuum_analyze_scale_factor"
        elif key == "autovacuumAnalyzeThreshold":
            suggest = "autovacuum_analyze_threshold"
        elif key == "autovacuumFreezeMaxAge":
            suggest = "autovacuum_freeze_max_age"
        elif key == "autovacuumMaxWorkers":
            suggest = "autovacuum_max_workers"
        elif key == "autovacuumNaptime":
            suggest = "autovacuum_naptime"
        elif key == "autovacuumVacuumCostDelay":
            suggest = "autovacuum_vacuum_cost_delay"
        elif key == "autovacuumVacuumCostLimit":
            suggest = "autovacuum_vacuum_cost_limit"
        elif key == "autovacuumVacuumScaleFactor":
            suggest = "autovacuum_vacuum_scale_factor"
        elif key == "autovacuumVacuumThreshold":
            suggest = "autovacuum_vacuum_threshold"
        elif key == "bgwriterDelay":
            suggest = "bgwriter_delay"
        elif key == "bgwriterFlushAfter":
            suggest = "bgwriter_flush_after"
        elif key == "bgwriterLruMaxpages":
            suggest = "bgwriter_lru_maxpages"
        elif key == "bgwriterLruMultiplier":
            suggest = "bgwriter_lru_multiplier"
        elif key == "deadlockTimeout":
            suggest = "deadlock_timeout"
        elif key == "defaultToastCompression":
            suggest = "default_toast_compression"
        elif key == "idleInTransactionSessionTimeout":
            suggest = "idle_in_transaction_session_timeout"
        elif key == "logAutovacuumMinDuration":
            suggest = "log_autovacuum_min_duration"
        elif key == "logErrorVerbosity":
            suggest = "log_error_verbosity"
        elif key == "logLinePrefix":
            suggest = "log_line_prefix"
        elif key == "logMinDurationStatement":
            suggest = "log_min_duration_statement"
        elif key == "logTempFiles":
            suggest = "log_temp_files"
        elif key == "maxFilesPerProcess":
            suggest = "max_files_per_process"
        elif key == "maxLocksPerTransaction":
            suggest = "max_locks_per_transaction"
        elif key == "maxLogicalReplicationWorkers":
            suggest = "max_logical_replication_workers"
        elif key == "maxParallelWorkers":
            suggest = "max_parallel_workers"
        elif key == "maxParallelWorkersPerGather":
            suggest = "max_parallel_workers_per_gather"
        elif key == "maxPredLocksPerTransaction":
            suggest = "max_pred_locks_per_transaction"
        elif key == "maxPreparedTransactions":
            suggest = "max_prepared_transactions"
        elif key == "maxReplicationSlots":
            suggest = "max_replication_slots"
        elif key == "maxSlotWalKeepSize":
            suggest = "max_slot_wal_keep_size"
        elif key == "maxStackDepth":
            suggest = "max_stack_depth"
        elif key == "maxStandbyArchiveDelay":
            suggest = "max_standby_archive_delay"
        elif key == "maxStandbyStreamingDelay":
            suggest = "max_standby_streaming_delay"
        elif key == "maxWalSenders":
            suggest = "max_wal_senders"
        elif key == "maxWorkerProcesses":
            suggest = "max_worker_processes"
        elif key == "passwordEncryption":
            suggest = "password_encryption"
        elif key == "pgPartmanBgwDotInterval":
            suggest = "pg_partman_bgw_dot_interval"
        elif key == "pgPartmanBgwDotRole":
            suggest = "pg_partman_bgw_dot_role"
        elif key == "pgStatStatementsDotTrack":
            suggest = "pg_stat_statements_dot_track"
        elif key == "tempFileLimit":
            suggest = "temp_file_limit"
        elif key == "trackActivityQuerySize":
            suggest = "track_activity_query_size"
        elif key == "trackCommitTimestamp":
            suggest = "track_commit_timestamp"
        elif key == "trackFunctions":
            suggest = "track_functions"
        elif key == "trackIoTiming":
            suggest = "track_io_timing"
        elif key == "walSenderTimeout":
            suggest = "wal_sender_timeout"
        elif key == "walWriterDelay":
            suggest = "wal_writer_delay"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in AlloydbomniAlloydbomniUserConfigPg. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        AlloydbomniAlloydbomniUserConfigPg.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        AlloydbomniAlloydbomniUserConfigPg.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 autovacuum_analyze_scale_factor: Optional[builtins.float] = None,
                 autovacuum_analyze_threshold: Optional[builtins.int] = None,
                 autovacuum_freeze_max_age: Optional[builtins.int] = None,
                 autovacuum_max_workers: Optional[builtins.int] = None,
                 autovacuum_naptime: Optional[builtins.int] = None,
                 autovacuum_vacuum_cost_delay: Optional[builtins.int] = None,
                 autovacuum_vacuum_cost_limit: Optional[builtins.int] = None,
                 autovacuum_vacuum_scale_factor: Optional[builtins.float] = None,
                 autovacuum_vacuum_threshold: Optional[builtins.int] = None,
                 bgwriter_delay: Optional[builtins.int] = None,
                 bgwriter_flush_after: Optional[builtins.int] = None,
                 bgwriter_lru_maxpages: Optional[builtins.int] = None,
                 bgwriter_lru_multiplier: Optional[builtins.float] = None,
                 deadlock_timeout: Optional[builtins.int] = None,
                 default_toast_compression: Optional[builtins.str] = None,
                 idle_in_transaction_session_timeout: Optional[builtins.int] = None,
                 jit: Optional[builtins.bool] = None,
                 log_autovacuum_min_duration: Optional[builtins.int] = None,
                 log_error_verbosity: Optional[builtins.str] = None,
                 log_line_prefix: Optional[builtins.str] = None,
                 log_min_duration_statement: Optional[builtins.int] = None,
                 log_temp_files: Optional[builtins.int] = None,
                 max_files_per_process: Optional[builtins.int] = None,
                 max_locks_per_transaction: Optional[builtins.int] = None,
                 max_logical_replication_workers: Optional[builtins.int] = None,
                 max_parallel_workers: Optional[builtins.int] = None,
                 max_parallel_workers_per_gather: Optional[builtins.int] = None,
                 max_pred_locks_per_transaction: Optional[builtins.int] = None,
                 max_prepared_transactions: Optional[builtins.int] = None,
                 max_replication_slots: Optional[builtins.int] = None,
                 max_slot_wal_keep_size: Optional[builtins.int] = None,
                 max_stack_depth: Optional[builtins.int] = None,
                 max_standby_archive_delay: Optional[builtins.int] = None,
                 max_standby_streaming_delay: Optional[builtins.int] = None,
                 max_wal_senders: Optional[builtins.int] = None,
                 max_worker_processes: Optional[builtins.int] = None,
                 password_encryption: Optional[builtins.str] = None,
                 pg_partman_bgw_dot_interval: Optional[builtins.int] = None,
                 pg_partman_bgw_dot_role: Optional[builtins.str] = None,
                 pg_stat_statements_dot_track: Optional[builtins.str] = None,
                 temp_file_limit: Optional[builtins.int] = None,
                 timezone: Optional[builtins.str] = None,
                 track_activity_query_size: Optional[builtins.int] = None,
                 track_commit_timestamp: Optional[builtins.str] = None,
                 track_functions: Optional[builtins.str] = None,
                 track_io_timing: Optional[builtins.str] = None,
                 wal_sender_timeout: Optional[builtins.int] = None,
                 wal_writer_delay: Optional[builtins.int] = None):
        """
        :param builtins.float autovacuum_analyze_scale_factor: Specifies a fraction of the table size to add to autovacuum*analyze*threshold when deciding whether to trigger an ANALYZE (e.g. `0.2` for 20% of the table size). The default is `0.2`.
        :param builtins.int autovacuum_analyze_threshold: Specifies the minimum number of inserted, updated or deleted tuples needed to trigger an ANALYZE in any one table. The default is `50`.
        :param builtins.int autovacuum_freeze_max_age: Specifies the maximum age (in transactions) that a table's pg_class.relfrozenxid field can attain before a VACUUM operation is forced to prevent transaction ID wraparound within the table. The system launches autovacuum processes to prevent wraparound even when autovacuum is otherwise disabled. Changing this parameter causes a service restart. Example: `200000000`.
        :param builtins.int autovacuum_max_workers: Specifies the maximum number of autovacuum processes (other than the autovacuum launcher) that may be running at any one time. The default is `3`. Changing this parameter causes a service restart.
        :param builtins.int autovacuum_naptime: Specifies the minimum delay between autovacuum runs on any given database. The delay is measured in seconds. The default is `60`.
        :param builtins.int autovacuum_vacuum_cost_delay: Specifies the cost delay value that will be used in automatic VACUUM operations. If `-1` is specified, the regular vacuum*cost*delay value will be used. The default is `2` (upstream default).
        :param builtins.int autovacuum_vacuum_cost_limit: Specifies the cost limit value that will be used in automatic VACUUM operations. If `-1` is specified, the regular vacuum*cost*limit value will be used. The default is `-1` (upstream default).
        :param builtins.float autovacuum_vacuum_scale_factor: Specifies a fraction of the table size to add to autovacuum*vacuum*threshold when deciding whether to trigger a VACUUM (e.g. `0.2` for 20% of the table size). The default is `0.2`.
        :param builtins.int autovacuum_vacuum_threshold: Specifies the minimum number of updated or deleted tuples needed to trigger a VACUUM in any one table. The default is `50`.
        :param builtins.int bgwriter_delay: Specifies the delay between activity rounds for the background writer in milliseconds. The default is `200`. Example: `200`.
        :param builtins.int bgwriter_flush_after: Whenever more than bgwriter*flush*after bytes have been written by the background writer, attempt to force the OS to issue these writes to the underlying storage. Specified in kilobytes. Setting of 0 disables forced writeback. The default is `512`. Example: `512`.
        :param builtins.int bgwriter_lru_maxpages: In each round, no more than this many buffers will be written by the background writer. Setting this to zero disables background writing. The default is `100`. Example: `100`.
        :param builtins.float bgwriter_lru_multiplier: The average recent need for new buffers is multiplied by bgwriter*lru*multiplier to arrive at an estimate of the number that will be needed during the next round, (up to bgwriter*lru*maxpages). 1.0 represents a “just in time” policy of writing exactly the number of buffers predicted to be needed. Larger values provide some cushion against spikes in demand, while smaller values intentionally leave writes to be done by server processes. The default is `2.0`. Example: `2.0`.
        :param builtins.int deadlock_timeout: This is the amount of time, in milliseconds, to wait on a lock before checking to see if there is a deadlock condition. The default is `1000` (upstream default). Example: `1000`.
        :param builtins.str default_toast_compression: Enum: `lz4`, `pglz`. Specifies the default TOAST compression method for values of compressible columns. The default is `lz4`.
        :param builtins.int idle_in_transaction_session_timeout: Time out sessions with open transactions after this number of milliseconds.
        :param builtins.bool jit: Controls system-wide use of Just-in-Time Compilation (JIT).
        :param builtins.int log_autovacuum_min_duration: Causes each action executed by autovacuum to be logged if it ran for at least the specified number of milliseconds. Setting this to zero logs all autovacuum actions. Minus-one disables logging autovacuum actions. The default is `1000`.
        :param builtins.str log_error_verbosity: Enum: `DEFAULT`, `TERSE`, `VERBOSE`. Controls the amount of detail written in the server log for each message that is logged.
        :param builtins.str log_line_prefix: Enum: `'%m [%p] %q[user=%u,db=%d,app=%a] '`, `'%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '`, `'pid=%p,user=%u,db=%d,app=%a,client=%h '`, `'pid=%p,user=%u,db=%d,app=%a,client=%h,txid=%x,qid=%Q '`. Choose from one of the available log formats.
        :param builtins.int log_min_duration_statement: Log statements that take more than this number of milliseconds to run, -1 disables.
        :param builtins.int log_temp_files: Log statements for each temporary file created larger than this number of kilobytes, -1 disables.
        :param builtins.int max_files_per_process: PostgreSQL maximum number of files that can be open per process. The default is `1000` (upstream default). Changing this parameter causes a service restart.
        :param builtins.int max_locks_per_transaction: PostgreSQL maximum locks per transaction. Changing this parameter causes a service restart.
        :param builtins.int max_logical_replication_workers: PostgreSQL maximum logical replication workers (taken from the pool of max*parallel*workers). The default is `4` (upstream default). Changing this parameter causes a service restart.
        :param builtins.int max_parallel_workers: Sets the maximum number of workers that the system can support for parallel queries. The default is `8` (upstream default).
        :param builtins.int max_parallel_workers_per_gather: Sets the maximum number of workers that can be started by a single Gather or Gather Merge node. The default is `2` (upstream default).
        :param builtins.int max_pred_locks_per_transaction: PostgreSQL maximum predicate locks per transaction. The default is `64` (upstream default). Changing this parameter causes a service restart.
        :param builtins.int max_prepared_transactions: PostgreSQL maximum prepared transactions. The default is `0`. Changing this parameter causes a service restart.
        :param builtins.int max_replication_slots: PostgreSQL maximum replication slots. The default is `20`. Changing this parameter causes a service restart.
        :param builtins.int max_slot_wal_keep_size: PostgreSQL maximum WAL size (MB) reserved for replication slots. If `-1` is specified, replication slots may retain an unlimited amount of WAL files. The default is `-1` (upstream default). wal*keep*size minimum WAL size setting takes precedence over this.
        :param builtins.int max_stack_depth: Maximum depth of the stack in bytes. The default is `2097152` (upstream default).
        :param builtins.int max_standby_archive_delay: Max standby archive delay in milliseconds. The default is `30000` (upstream default).
        :param builtins.int max_standby_streaming_delay: Max standby streaming delay in milliseconds. The default is `30000` (upstream default).
        :param builtins.int max_wal_senders: PostgreSQL maximum WAL senders. The default is `20`. Changing this parameter causes a service restart.
        :param builtins.int max_worker_processes: Sets the maximum number of background processes that the system can support. The default is `8`. Changing this parameter causes a service restart.
        :param builtins.str password_encryption: Enum: `md5`, `scram-sha-256`. Chooses the algorithm for encrypting passwords. Default: `md5`.
        :param builtins.int pg_partman_bgw_dot_interval: Sets the time interval in seconds to run pg_partman's scheduled tasks. The default is `3600`. Example: `3600`.
        :param builtins.str pg_partman_bgw_dot_role: Controls which role to use for pg_partman's scheduled background tasks. Example: `myrolename`.
        :param builtins.str pg_stat_statements_dot_track: Enum: `all`, `none`, `top`. Controls which statements are counted. Specify top to track top-level statements (those issued directly by clients), all to also track nested statements (such as statements invoked within functions), or none to disable statement statistics collection. The default is `top`.
        :param builtins.int temp_file_limit: PostgreSQL temporary file limit in KiB, -1 for unlimited. Example: `5000000`.
        :param builtins.str timezone: PostgreSQL service timezone. Example: `Europe/Helsinki`.
        :param builtins.int track_activity_query_size: Specifies the number of bytes reserved to track the currently executing command for each active session. Changing this parameter causes a service restart. Example: `1024`.
        :param builtins.str track_commit_timestamp: Enum: `off`, `on`. Record commit time of transactions. Changing this parameter causes a service restart.
        :param builtins.str track_functions: Enum: `all`, `none`, `pl`. Enables tracking of function call counts and time used.
        :param builtins.str track_io_timing: Enum: `off`, `on`. Enables timing of database I/O calls. The default is `off`. When on, it will repeatedly query the operating system for the current time, which may cause significant overhead on some platforms.
        :param builtins.int wal_sender_timeout: Terminate replication connections that are inactive for longer than this amount of time, in milliseconds. Setting this value to zero disables the timeout. Example: `60000`.
        :param builtins.int wal_writer_delay: WAL flush interval in milliseconds. The default is `200`. Setting this parameter to a lower value may negatively impact performance. Example: `50`.
        """
        if autovacuum_analyze_scale_factor is not None:
            pulumi.set(__self__, "autovacuum_analyze_scale_factor", autovacuum_analyze_scale_factor)
        if autovacuum_analyze_threshold is not None:
            pulumi.set(__self__, "autovacuum_analyze_threshold", autovacuum_analyze_threshold)
        if autovacuum_freeze_max_age is not None:
            pulumi.set(__self__, "autovacuum_freeze_max_age", autovacuum_freeze_max_age)
        if autovacuum_max_workers is not None:
            pulumi.set(__self__, "autovacuum_max_workers", autovacuum_max_workers)
        if autovacuum_naptime is not None:
            pulumi.set(__self__, "autovacuum_naptime", autovacuum_naptime)
        if autovacuum_vacuum_cost_delay is not None:
            pulumi.set(__self__, "autovacuum_vacuum_cost_delay", autovacuum_vacuum_cost_delay)
        if autovacuum_vacuum_cost_limit is not None:
            pulumi.set(__self__, "autovacuum_vacuum_cost_limit", autovacuum_vacuum_cost_limit)
        if autovacuum_vacuum_scale_factor is not None:
            pulumi.set(__self__, "autovacuum_vacuum_scale_factor", autovacuum_vacuum_scale_factor)
        if autovacuum_vacuum_threshold is not None:
            pulumi.set(__self__, "autovacuum_vacuum_threshold", autovacuum_vacuum_threshold)
        if bgwriter_delay is not None:
            pulumi.set(__self__, "bgwriter_delay", bgwriter_delay)
        if bgwriter_flush_after is not None:
            pulumi.set(__self__, "bgwriter_flush_after", bgwriter_flush_after)
        if bgwriter_lru_maxpages is not None:
            pulumi.set(__self__, "bgwriter_lru_maxpages", bgwriter_lru_maxpages)
        if bgwriter_lru_multiplier is not None:
            pulumi.set(__self__, "bgwriter_lru_multiplier", bgwriter_lru_multiplier)
        if deadlock_timeout is not None:
            pulumi.set(__self__, "deadlock_timeout", deadlock_timeout)
        if default_toast_compression is not None:
            pulumi.set(__self__, "default_toast_compression", default_toast_compression)
        if idle_in_transaction_session_timeout is not None:
            pulumi.set(__self__, "idle_in_transaction_session_timeout", idle_in_transaction_session_timeout)
        if jit is not None:
            pulumi.set(__self__, "jit", jit)
        if log_autovacuum_min_duration is not None:
            pulumi.set(__self__, "log_autovacuum_min_duration", log_autovacuum_min_duration)
        if log_error_verbosity is not None:
            pulumi.set(__self__, "log_error_verbosity", log_error_verbosity)
        if log_line_prefix is not None:
            pulumi.set(__self__, "log_line_prefix", log_line_prefix)
        if log_min_duration_statement is not None:
            pulumi.set(__self__, "log_min_duration_statement", log_min_duration_statement)
        if log_temp_files is not None:
            pulumi.set(__self__, "log_temp_files", log_temp_files)
        if max_files_per_process is not None:
            pulumi.set(__self__, "max_files_per_process", max_files_per_process)
        if max_locks_per_transaction is not None:
            pulumi.set(__self__, "max_locks_per_transaction", max_locks_per_transaction)
        if max_logical_replication_workers is not None:
            pulumi.set(__self__, "max_logical_replication_workers", max_logical_replication_workers)
        if max_parallel_workers is not None:
            pulumi.set(__self__, "max_parallel_workers", max_parallel_workers)
        if max_parallel_workers_per_gather is not None:
            pulumi.set(__self__, "max_parallel_workers_per_gather", max_parallel_workers_per_gather)
        if max_pred_locks_per_transaction is not None:
            pulumi.set(__self__, "max_pred_locks_per_transaction", max_pred_locks_per_transaction)
        if max_prepared_transactions is not None:
            pulumi.set(__self__, "max_prepared_transactions", max_prepared_transactions)
        if max_replication_slots is not None:
            pulumi.set(__self__, "max_replication_slots", max_replication_slots)
        if max_slot_wal_keep_size is not None:
            pulumi.set(__self__, "max_slot_wal_keep_size", max_slot_wal_keep_size)
        if max_stack_depth is not None:
            pulumi.set(__self__, "max_stack_depth", max_stack_depth)
        if max_standby_archive_delay is not None:
            pulumi.set(__self__, "max_standby_archive_delay", max_standby_archive_delay)
        if max_standby_streaming_delay is not None:
            pulumi.set(__self__, "max_standby_streaming_delay", max_standby_streaming_delay)
        if max_wal_senders is not None:
            pulumi.set(__self__, "max_wal_senders", max_wal_senders)
        if max_worker_processes is not None:
            pulumi.set(__self__, "max_worker_processes", max_worker_processes)
        if password_encryption is not None:
            pulumi.set(__self__, "password_encryption", password_encryption)
        if pg_partman_bgw_dot_interval is not None:
            pulumi.set(__self__, "pg_partman_bgw_dot_interval", pg_partman_bgw_dot_interval)
        if pg_partman_bgw_dot_role is not None:
            pulumi.set(__self__, "pg_partman_bgw_dot_role", pg_partman_bgw_dot_role)
        if pg_stat_statements_dot_track is not None:
            pulumi.set(__self__, "pg_stat_statements_dot_track", pg_stat_statements_dot_track)
        if temp_file_limit is not None:
            pulumi.set(__self__, "temp_file_limit", temp_file_limit)
        if timezone is not None:
            pulumi.set(__self__, "timezone", timezone)
        if track_activity_query_size is not None:
            pulumi.set(__self__, "track_activity_query_size", track_activity_query_size)
        if track_commit_timestamp is not None:
            pulumi.set(__self__, "track_commit_timestamp", track_commit_timestamp)
        if track_functions is not None:
            pulumi.set(__self__, "track_functions", track_functions)
        if track_io_timing is not None:
            pulumi.set(__self__, "track_io_timing", track_io_timing)
        if wal_sender_timeout is not None:
            pulumi.set(__self__, "wal_sender_timeout", wal_sender_timeout)
        if wal_writer_delay is not None:
            pulumi.set(__self__, "wal_writer_delay", wal_writer_delay)

    @property
    @pulumi.getter(name="autovacuumAnalyzeScaleFactor")
    def autovacuum_analyze_scale_factor(self) -> Optional[builtins.float]:
        """
        Specifies a fraction of the table size to add to autovacuum*analyze*threshold when deciding whether to trigger an ANALYZE (e.g. `0.2` for 20% of the table size). The default is `0.2`.
        """
        return pulumi.get(self, "autovacuum_analyze_scale_factor")

    @property
    @pulumi.getter(name="autovacuumAnalyzeThreshold")
    def autovacuum_analyze_threshold(self) -> Optional[builtins.int]:
        """
        Specifies the minimum number of inserted, updated or deleted tuples needed to trigger an ANALYZE in any one table. The default is `50`.
        """
        return pulumi.get(self, "autovacuum_analyze_threshold")

    @property
    @pulumi.getter(name="autovacuumFreezeMaxAge")
    def autovacuum_freeze_max_age(self) -> Optional[builtins.int]:
        """
        Specifies the maximum age (in transactions) that a table's pg_class.relfrozenxid field can attain before a VACUUM operation is forced to prevent transaction ID wraparound within the table. The system launches autovacuum processes to prevent wraparound even when autovacuum is otherwise disabled. Changing this parameter causes a service restart. Example: `200000000`.
        """
        return pulumi.get(self, "autovacuum_freeze_max_age")

    @property
    @pulumi.getter(name="autovacuumMaxWorkers")
    def autovacuum_max_workers(self) -> Optional[builtins.int]:
        """
        Specifies the maximum number of autovacuum processes (other than the autovacuum launcher) that may be running at any one time. The default is `3`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "autovacuum_max_workers")

    @property
    @pulumi.getter(name="autovacuumNaptime")
    def autovacuum_naptime(self) -> Optional[builtins.int]:
        """
        Specifies the minimum delay between autovacuum runs on any given database. The delay is measured in seconds. The default is `60`.
        """
        return pulumi.get(self, "autovacuum_naptime")

    @property
    @pulumi.getter(name="autovacuumVacuumCostDelay")
    def autovacuum_vacuum_cost_delay(self) -> Optional[builtins.int]:
        """
        Specifies the cost delay value that will be used in automatic VACUUM operations. If `-1` is specified, the regular vacuum*cost*delay value will be used. The default is `2` (upstream default).
        """
        return pulumi.get(self, "autovacuum_vacuum_cost_delay")

    @property
    @pulumi.getter(name="autovacuumVacuumCostLimit")
    def autovacuum_vacuum_cost_limit(self) -> Optional[builtins.int]:
        """
        Specifies the cost limit value that will be used in automatic VACUUM operations. If `-1` is specified, the regular vacuum*cost*limit value will be used. The default is `-1` (upstream default).
        """
        return pulumi.get(self, "autovacuum_vacuum_cost_limit")

    @property
    @pulumi.getter(name="autovacuumVacuumScaleFactor")
    def autovacuum_vacuum_scale_factor(self) -> Optional[builtins.float]:
        """
        Specifies a fraction of the table size to add to autovacuum*vacuum*threshold when deciding whether to trigger a VACUUM (e.g. `0.2` for 20% of the table size). The default is `0.2`.
        """
        return pulumi.get(self, "autovacuum_vacuum_scale_factor")

    @property
    @pulumi.getter(name="autovacuumVacuumThreshold")
    def autovacuum_vacuum_threshold(self) -> Optional[builtins.int]:
        """
        Specifies the minimum number of updated or deleted tuples needed to trigger a VACUUM in any one table. The default is `50`.
        """
        return pulumi.get(self, "autovacuum_vacuum_threshold")

    @property
    @pulumi.getter(name="bgwriterDelay")
    def bgwriter_delay(self) -> Optional[builtins.int]:
        """
        Specifies the delay between activity rounds for the background writer in milliseconds. The default is `200`. Example: `200`.
        """
        return pulumi.get(self, "bgwriter_delay")

    @property
    @pulumi.getter(name="bgwriterFlushAfter")
    def bgwriter_flush_after(self) -> Optional[builtins.int]:
        """
        Whenever more than bgwriter*flush*after bytes have been written by the background writer, attempt to force the OS to issue these writes to the underlying storage. Specified in kilobytes. Setting of 0 disables forced writeback. The default is `512`. Example: `512`.
        """
        return pulumi.get(self, "bgwriter_flush_after")

    @property
    @pulumi.getter(name="bgwriterLruMaxpages")
    def bgwriter_lru_maxpages(self) -> Optional[builtins.int]:
        """
        In each round, no more than this many buffers will be written by the background writer. Setting this to zero disables background writing. The default is `100`. Example: `100`.
        """
        return pulumi.get(self, "bgwriter_lru_maxpages")

    @property
    @pulumi.getter(name="bgwriterLruMultiplier")
    def bgwriter_lru_multiplier(self) -> Optional[builtins.float]:
        """
        The average recent need for new buffers is multiplied by bgwriter*lru*multiplier to arrive at an estimate of the number that will be needed during the next round, (up to bgwriter*lru*maxpages). 1.0 represents a “just in time” policy of writing exactly the number of buffers predicted to be needed. Larger values provide some cushion against spikes in demand, while smaller values intentionally leave writes to be done by server processes. The default is `2.0`. Example: `2.0`.
        """
        return pulumi.get(self, "bgwriter_lru_multiplier")

    @property
    @pulumi.getter(name="deadlockTimeout")
    def deadlock_timeout(self) -> Optional[builtins.int]:
        """
        This is the amount of time, in milliseconds, to wait on a lock before checking to see if there is a deadlock condition. The default is `1000` (upstream default). Example: `1000`.
        """
        return pulumi.get(self, "deadlock_timeout")

    @property
    @pulumi.getter(name="defaultToastCompression")
    def default_toast_compression(self) -> Optional[builtins.str]:
        """
        Enum: `lz4`, `pglz`. Specifies the default TOAST compression method for values of compressible columns. The default is `lz4`.
        """
        return pulumi.get(self, "default_toast_compression")

    @property
    @pulumi.getter(name="idleInTransactionSessionTimeout")
    def idle_in_transaction_session_timeout(self) -> Optional[builtins.int]:
        """
        Time out sessions with open transactions after this number of milliseconds.
        """
        return pulumi.get(self, "idle_in_transaction_session_timeout")

    @property
    @pulumi.getter
    def jit(self) -> Optional[builtins.bool]:
        """
        Controls system-wide use of Just-in-Time Compilation (JIT).
        """
        return pulumi.get(self, "jit")

    @property
    @pulumi.getter(name="logAutovacuumMinDuration")
    def log_autovacuum_min_duration(self) -> Optional[builtins.int]:
        """
        Causes each action executed by autovacuum to be logged if it ran for at least the specified number of milliseconds. Setting this to zero logs all autovacuum actions. Minus-one disables logging autovacuum actions. The default is `1000`.
        """
        return pulumi.get(self, "log_autovacuum_min_duration")

    @property
    @pulumi.getter(name="logErrorVerbosity")
    def log_error_verbosity(self) -> Optional[builtins.str]:
        """
        Enum: `DEFAULT`, `TERSE`, `VERBOSE`. Controls the amount of detail written in the server log for each message that is logged.
        """
        return pulumi.get(self, "log_error_verbosity")

    @property
    @pulumi.getter(name="logLinePrefix")
    def log_line_prefix(self) -> Optional[builtins.str]:
        """
        Enum: `'%m [%p] %q[user=%u,db=%d,app=%a] '`, `'%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '`, `'pid=%p,user=%u,db=%d,app=%a,client=%h '`, `'pid=%p,user=%u,db=%d,app=%a,client=%h,txid=%x,qid=%Q '`. Choose from one of the available log formats.
        """
        return pulumi.get(self, "log_line_prefix")

    @property
    @pulumi.getter(name="logMinDurationStatement")
    def log_min_duration_statement(self) -> Optional[builtins.int]:
        """
        Log statements that take more than this number of milliseconds to run, -1 disables.
        """
        return pulumi.get(self, "log_min_duration_statement")

    @property
    @pulumi.getter(name="logTempFiles")
    def log_temp_files(self) -> Optional[builtins.int]:
        """
        Log statements for each temporary file created larger than this number of kilobytes, -1 disables.
        """
        return pulumi.get(self, "log_temp_files")

    @property
    @pulumi.getter(name="maxFilesPerProcess")
    def max_files_per_process(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum number of files that can be open per process. The default is `1000` (upstream default). Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_files_per_process")

    @property
    @pulumi.getter(name="maxLocksPerTransaction")
    def max_locks_per_transaction(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum locks per transaction. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_locks_per_transaction")

    @property
    @pulumi.getter(name="maxLogicalReplicationWorkers")
    def max_logical_replication_workers(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum logical replication workers (taken from the pool of max*parallel*workers). The default is `4` (upstream default). Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_logical_replication_workers")

    @property
    @pulumi.getter(name="maxParallelWorkers")
    def max_parallel_workers(self) -> Optional[builtins.int]:
        """
        Sets the maximum number of workers that the system can support for parallel queries. The default is `8` (upstream default).
        """
        return pulumi.get(self, "max_parallel_workers")

    @property
    @pulumi.getter(name="maxParallelWorkersPerGather")
    def max_parallel_workers_per_gather(self) -> Optional[builtins.int]:
        """
        Sets the maximum number of workers that can be started by a single Gather or Gather Merge node. The default is `2` (upstream default).
        """
        return pulumi.get(self, "max_parallel_workers_per_gather")

    @property
    @pulumi.getter(name="maxPredLocksPerTransaction")
    def max_pred_locks_per_transaction(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum predicate locks per transaction. The default is `64` (upstream default). Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_pred_locks_per_transaction")

    @property
    @pulumi.getter(name="maxPreparedTransactions")
    def max_prepared_transactions(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum prepared transactions. The default is `0`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_prepared_transactions")

    @property
    @pulumi.getter(name="maxReplicationSlots")
    def max_replication_slots(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum replication slots. The default is `20`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_replication_slots")

    @property
    @pulumi.getter(name="maxSlotWalKeepSize")
    def max_slot_wal_keep_size(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum WAL size (MB) reserved for replication slots. If `-1` is specified, replication slots may retain an unlimited amount of WAL files. The default is `-1` (upstream default). wal*keep*size minimum WAL size setting takes precedence over this.
        """
        return pulumi.get(self, "max_slot_wal_keep_size")

    @property
    @pulumi.getter(name="maxStackDepth")
    def max_stack_depth(self) -> Optional[builtins.int]:
        """
        Maximum depth of the stack in bytes. The default is `2097152` (upstream default).
        """
        return pulumi.get(self, "max_stack_depth")

    @property
    @pulumi.getter(name="maxStandbyArchiveDelay")
    def max_standby_archive_delay(self) -> Optional[builtins.int]:
        """
        Max standby archive delay in milliseconds. The default is `30000` (upstream default).
        """
        return pulumi.get(self, "max_standby_archive_delay")

    @property
    @pulumi.getter(name="maxStandbyStreamingDelay")
    def max_standby_streaming_delay(self) -> Optional[builtins.int]:
        """
        Max standby streaming delay in milliseconds. The default is `30000` (upstream default).
        """
        return pulumi.get(self, "max_standby_streaming_delay")

    @property
    @pulumi.getter(name="maxWalSenders")
    def max_wal_senders(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum WAL senders. The default is `20`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_wal_senders")

    @property
    @pulumi.getter(name="maxWorkerProcesses")
    def max_worker_processes(self) -> Optional[builtins.int]:
        """
        Sets the maximum number of background processes that the system can support. The default is `8`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_worker_processes")

    @property
    @pulumi.getter(name="passwordEncryption")
    def password_encryption(self) -> Optional[builtins.str]:
        """
        Enum: `md5`, `scram-sha-256`. Chooses the algorithm for encrypting passwords. Default: `md5`.
        """
        return pulumi.get(self, "password_encryption")

    @property
    @pulumi.getter(name="pgPartmanBgwDotInterval")
    def pg_partman_bgw_dot_interval(self) -> Optional[builtins.int]:
        """
        Sets the time interval in seconds to run pg_partman's scheduled tasks. The default is `3600`. Example: `3600`.
        """
        return pulumi.get(self, "pg_partman_bgw_dot_interval")

    @property
    @pulumi.getter(name="pgPartmanBgwDotRole")
    def pg_partman_bgw_dot_role(self) -> Optional[builtins.str]:
        """
        Controls which role to use for pg_partman's scheduled background tasks. Example: `myrolename`.
        """
        return pulumi.get(self, "pg_partman_bgw_dot_role")

    @property
    @pulumi.getter(name="pgStatStatementsDotTrack")
    def pg_stat_statements_dot_track(self) -> Optional[builtins.str]:
        """
        Enum: `all`, `none`, `top`. Controls which statements are counted. Specify top to track top-level statements (those issued directly by clients), all to also track nested statements (such as statements invoked within functions), or none to disable statement statistics collection. The default is `top`.
        """
        return pulumi.get(self, "pg_stat_statements_dot_track")

    @property
    @pulumi.getter(name="tempFileLimit")
    def temp_file_limit(self) -> Optional[builtins.int]:
        """
        PostgreSQL temporary file limit in KiB, -1 for unlimited. Example: `5000000`.
        """
        return pulumi.get(self, "temp_file_limit")

    @property
    @pulumi.getter
    def timezone(self) -> Optional[builtins.str]:
        """
        PostgreSQL service timezone. Example: `Europe/Helsinki`.
        """
        return pulumi.get(self, "timezone")

    @property
    @pulumi.getter(name="trackActivityQuerySize")
    def track_activity_query_size(self) -> Optional[builtins.int]:
        """
        Specifies the number of bytes reserved to track the currently executing command for each active session. Changing this parameter causes a service restart. Example: `1024`.
        """
        return pulumi.get(self, "track_activity_query_size")

    @property
    @pulumi.getter(name="trackCommitTimestamp")
    def track_commit_timestamp(self) -> Optional[builtins.str]:
        """
        Enum: `off`, `on`. Record commit time of transactions. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "track_commit_timestamp")

    @property
    @pulumi.getter(name="trackFunctions")
    def track_functions(self) -> Optional[builtins.str]:
        """
        Enum: `all`, `none`, `pl`. Enables tracking of function call counts and time used.
        """
        return pulumi.get(self, "track_functions")

    @property
    @pulumi.getter(name="trackIoTiming")
    def track_io_timing(self) -> Optional[builtins.str]:
        """
        Enum: `off`, `on`. Enables timing of database I/O calls. The default is `off`. When on, it will repeatedly query the operating system for the current time, which may cause significant overhead on some platforms.
        """
        return pulumi.get(self, "track_io_timing")

    @property
    @pulumi.getter(name="walSenderTimeout")
    def wal_sender_timeout(self) -> Optional[builtins.int]:
        """
        Terminate replication connections that are inactive for longer than this amount of time, in milliseconds. Setting this value to zero disables the timeout. Example: `60000`.
        """
        return pulumi.get(self, "wal_sender_timeout")

    @property
    @pulumi.getter(name="walWriterDelay")
    def wal_writer_delay(self) -> Optional[builtins.int]:
        """
        WAL flush interval in milliseconds. The default is `200`. Setting this parameter to a lower value may negatively impact performance. Example: `50`.
        """
        return pulumi.get(self, "wal_writer_delay")


@pulumi.output_type
class AlloydbomniAlloydbomniUserConfigPgaudit(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "featureEnabled":
            suggest = "feature_enabled"
        elif key == "logCatalog":
            suggest = "log_catalog"
        elif key == "logClient":
            suggest = "log_client"
        elif key == "logLevel":
            suggest = "log_level"
        elif key == "logMaxStringLength":
            suggest = "log_max_string_length"
        elif key == "logNestedStatements":
            suggest = "log_nested_statements"
        elif key == "logParameter":
            suggest = "log_parameter"
        elif key == "logParameterMaxSize":
            suggest = "log_parameter_max_size"
        elif key == "logRelation":
            suggest = "log_relation"
        elif key == "logRows":
            suggest = "log_rows"
        elif key == "logStatement":
            suggest = "log_statement"
        elif key == "logStatementOnce":
            suggest = "log_statement_once"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in AlloydbomniAlloydbomniUserConfigPgaudit. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        AlloydbomniAlloydbomniUserConfigPgaudit.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        AlloydbomniAlloydbomniUserConfigPgaudit.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 feature_enabled: Optional[builtins.bool] = None,
                 log_catalog: Optional[builtins.bool] = None,
                 log_client: Optional[builtins.bool] = None,
                 log_level: Optional[builtins.str] = None,
                 log_max_string_length: Optional[builtins.int] = None,
                 log_nested_statements: Optional[builtins.bool] = None,
                 log_parameter: Optional[builtins.bool] = None,
                 log_parameter_max_size: Optional[builtins.int] = None,
                 log_relation: Optional[builtins.bool] = None,
                 log_rows: Optional[builtins.bool] = None,
                 log_statement: Optional[builtins.bool] = None,
                 log_statement_once: Optional[builtins.bool] = None,
                 logs: Optional[Sequence[builtins.str]] = None,
                 role: Optional[builtins.str] = None):
        """
        :param builtins.bool feature_enabled: Enable pgaudit extension. When enabled, pgaudit extension will be automatically installed.Otherwise, extension will be uninstalled but auditing configurations will be preserved. Default: `false`.
        :param builtins.bool log_catalog: Specifies that session logging should be enabled in the casewhere all relations in a statement are in pg_catalog. Default: `true`.
        :param builtins.bool log_client: Specifies whether log messages will be visible to a client process such as psql. Default: `false`.
        :param builtins.str log_level: Enum: `debug1`, `debug2`, `debug3`, `debug4`, `debug5`, `info`, `log`, `notice`, `warning`. Specifies the log level that will be used for log entries. Default: `log`.
        :param builtins.int log_max_string_length: Crop parameters representation and whole statements if they exceed this threshold. A (default) value of -1 disable the truncation. Default: `-1`.
        :param builtins.bool log_nested_statements: This GUC allows to turn off logging nested statements, that is, statements that are executed as part of another ExecutorRun. Default: `true`.
        :param builtins.bool log_parameter: Specifies that audit logging should include the parameters that were passed with the statement. Default: `false`.
        :param builtins.int log_parameter_max_size: Specifies that parameter values longer than this setting (in bytes) should not be logged, but replaced with \\n\\n. Default: `0`.
        :param builtins.bool log_relation: Specifies whether session audit logging should create a separate log entry for each relation (TABLE, VIEW, etc.) referenced in a SELECT or DML statement. Default: `false`.
        :param builtins.bool log_rows: Specifies that audit logging should include the rows retrieved or affected by a statement. When enabled the rows field will be included after the parameter field. Default: `false`.
        :param builtins.bool log_statement: Specifies whether logging will include the statement text and parameters (if enabled). Default: `true`.
        :param builtins.bool log_statement_once: Specifies whether logging will include the statement text and parameters with the first log entry for a statement/substatement combination or with every entry. Default: `false`.
        :param Sequence[builtins.str] logs: Specifies which classes of statements will be logged by session audit logging.
        :param builtins.str role: Specifies the master role to use for object audit logging.
        """
        if feature_enabled is not None:
            pulumi.set(__self__, "feature_enabled", feature_enabled)
        if log_catalog is not None:
            pulumi.set(__self__, "log_catalog", log_catalog)
        if log_client is not None:
            pulumi.set(__self__, "log_client", log_client)
        if log_level is not None:
            pulumi.set(__self__, "log_level", log_level)
        if log_max_string_length is not None:
            pulumi.set(__self__, "log_max_string_length", log_max_string_length)
        if log_nested_statements is not None:
            pulumi.set(__self__, "log_nested_statements", log_nested_statements)
        if log_parameter is not None:
            pulumi.set(__self__, "log_parameter", log_parameter)
        if log_parameter_max_size is not None:
            pulumi.set(__self__, "log_parameter_max_size", log_parameter_max_size)
        if log_relation is not None:
            pulumi.set(__self__, "log_relation", log_relation)
        if log_rows is not None:
            pulumi.set(__self__, "log_rows", log_rows)
        if log_statement is not None:
            pulumi.set(__self__, "log_statement", log_statement)
        if log_statement_once is not None:
            pulumi.set(__self__, "log_statement_once", log_statement_once)
        if logs is not None:
            pulumi.set(__self__, "logs", logs)
        if role is not None:
            pulumi.set(__self__, "role", role)

    @property
    @pulumi.getter(name="featureEnabled")
    def feature_enabled(self) -> Optional[builtins.bool]:
        """
        Enable pgaudit extension. When enabled, pgaudit extension will be automatically installed.Otherwise, extension will be uninstalled but auditing configurations will be preserved. Default: `false`.
        """
        return pulumi.get(self, "feature_enabled")

    @property
    @pulumi.getter(name="logCatalog")
    def log_catalog(self) -> Optional[builtins.bool]:
        """
        Specifies that session logging should be enabled in the casewhere all relations in a statement are in pg_catalog. Default: `true`.
        """
        return pulumi.get(self, "log_catalog")

    @property
    @pulumi.getter(name="logClient")
    def log_client(self) -> Optional[builtins.bool]:
        """
        Specifies whether log messages will be visible to a client process such as psql. Default: `false`.
        """
        return pulumi.get(self, "log_client")

    @property
    @pulumi.getter(name="logLevel")
    def log_level(self) -> Optional[builtins.str]:
        """
        Enum: `debug1`, `debug2`, `debug3`, `debug4`, `debug5`, `info`, `log`, `notice`, `warning`. Specifies the log level that will be used for log entries. Default: `log`.
        """
        return pulumi.get(self, "log_level")

    @property
    @pulumi.getter(name="logMaxStringLength")
    def log_max_string_length(self) -> Optional[builtins.int]:
        """
        Crop parameters representation and whole statements if they exceed this threshold. A (default) value of -1 disable the truncation. Default: `-1`.
        """
        return pulumi.get(self, "log_max_string_length")

    @property
    @pulumi.getter(name="logNestedStatements")
    def log_nested_statements(self) -> Optional[builtins.bool]:
        """
        This GUC allows to turn off logging nested statements, that is, statements that are executed as part of another ExecutorRun. Default: `true`.
        """
        return pulumi.get(self, "log_nested_statements")

    @property
    @pulumi.getter(name="logParameter")
    def log_parameter(self) -> Optional[builtins.bool]:
        """
        Specifies that audit logging should include the parameters that were passed with the statement. Default: `false`.
        """
        return pulumi.get(self, "log_parameter")

    @property
    @pulumi.getter(name="logParameterMaxSize")
    def log_parameter_max_size(self) -> Optional[builtins.int]:
        """
        Specifies that parameter values longer than this setting (in bytes) should not be logged, but replaced with \\n\\n. Default: `0`.
        """
        return pulumi.get(self, "log_parameter_max_size")

    @property
    @pulumi.getter(name="logRelation")
    def log_relation(self) -> Optional[builtins.bool]:
        """
        Specifies whether session audit logging should create a separate log entry for each relation (TABLE, VIEW, etc.) referenced in a SELECT or DML statement. Default: `false`.
        """
        return pulumi.get(self, "log_relation")

    @property
    @pulumi.getter(name="logRows")
    def log_rows(self) -> Optional[builtins.bool]:
        """
        Specifies that audit logging should include the rows retrieved or affected by a statement. When enabled the rows field will be included after the parameter field. Default: `false`.
        """
        return pulumi.get(self, "log_rows")

    @property
    @pulumi.getter(name="logStatement")
    def log_statement(self) -> Optional[builtins.bool]:
        """
        Specifies whether logging will include the statement text and parameters (if enabled). Default: `true`.
        """
        return pulumi.get(self, "log_statement")

    @property
    @pulumi.getter(name="logStatementOnce")
    def log_statement_once(self) -> Optional[builtins.bool]:
        """
        Specifies whether logging will include the statement text and parameters with the first log entry for a statement/substatement combination or with every entry. Default: `false`.
        """
        return pulumi.get(self, "log_statement_once")

    @property
    @pulumi.getter
    def logs(self) -> Optional[Sequence[builtins.str]]:
        """
        Specifies which classes of statements will be logged by session audit logging.
        """
        return pulumi.get(self, "logs")

    @property
    @pulumi.getter
    def role(self) -> Optional[builtins.str]:
        """
        Specifies the master role to use for object audit logging.
        """
        return pulumi.get(self, "role")


@pulumi.output_type
class AlloydbomniAlloydbomniUserConfigPgbouncer(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "autodbIdleTimeout":
            suggest = "autodb_idle_timeout"
        elif key == "autodbMaxDbConnections":
            suggest = "autodb_max_db_connections"
        elif key == "autodbPoolMode":
            suggest = "autodb_pool_mode"
        elif key == "autodbPoolSize":
            suggest = "autodb_pool_size"
        elif key == "ignoreStartupParameters":
            suggest = "ignore_startup_parameters"
        elif key == "maxPreparedStatements":
            suggest = "max_prepared_statements"
        elif key == "minPoolSize":
            suggest = "min_pool_size"
        elif key == "serverIdleTimeout":
            suggest = "server_idle_timeout"
        elif key == "serverLifetime":
            suggest = "server_lifetime"
        elif key == "serverResetQueryAlways":
            suggest = "server_reset_query_always"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in AlloydbomniAlloydbomniUserConfigPgbouncer. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        AlloydbomniAlloydbomniUserConfigPgbouncer.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        AlloydbomniAlloydbomniUserConfigPgbouncer.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 autodb_idle_timeout: Optional[builtins.int] = None,
                 autodb_max_db_connections: Optional[builtins.int] = None,
                 autodb_pool_mode: Optional[builtins.str] = None,
                 autodb_pool_size: Optional[builtins.int] = None,
                 ignore_startup_parameters: Optional[Sequence[builtins.str]] = None,
                 max_prepared_statements: Optional[builtins.int] = None,
                 min_pool_size: Optional[builtins.int] = None,
                 server_idle_timeout: Optional[builtins.int] = None,
                 server_lifetime: Optional[builtins.int] = None,
                 server_reset_query_always: Optional[builtins.bool] = None):
        """
        :param builtins.int autodb_idle_timeout: If the automatically created database pools have been unused this many seconds, they are freed. If 0 then timeout is disabled. (seconds). Default: `3600`.
        :param builtins.int autodb_max_db_connections: Do not allow more than this many server connections per database (regardless of user). Setting it to 0 means unlimited. Example: `0`.
        :param builtins.str autodb_pool_mode: Enum: `session`, `statement`, `transaction`. PGBouncer pool mode. Default: `transaction`.
        :param builtins.int autodb_pool_size: If non-zero then create automatically a pool of that size per user when a pool doesn't exist. Default: `0`.
        :param Sequence[builtins.str] ignore_startup_parameters: List of parameters to ignore when given in startup packet.
        :param builtins.int max_prepared_statements: PgBouncer tracks protocol-level named prepared statements related commands sent by the client in transaction and statement pooling modes when max*prepared*statements is set to a non-zero value. Setting it to 0 disables prepared statements. max*prepared*statements defaults to 100, and its maximum is 3000. Default: `100`.
        :param builtins.int min_pool_size: Add more server connections to pool if below this number. Improves behavior when usual load comes suddenly back after period of total inactivity. The value is effectively capped at the pool size. Default: `0`.
        :param builtins.int server_idle_timeout: If a server connection has been idle more than this many seconds it will be dropped. If 0 then timeout is disabled. (seconds). Default: `600`.
        :param builtins.int server_lifetime: The pooler will close an unused server connection that has been connected longer than this. (seconds). Default: `3600`.
        :param builtins.bool server_reset_query_always: Run server*reset*query (DISCARD ALL) in all pooling modes. Default: `false`.
        """
        if autodb_idle_timeout is not None:
            pulumi.set(__self__, "autodb_idle_timeout", autodb_idle_timeout)
        if autodb_max_db_connections is not None:
            pulumi.set(__self__, "autodb_max_db_connections", autodb_max_db_connections)
        if autodb_pool_mode is not None:
            pulumi.set(__self__, "autodb_pool_mode", autodb_pool_mode)
        if autodb_pool_size is not None:
            pulumi.set(__self__, "autodb_pool_size", autodb_pool_size)
        if ignore_startup_parameters is not None:
            pulumi.set(__self__, "ignore_startup_parameters", ignore_startup_parameters)
        if max_prepared_statements is not None:
            pulumi.set(__self__, "max_prepared_statements", max_prepared_statements)
        if min_pool_size is not None:
            pulumi.set(__self__, "min_pool_size", min_pool_size)
        if server_idle_timeout is not None:
            pulumi.set(__self__, "server_idle_timeout", server_idle_timeout)
        if server_lifetime is not None:
            pulumi.set(__self__, "server_lifetime", server_lifetime)
        if server_reset_query_always is not None:
            pulumi.set(__self__, "server_reset_query_always", server_reset_query_always)

    @property
    @pulumi.getter(name="autodbIdleTimeout")
    def autodb_idle_timeout(self) -> Optional[builtins.int]:
        """
        If the automatically created database pools have been unused this many seconds, they are freed. If 0 then timeout is disabled. (seconds). Default: `3600`.
        """
        return pulumi.get(self, "autodb_idle_timeout")

    @property
    @pulumi.getter(name="autodbMaxDbConnections")
    def autodb_max_db_connections(self) -> Optional[builtins.int]:
        """
        Do not allow more than this many server connections per database (regardless of user). Setting it to 0 means unlimited. Example: `0`.
        """
        return pulumi.get(self, "autodb_max_db_connections")

    @property
    @pulumi.getter(name="autodbPoolMode")
    def autodb_pool_mode(self) -> Optional[builtins.str]:
        """
        Enum: `session`, `statement`, `transaction`. PGBouncer pool mode. Default: `transaction`.
        """
        return pulumi.get(self, "autodb_pool_mode")

    @property
    @pulumi.getter(name="autodbPoolSize")
    def autodb_pool_size(self) -> Optional[builtins.int]:
        """
        If non-zero then create automatically a pool of that size per user when a pool doesn't exist. Default: `0`.
        """
        return pulumi.get(self, "autodb_pool_size")

    @property
    @pulumi.getter(name="ignoreStartupParameters")
    def ignore_startup_parameters(self) -> Optional[Sequence[builtins.str]]:
        """
        List of parameters to ignore when given in startup packet.
        """
        return pulumi.get(self, "ignore_startup_parameters")

    @property
    @pulumi.getter(name="maxPreparedStatements")
    def max_prepared_statements(self) -> Optional[builtins.int]:
        """
        PgBouncer tracks protocol-level named prepared statements related commands sent by the client in transaction and statement pooling modes when max*prepared*statements is set to a non-zero value. Setting it to 0 disables prepared statements. max*prepared*statements defaults to 100, and its maximum is 3000. Default: `100`.
        """
        return pulumi.get(self, "max_prepared_statements")

    @property
    @pulumi.getter(name="minPoolSize")
    def min_pool_size(self) -> Optional[builtins.int]:
        """
        Add more server connections to pool if below this number. Improves behavior when usual load comes suddenly back after period of total inactivity. The value is effectively capped at the pool size. Default: `0`.
        """
        return pulumi.get(self, "min_pool_size")

    @property
    @pulumi.getter(name="serverIdleTimeout")
    def server_idle_timeout(self) -> Optional[builtins.int]:
        """
        If a server connection has been idle more than this many seconds it will be dropped. If 0 then timeout is disabled. (seconds). Default: `600`.
        """
        return pulumi.get(self, "server_idle_timeout")

    @property
    @pulumi.getter(name="serverLifetime")
    def server_lifetime(self) -> Optional[builtins.int]:
        """
        The pooler will close an unused server connection that has been connected longer than this. (seconds). Default: `3600`.
        """
        return pulumi.get(self, "server_lifetime")

    @property
    @pulumi.getter(name="serverResetQueryAlways")
    def server_reset_query_always(self) -> Optional[builtins.bool]:
        """
        Run server*reset*query (DISCARD ALL) in all pooling modes. Default: `false`.
        """
        return pulumi.get(self, "server_reset_query_always")


@pulumi.output_type
class AlloydbomniAlloydbomniUserConfigPglookout(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "maxFailoverReplicationTimeLag":
            suggest = "max_failover_replication_time_lag"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in AlloydbomniAlloydbomniUserConfigPglookout. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        AlloydbomniAlloydbomniUserConfigPglookout.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        AlloydbomniAlloydbomniUserConfigPglookout.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 max_failover_replication_time_lag: Optional[builtins.int] = None):
        """
        :param builtins.int max_failover_replication_time_lag: Number of seconds of master unavailability before triggering database failover to standby. Default: `60`.
        """
        if max_failover_replication_time_lag is not None:
            pulumi.set(__self__, "max_failover_replication_time_lag", max_failover_replication_time_lag)

    @property
    @pulumi.getter(name="maxFailoverReplicationTimeLag")
    def max_failover_replication_time_lag(self) -> Optional[builtins.int]:
        """
        Number of seconds of master unavailability before triggering database failover to standby. Default: `60`.
        """
        return pulumi.get(self, "max_failover_replication_time_lag")


@pulumi.output_type
class AlloydbomniAlloydbomniUserConfigPrivateAccess(dict):
    def __init__(__self__, *,
                 pg: Optional[builtins.bool] = None,
                 pgbouncer: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool pg: Allow clients to connect to pg with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool pgbouncer: Allow clients to connect to pgbouncer with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if pg is not None:
            pulumi.set(__self__, "pg", pg)
        if pgbouncer is not None:
            pulumi.set(__self__, "pgbouncer", pgbouncer)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def pg(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to pg with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "pg")

    @property
    @pulumi.getter
    def pgbouncer(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to pgbouncer with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "pgbouncer")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class AlloydbomniAlloydbomniUserConfigPrivatelinkAccess(dict):
    def __init__(__self__, *,
                 pg: Optional[builtins.bool] = None,
                 pgbouncer: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool pg: Enable pg.
        :param builtins.bool pgbouncer: Enable pgbouncer.
        :param builtins.bool prometheus: Enable prometheus.
        """
        if pg is not None:
            pulumi.set(__self__, "pg", pg)
        if pgbouncer is not None:
            pulumi.set(__self__, "pgbouncer", pgbouncer)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def pg(self) -> Optional[builtins.bool]:
        """
        Enable pg.
        """
        return pulumi.get(self, "pg")

    @property
    @pulumi.getter
    def pgbouncer(self) -> Optional[builtins.bool]:
        """
        Enable pgbouncer.
        """
        return pulumi.get(self, "pgbouncer")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class AlloydbomniAlloydbomniUserConfigPublicAccess(dict):
    def __init__(__self__, *,
                 pg: Optional[builtins.bool] = None,
                 pgbouncer: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool pg: Allow clients to connect to pg from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool pgbouncer: Allow clients to connect to pgbouncer from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if pg is not None:
            pulumi.set(__self__, "pg", pg)
        if pgbouncer is not None:
            pulumi.set(__self__, "pgbouncer", pgbouncer)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def pg(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to pg from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "pg")

    @property
    @pulumi.getter
    def pgbouncer(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to pgbouncer from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "pgbouncer")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class AlloydbomniComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in AlloydbomniComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        AlloydbomniComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        AlloydbomniComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class AlloydbomniServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in AlloydbomniServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        AlloydbomniServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        AlloydbomniServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration. The possible value is `read_replica`.
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration. The possible value is `read_replica`.
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class AlloydbomniTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class AlloydbomniTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class CassandraCassandra(dict):
    def __init__(__self__, *,
                 uris: Optional[Sequence[builtins.str]] = None):
        """
        :param Sequence[builtins.str] uris: Cassandra server URIs.
        """
        if uris is not None:
            pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter
    def uris(self) -> Optional[Sequence[builtins.str]]:
        """
        Cassandra server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class CassandraCassandraUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "additionalBackupRegions":
            suggest = "additional_backup_regions"
        elif key == "backupHour":
            suggest = "backup_hour"
        elif key == "backupMinute":
            suggest = "backup_minute"
        elif key == "cassandraVersion":
            suggest = "cassandra_version"
        elif key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "migrateSstableloader":
            suggest = "migrate_sstableloader"
        elif key == "privateAccess":
            suggest = "private_access"
        elif key == "projectToForkFrom":
            suggest = "project_to_fork_from"
        elif key == "publicAccess":
            suggest = "public_access"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "serviceToForkFrom":
            suggest = "service_to_fork_from"
        elif key == "serviceToJoinWith":
            suggest = "service_to_join_with"
        elif key == "staticIps":
            suggest = "static_ips"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in CassandraCassandraUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        CassandraCassandraUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        CassandraCassandraUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 backup_hour: Optional[builtins.int] = None,
                 backup_minute: Optional[builtins.int] = None,
                 cassandra: Optional['outputs.CassandraCassandraUserConfigCassandra'] = None,
                 cassandra_version: Optional[builtins.str] = None,
                 ip_filter_objects: Optional[Sequence['outputs.CassandraCassandraUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 migrate_sstableloader: Optional[builtins.bool] = None,
                 private_access: Optional['outputs.CassandraCassandraUserConfigPrivateAccess'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.CassandraCassandraUserConfigPublicAccess'] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 service_to_join_with: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.int backup_hour: The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        :param builtins.int backup_minute: The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        :param 'CassandraCassandraUserConfigCassandraArgs' cassandra: Cassandra configuration values
        :param builtins.str cassandra_version: Enum: `3`, `4`, `4.1`, and newer. Cassandra version.
        :param Sequence['CassandraCassandraUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param builtins.bool migrate_sstableloader: Sets the service into migration mode enabling the sstableloader utility to be used to upload Cassandra data files. Available only on service create.
        :param 'CassandraCassandraUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'CassandraCassandraUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.str service_to_join_with: When bootstrapping, instead of creating a new Cassandra cluster try to join an existing one from another service. Can only be set on service creation. Example: `my-test-cassandra`.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if backup_hour is not None:
            pulumi.set(__self__, "backup_hour", backup_hour)
        if backup_minute is not None:
            pulumi.set(__self__, "backup_minute", backup_minute)
        if cassandra is not None:
            pulumi.set(__self__, "cassandra", cassandra)
        if cassandra_version is not None:
            pulumi.set(__self__, "cassandra_version", cassandra_version)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if migrate_sstableloader is not None:
            pulumi.set(__self__, "migrate_sstableloader", migrate_sstableloader)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if service_to_join_with is not None:
            pulumi.set(__self__, "service_to_join_with", service_to_join_with)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="backupHour")
    def backup_hour(self) -> Optional[builtins.int]:
        """
        The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        """
        return pulumi.get(self, "backup_hour")

    @property
    @pulumi.getter(name="backupMinute")
    def backup_minute(self) -> Optional[builtins.int]:
        """
        The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        """
        return pulumi.get(self, "backup_minute")

    @property
    @pulumi.getter
    def cassandra(self) -> Optional['outputs.CassandraCassandraUserConfigCassandra']:
        """
        Cassandra configuration values
        """
        return pulumi.get(self, "cassandra")

    @property
    @pulumi.getter(name="cassandraVersion")
    def cassandra_version(self) -> Optional[builtins.str]:
        """
        Enum: `3`, `4`, `4.1`, and newer. Cassandra version.
        """
        return pulumi.get(self, "cassandra_version")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.CassandraCassandraUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="migrateSstableloader")
    def migrate_sstableloader(self) -> Optional[builtins.bool]:
        """
        Sets the service into migration mode enabling the sstableloader utility to be used to upload Cassandra data files. Available only on service create.
        """
        return pulumi.get(self, "migrate_sstableloader")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.CassandraCassandraUserConfigPrivateAccess']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.CassandraCassandraUserConfigPublicAccess']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="serviceToJoinWith")
    def service_to_join_with(self) -> Optional[builtins.str]:
        """
        When bootstrapping, instead of creating a new Cassandra cluster try to join an existing one from another service. Can only be set on service creation. Example: `my-test-cassandra`.
        """
        return pulumi.get(self, "service_to_join_with")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class CassandraCassandraUserConfigCassandra(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "batchSizeFailThresholdInKb":
            suggest = "batch_size_fail_threshold_in_kb"
        elif key == "batchSizeWarnThresholdInKb":
            suggest = "batch_size_warn_threshold_in_kb"
        elif key == "readRequestTimeoutInMs":
            suggest = "read_request_timeout_in_ms"
        elif key == "writeRequestTimeoutInMs":
            suggest = "write_request_timeout_in_ms"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in CassandraCassandraUserConfigCassandra. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        CassandraCassandraUserConfigCassandra.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        CassandraCassandraUserConfigCassandra.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 batch_size_fail_threshold_in_kb: Optional[builtins.int] = None,
                 batch_size_warn_threshold_in_kb: Optional[builtins.int] = None,
                 datacenter: Optional[builtins.str] = None,
                 read_request_timeout_in_ms: Optional[builtins.int] = None,
                 write_request_timeout_in_ms: Optional[builtins.int] = None):
        """
        :param builtins.int batch_size_fail_threshold_in_kb: Fail any multiple-partition batch exceeding this value. 50kb (10x warn threshold) by default. Example: `50`.
        :param builtins.int batch_size_warn_threshold_in_kb: Log a warning message on any multiple-partition batch size exceeding this value.5kb per batch by default.Caution should be taken on increasing the size of this thresholdas it can lead to node instability. Example: `5`.
        :param builtins.str datacenter: Name of the datacenter to which nodes of this service belong. Can be set only when creating the service. Example: `my-service-google-west1`.
        :param builtins.int read_request_timeout_in_ms: How long the coordinator waits for read operations to complete before timing it out. 5 seconds by default. Example: `5000`.
        :param builtins.int write_request_timeout_in_ms: How long the coordinator waits for write requests to complete with at least one node in the local datacenter. 2 seconds by default. Example: `2000`.
        """
        if batch_size_fail_threshold_in_kb is not None:
            pulumi.set(__self__, "batch_size_fail_threshold_in_kb", batch_size_fail_threshold_in_kb)
        if batch_size_warn_threshold_in_kb is not None:
            pulumi.set(__self__, "batch_size_warn_threshold_in_kb", batch_size_warn_threshold_in_kb)
        if datacenter is not None:
            pulumi.set(__self__, "datacenter", datacenter)
        if read_request_timeout_in_ms is not None:
            pulumi.set(__self__, "read_request_timeout_in_ms", read_request_timeout_in_ms)
        if write_request_timeout_in_ms is not None:
            pulumi.set(__self__, "write_request_timeout_in_ms", write_request_timeout_in_ms)

    @property
    @pulumi.getter(name="batchSizeFailThresholdInKb")
    def batch_size_fail_threshold_in_kb(self) -> Optional[builtins.int]:
        """
        Fail any multiple-partition batch exceeding this value. 50kb (10x warn threshold) by default. Example: `50`.
        """
        return pulumi.get(self, "batch_size_fail_threshold_in_kb")

    @property
    @pulumi.getter(name="batchSizeWarnThresholdInKb")
    def batch_size_warn_threshold_in_kb(self) -> Optional[builtins.int]:
        """
        Log a warning message on any multiple-partition batch size exceeding this value.5kb per batch by default.Caution should be taken on increasing the size of this thresholdas it can lead to node instability. Example: `5`.
        """
        return pulumi.get(self, "batch_size_warn_threshold_in_kb")

    @property
    @pulumi.getter
    def datacenter(self) -> Optional[builtins.str]:
        """
        Name of the datacenter to which nodes of this service belong. Can be set only when creating the service. Example: `my-service-google-west1`.
        """
        return pulumi.get(self, "datacenter")

    @property
    @pulumi.getter(name="readRequestTimeoutInMs")
    def read_request_timeout_in_ms(self) -> Optional[builtins.int]:
        """
        How long the coordinator waits for read operations to complete before timing it out. 5 seconds by default. Example: `5000`.
        """
        return pulumi.get(self, "read_request_timeout_in_ms")

    @property
    @pulumi.getter(name="writeRequestTimeoutInMs")
    def write_request_timeout_in_ms(self) -> Optional[builtins.int]:
        """
        How long the coordinator waits for write requests to complete with at least one node in the local datacenter. 2 seconds by default. Example: `2000`.
        """
        return pulumi.get(self, "write_request_timeout_in_ms")


@pulumi.output_type
class CassandraCassandraUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class CassandraCassandraUserConfigPrivateAccess(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class CassandraCassandraUserConfigPublicAccess(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class CassandraComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in CassandraComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        CassandraComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        CassandraComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class CassandraServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in CassandraServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        CassandraServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        CassandraServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class CassandraTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class CassandraTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class ClickhouseClickhouse(dict):
    def __init__(__self__, *,
                 uris: Optional[Sequence[builtins.str]] = None):
        """
        :param Sequence[builtins.str] uris: ClickHouse server URIs.
        """
        if uris is not None:
            pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter
    def uris(self) -> Optional[Sequence[builtins.str]]:
        """
        ClickHouse server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class ClickhouseClickhouseUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "additionalBackupRegions":
            suggest = "additional_backup_regions"
        elif key == "backupHour":
            suggest = "backup_hour"
        elif key == "backupMinute":
            suggest = "backup_minute"
        elif key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "privateAccess":
            suggest = "private_access"
        elif key == "privatelinkAccess":
            suggest = "privatelink_access"
        elif key == "projectToForkFrom":
            suggest = "project_to_fork_from"
        elif key == "publicAccess":
            suggest = "public_access"
        elif key == "recoveryBasebackupName":
            suggest = "recovery_basebackup_name"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "serviceToForkFrom":
            suggest = "service_to_fork_from"
        elif key == "staticIps":
            suggest = "static_ips"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ClickhouseClickhouseUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ClickhouseClickhouseUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ClickhouseClickhouseUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 backup_hour: Optional[builtins.int] = None,
                 backup_minute: Optional[builtins.int] = None,
                 ip_filter_objects: Optional[Sequence['outputs.ClickhouseClickhouseUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 private_access: Optional['outputs.ClickhouseClickhouseUserConfigPrivateAccess'] = None,
                 privatelink_access: Optional['outputs.ClickhouseClickhouseUserConfigPrivatelinkAccess'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.ClickhouseClickhouseUserConfigPublicAccess'] = None,
                 recovery_basebackup_name: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.int backup_hour: The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        :param builtins.int backup_minute: The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        :param Sequence['ClickhouseClickhouseUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'ClickhouseClickhouseUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'ClickhouseClickhouseUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'ClickhouseClickhouseUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_basebackup_name: Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if backup_hour is not None:
            pulumi.set(__self__, "backup_hour", backup_hour)
        if backup_minute is not None:
            pulumi.set(__self__, "backup_minute", backup_minute)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_basebackup_name is not None:
            pulumi.set(__self__, "recovery_basebackup_name", recovery_basebackup_name)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    @_utilities.deprecated("""This property is deprecated.""")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="backupHour")
    def backup_hour(self) -> Optional[builtins.int]:
        """
        The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        """
        return pulumi.get(self, "backup_hour")

    @property
    @pulumi.getter(name="backupMinute")
    def backup_minute(self) -> Optional[builtins.int]:
        """
        The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        """
        return pulumi.get(self, "backup_minute")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.ClickhouseClickhouseUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.ClickhouseClickhouseUserConfigPrivateAccess']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.ClickhouseClickhouseUserConfigPrivatelinkAccess']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.ClickhouseClickhouseUserConfigPublicAccess']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryBasebackupName")
    def recovery_basebackup_name(self) -> Optional[builtins.str]:
        """
        Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        """
        return pulumi.get(self, "recovery_basebackup_name")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class ClickhouseClickhouseUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class ClickhouseClickhouseUserConfigPrivateAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "clickhouseHttps":
            suggest = "clickhouse_https"
        elif key == "clickhouseMysql":
            suggest = "clickhouse_mysql"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ClickhouseClickhouseUserConfigPrivateAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ClickhouseClickhouseUserConfigPrivateAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ClickhouseClickhouseUserConfigPrivateAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 clickhouse: Optional[builtins.bool] = None,
                 clickhouse_https: Optional[builtins.bool] = None,
                 clickhouse_mysql: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool clickhouse: Allow clients to connect to clickhouse with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool clickhouse_https: Allow clients to connect to clickhouse_https with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool clickhouse_mysql: Allow clients to connect to clickhouse_mysql with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if clickhouse is not None:
            pulumi.set(__self__, "clickhouse", clickhouse)
        if clickhouse_https is not None:
            pulumi.set(__self__, "clickhouse_https", clickhouse_https)
        if clickhouse_mysql is not None:
            pulumi.set(__self__, "clickhouse_mysql", clickhouse_mysql)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def clickhouse(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to clickhouse with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "clickhouse")

    @property
    @pulumi.getter(name="clickhouseHttps")
    def clickhouse_https(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to clickhouse_https with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "clickhouse_https")

    @property
    @pulumi.getter(name="clickhouseMysql")
    def clickhouse_mysql(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to clickhouse_mysql with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "clickhouse_mysql")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class ClickhouseClickhouseUserConfigPrivatelinkAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "clickhouseHttps":
            suggest = "clickhouse_https"
        elif key == "clickhouseMysql":
            suggest = "clickhouse_mysql"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ClickhouseClickhouseUserConfigPrivatelinkAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ClickhouseClickhouseUserConfigPrivatelinkAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ClickhouseClickhouseUserConfigPrivatelinkAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 clickhouse: Optional[builtins.bool] = None,
                 clickhouse_https: Optional[builtins.bool] = None,
                 clickhouse_mysql: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool clickhouse: Enable clickhouse.
        :param builtins.bool clickhouse_https: Enable clickhouse_https.
        :param builtins.bool clickhouse_mysql: Enable clickhouse_mysql.
        :param builtins.bool prometheus: Enable prometheus.
        """
        if clickhouse is not None:
            pulumi.set(__self__, "clickhouse", clickhouse)
        if clickhouse_https is not None:
            pulumi.set(__self__, "clickhouse_https", clickhouse_https)
        if clickhouse_mysql is not None:
            pulumi.set(__self__, "clickhouse_mysql", clickhouse_mysql)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def clickhouse(self) -> Optional[builtins.bool]:
        """
        Enable clickhouse.
        """
        return pulumi.get(self, "clickhouse")

    @property
    @pulumi.getter(name="clickhouseHttps")
    def clickhouse_https(self) -> Optional[builtins.bool]:
        """
        Enable clickhouse_https.
        """
        return pulumi.get(self, "clickhouse_https")

    @property
    @pulumi.getter(name="clickhouseMysql")
    def clickhouse_mysql(self) -> Optional[builtins.bool]:
        """
        Enable clickhouse_mysql.
        """
        return pulumi.get(self, "clickhouse_mysql")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class ClickhouseClickhouseUserConfigPublicAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "clickhouseHttps":
            suggest = "clickhouse_https"
        elif key == "clickhouseMysql":
            suggest = "clickhouse_mysql"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ClickhouseClickhouseUserConfigPublicAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ClickhouseClickhouseUserConfigPublicAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ClickhouseClickhouseUserConfigPublicAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 clickhouse: Optional[builtins.bool] = None,
                 clickhouse_https: Optional[builtins.bool] = None,
                 clickhouse_mysql: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool clickhouse: Allow clients to connect to clickhouse from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool clickhouse_https: Allow clients to connect to clickhouse_https from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool clickhouse_mysql: Allow clients to connect to clickhouse_mysql from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if clickhouse is not None:
            pulumi.set(__self__, "clickhouse", clickhouse)
        if clickhouse_https is not None:
            pulumi.set(__self__, "clickhouse_https", clickhouse_https)
        if clickhouse_mysql is not None:
            pulumi.set(__self__, "clickhouse_mysql", clickhouse_mysql)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def clickhouse(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to clickhouse from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "clickhouse")

    @property
    @pulumi.getter(name="clickhouseHttps")
    def clickhouse_https(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to clickhouse_https from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "clickhouse_https")

    @property
    @pulumi.getter(name="clickhouseMysql")
    def clickhouse_mysql(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to clickhouse_mysql from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "clickhouse_mysql")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class ClickhouseComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ClickhouseComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ClickhouseComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ClickhouseComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class ClickhouseGrantPrivilegeGrant(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "withGrant":
            suggest = "with_grant"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ClickhouseGrantPrivilegeGrant. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ClickhouseGrantPrivilegeGrant.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ClickhouseGrantPrivilegeGrant.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 database: builtins.str,
                 column: Optional[builtins.str] = None,
                 privilege: Optional[builtins.str] = None,
                 table: Optional[builtins.str] = None,
                 with_grant: Optional[builtins.bool] = None):
        """
        :param builtins.str database: The database to grant access to. To set up proper dependencies please refer to this variable as a reference. Changing this property forces recreation of the resource.
        :param builtins.str column: The column to grant access to. Changing this property forces recreation of the resource.
        :param builtins.str privilege: The privileges to grant. For example: `INSERT`, `SELECT`, `CREATE TABLE`. A complete list is available in the [ClickHouse documentation](https://clickhouse.com/docs/en/sql-reference/statements/grant). Changing this property forces recreation of the resource.
        :param builtins.str table: The table to grant access to. Changing this property forces recreation of the resource.
        :param builtins.bool with_grant: Allow grantees to grant their privileges to other grantees. Changing this property forces recreation of the resource.
        """
        pulumi.set(__self__, "database", database)
        if column is not None:
            pulumi.set(__self__, "column", column)
        if privilege is not None:
            pulumi.set(__self__, "privilege", privilege)
        if table is not None:
            pulumi.set(__self__, "table", table)
        if with_grant is not None:
            pulumi.set(__self__, "with_grant", with_grant)

    @property
    @pulumi.getter
    def database(self) -> builtins.str:
        """
        The database to grant access to. To set up proper dependencies please refer to this variable as a reference. Changing this property forces recreation of the resource.
        """
        return pulumi.get(self, "database")

    @property
    @pulumi.getter
    def column(self) -> Optional[builtins.str]:
        """
        The column to grant access to. Changing this property forces recreation of the resource.
        """
        return pulumi.get(self, "column")

    @property
    @pulumi.getter
    def privilege(self) -> Optional[builtins.str]:
        """
        The privileges to grant. For example: `INSERT`, `SELECT`, `CREATE TABLE`. A complete list is available in the [ClickHouse documentation](https://clickhouse.com/docs/en/sql-reference/statements/grant). Changing this property forces recreation of the resource.
        """
        return pulumi.get(self, "privilege")

    @property
    @pulumi.getter
    def table(self) -> Optional[builtins.str]:
        """
        The table to grant access to. Changing this property forces recreation of the resource.
        """
        return pulumi.get(self, "table")

    @property
    @pulumi.getter(name="withGrant")
    def with_grant(self) -> Optional[builtins.bool]:
        """
        Allow grantees to grant their privileges to other grantees. Changing this property forces recreation of the resource.
        """
        return pulumi.get(self, "with_grant")


@pulumi.output_type
class ClickhouseGrantRoleGrant(dict):
    def __init__(__self__, *,
                 role: Optional[builtins.str] = None):
        """
        :param builtins.str role: The roles to grant. To set up proper dependencies please refer to this variable as a reference. Changing this property forces recreation of the resource.
        """
        if role is not None:
            pulumi.set(__self__, "role", role)

    @property
    @pulumi.getter
    def role(self) -> Optional[builtins.str]:
        """
        The roles to grant. To set up proper dependencies please refer to this variable as a reference. Changing this property forces recreation of the resource.
        """
        return pulumi.get(self, "role")


@pulumi.output_type
class ClickhouseServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ClickhouseServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ClickhouseServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ClickhouseServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class ClickhouseTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class ClickhouseTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class DragonflyComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in DragonflyComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        DragonflyComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        DragonflyComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class DragonflyDragonfly(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "replicaUri":
            suggest = "replica_uri"
        elif key == "slaveUris":
            suggest = "slave_uris"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in DragonflyDragonfly. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        DragonflyDragonfly.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        DragonflyDragonfly.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 password: Optional[builtins.str] = None,
                 replica_uri: Optional[builtins.str] = None,
                 slave_uris: Optional[Sequence[builtins.str]] = None,
                 uris: Optional[Sequence[builtins.str]] = None):
        """
        :param builtins.str password: Dragonfly password.
        :param builtins.str replica_uri: Dragonfly replica server URI.
        :param Sequence[builtins.str] slave_uris: Dragonfly slave server URIs.
        :param Sequence[builtins.str] uris: Dragonfly server URIs.
        """
        if password is not None:
            pulumi.set(__self__, "password", password)
        if replica_uri is not None:
            pulumi.set(__self__, "replica_uri", replica_uri)
        if slave_uris is not None:
            pulumi.set(__self__, "slave_uris", slave_uris)
        if uris is not None:
            pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        Dragonfly password.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter(name="replicaUri")
    def replica_uri(self) -> Optional[builtins.str]:
        """
        Dragonfly replica server URI.
        """
        return pulumi.get(self, "replica_uri")

    @property
    @pulumi.getter(name="slaveUris")
    def slave_uris(self) -> Optional[Sequence[builtins.str]]:
        """
        Dragonfly slave server URIs.
        """
        return pulumi.get(self, "slave_uris")

    @property
    @pulumi.getter
    def uris(self) -> Optional[Sequence[builtins.str]]:
        """
        Dragonfly server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class DragonflyDragonflyUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "cacheMode":
            suggest = "cache_mode"
        elif key == "dragonflyPersistence":
            suggest = "dragonfly_persistence"
        elif key == "dragonflySsl":
            suggest = "dragonfly_ssl"
        elif key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "privateAccess":
            suggest = "private_access"
        elif key == "privatelinkAccess":
            suggest = "privatelink_access"
        elif key == "projectToForkFrom":
            suggest = "project_to_fork_from"
        elif key == "publicAccess":
            suggest = "public_access"
        elif key == "recoveryBasebackupName":
            suggest = "recovery_basebackup_name"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "serviceToForkFrom":
            suggest = "service_to_fork_from"
        elif key == "staticIps":
            suggest = "static_ips"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in DragonflyDragonflyUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        DragonflyDragonflyUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        DragonflyDragonflyUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 cache_mode: Optional[builtins.bool] = None,
                 dragonfly_persistence: Optional[builtins.str] = None,
                 dragonfly_ssl: Optional[builtins.bool] = None,
                 ip_filter_objects: Optional[Sequence['outputs.DragonflyDragonflyUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 migration: Optional['outputs.DragonflyDragonflyUserConfigMigration'] = None,
                 private_access: Optional['outputs.DragonflyDragonflyUserConfigPrivateAccess'] = None,
                 privatelink_access: Optional['outputs.DragonflyDragonflyUserConfigPrivatelinkAccess'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.DragonflyDragonflyUserConfigPublicAccess'] = None,
                 recovery_basebackup_name: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.bool cache_mode: Evict entries when getting close to maxmemory limit. Default: `false`.
        :param builtins.str dragonfly_persistence: Enum: `dfs`, `off`, `rdb`. When persistence is `rdb` or `dfs`, Dragonfly does RDB or DFS dumps every 10 minutes. Dumps are done according to the backup schedule for backup purposes. When persistence is `off`, no RDB/DFS dumps or backups are done, so data can be lost at any moment if the service is restarted for any reason, or if the service is powered off. Also, the service can't be forked.
        :param builtins.bool dragonfly_ssl: Require SSL to access Dragonfly. Default: `true`.
        :param Sequence['DragonflyDragonflyUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'DragonflyDragonflyUserConfigMigrationArgs' migration: Migrate data from existing server
        :param 'DragonflyDragonflyUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'DragonflyDragonflyUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'DragonflyDragonflyUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_basebackup_name: Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if cache_mode is not None:
            pulumi.set(__self__, "cache_mode", cache_mode)
        if dragonfly_persistence is not None:
            pulumi.set(__self__, "dragonfly_persistence", dragonfly_persistence)
        if dragonfly_ssl is not None:
            pulumi.set(__self__, "dragonfly_ssl", dragonfly_ssl)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if migration is not None:
            pulumi.set(__self__, "migration", migration)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_basebackup_name is not None:
            pulumi.set(__self__, "recovery_basebackup_name", recovery_basebackup_name)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="cacheMode")
    def cache_mode(self) -> Optional[builtins.bool]:
        """
        Evict entries when getting close to maxmemory limit. Default: `false`.
        """
        return pulumi.get(self, "cache_mode")

    @property
    @pulumi.getter(name="dragonflyPersistence")
    def dragonfly_persistence(self) -> Optional[builtins.str]:
        """
        Enum: `dfs`, `off`, `rdb`. When persistence is `rdb` or `dfs`, Dragonfly does RDB or DFS dumps every 10 minutes. Dumps are done according to the backup schedule for backup purposes. When persistence is `off`, no RDB/DFS dumps or backups are done, so data can be lost at any moment if the service is restarted for any reason, or if the service is powered off. Also, the service can't be forked.
        """
        return pulumi.get(self, "dragonfly_persistence")

    @property
    @pulumi.getter(name="dragonflySsl")
    def dragonfly_ssl(self) -> Optional[builtins.bool]:
        """
        Require SSL to access Dragonfly. Default: `true`.
        """
        return pulumi.get(self, "dragonfly_ssl")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.DragonflyDragonflyUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter
    def migration(self) -> Optional['outputs.DragonflyDragonflyUserConfigMigration']:
        """
        Migrate data from existing server
        """
        return pulumi.get(self, "migration")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.DragonflyDragonflyUserConfigPrivateAccess']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.DragonflyDragonflyUserConfigPrivatelinkAccess']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.DragonflyDragonflyUserConfigPublicAccess']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryBasebackupName")
    def recovery_basebackup_name(self) -> Optional[builtins.str]:
        """
        Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        """
        return pulumi.get(self, "recovery_basebackup_name")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class DragonflyDragonflyUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class DragonflyDragonflyUserConfigMigration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "ignoreDbs":
            suggest = "ignore_dbs"
        elif key == "ignoreRoles":
            suggest = "ignore_roles"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in DragonflyDragonflyUserConfigMigration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        DragonflyDragonflyUserConfigMigration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        DragonflyDragonflyUserConfigMigration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 host: builtins.str,
                 port: builtins.int,
                 dbname: Optional[builtins.str] = None,
                 ignore_dbs: Optional[builtins.str] = None,
                 ignore_roles: Optional[builtins.str] = None,
                 method: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 username: Optional[builtins.str] = None):
        """
        :param builtins.str host: Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        :param builtins.int port: Port number of the server where to migrate data from. Example: `1234`.
        :param builtins.str dbname: Database name for bootstrapping the initial connection. Example: `defaultdb`.
        :param builtins.str ignore_dbs: Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        :param builtins.str ignore_roles: Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        :param builtins.str method: Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        :param builtins.str password: Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        :param builtins.bool ssl: The server where to migrate data from is secured with SSL. Default: `true`.
        :param builtins.str username: User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "port", port)
        if dbname is not None:
            pulumi.set(__self__, "dbname", dbname)
        if ignore_dbs is not None:
            pulumi.set(__self__, "ignore_dbs", ignore_dbs)
        if ignore_roles is not None:
            pulumi.set(__self__, "ignore_roles", ignore_roles)
        if method is not None:
            pulumi.set(__self__, "method", method)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number of the server where to migrate data from. Example: `1234`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def dbname(self) -> Optional[builtins.str]:
        """
        Database name for bootstrapping the initial connection. Example: `defaultdb`.
        """
        return pulumi.get(self, "dbname")

    @property
    @pulumi.getter(name="ignoreDbs")
    def ignore_dbs(self) -> Optional[builtins.str]:
        """
        Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        """
        return pulumi.get(self, "ignore_dbs")

    @property
    @pulumi.getter(name="ignoreRoles")
    def ignore_roles(self) -> Optional[builtins.str]:
        """
        Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        """
        return pulumi.get(self, "ignore_roles")

    @property
    @pulumi.getter
    def method(self) -> Optional[builtins.str]:
        """
        Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        """
        return pulumi.get(self, "method")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        The server where to migrate data from is secured with SSL. Default: `true`.
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def username(self) -> Optional[builtins.str]:
        """
        User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class DragonflyDragonflyUserConfigPrivateAccess(dict):
    def __init__(__self__, *,
                 dragonfly: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool dragonfly: Allow clients to connect to dragonfly with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if dragonfly is not None:
            pulumi.set(__self__, "dragonfly", dragonfly)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def dragonfly(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to dragonfly with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "dragonfly")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class DragonflyDragonflyUserConfigPrivatelinkAccess(dict):
    def __init__(__self__, *,
                 dragonfly: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool dragonfly: Enable dragonfly.
        :param builtins.bool prometheus: Enable prometheus.
        """
        if dragonfly is not None:
            pulumi.set(__self__, "dragonfly", dragonfly)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def dragonfly(self) -> Optional[builtins.bool]:
        """
        Enable dragonfly.
        """
        return pulumi.get(self, "dragonfly")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class DragonflyDragonflyUserConfigPublicAccess(dict):
    def __init__(__self__, *,
                 dragonfly: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool dragonfly: Allow clients to connect to dragonfly from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if dragonfly is not None:
            pulumi.set(__self__, "dragonfly", dragonfly)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def dragonfly(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to dragonfly from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "dragonfly")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class DragonflyServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in DragonflyServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        DragonflyServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        DragonflyServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class DragonflyTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class DragonflyTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class FlinkApplicationVersionSink(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "createTable":
            suggest = "create_table"
        elif key == "integrationId":
            suggest = "integration_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in FlinkApplicationVersionSink. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        FlinkApplicationVersionSink.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        FlinkApplicationVersionSink.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 create_table: builtins.str,
                 integration_id: Optional[builtins.str] = None):
        """
        :param builtins.str create_table: The CREATE TABLE statement
        :param builtins.str integration_id: The integration ID
        """
        pulumi.set(__self__, "create_table", create_table)
        if integration_id is not None:
            pulumi.set(__self__, "integration_id", integration_id)

    @property
    @pulumi.getter(name="createTable")
    def create_table(self) -> builtins.str:
        """
        The CREATE TABLE statement
        """
        return pulumi.get(self, "create_table")

    @property
    @pulumi.getter(name="integrationId")
    def integration_id(self) -> Optional[builtins.str]:
        """
        The integration ID
        """
        return pulumi.get(self, "integration_id")


@pulumi.output_type
class FlinkApplicationVersionSource(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "createTable":
            suggest = "create_table"
        elif key == "integrationId":
            suggest = "integration_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in FlinkApplicationVersionSource. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        FlinkApplicationVersionSource.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        FlinkApplicationVersionSource.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 create_table: builtins.str,
                 integration_id: Optional[builtins.str] = None):
        """
        :param builtins.str create_table: The CREATE TABLE statement
        :param builtins.str integration_id: The integration ID
        """
        pulumi.set(__self__, "create_table", create_table)
        if integration_id is not None:
            pulumi.set(__self__, "integration_id", integration_id)

    @property
    @pulumi.getter(name="createTable")
    def create_table(self) -> builtins.str:
        """
        The CREATE TABLE statement
        """
        return pulumi.get(self, "create_table")

    @property
    @pulumi.getter(name="integrationId")
    def integration_id(self) -> Optional[builtins.str]:
        """
        The integration ID
        """
        return pulumi.get(self, "integration_id")


@pulumi.output_type
class FlinkComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in FlinkComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        FlinkComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        FlinkComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class FlinkFlink(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "hostPorts":
            suggest = "host_ports"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in FlinkFlink. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        FlinkFlink.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        FlinkFlink.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 host_ports: Optional[Sequence[builtins.str]] = None):
        """
        :param Sequence[builtins.str] host_ports: The host and port of a Flink server.
        """
        if host_ports is not None:
            pulumi.set(__self__, "host_ports", host_ports)

    @property
    @pulumi.getter(name="hostPorts")
    def host_ports(self) -> Optional[Sequence[builtins.str]]:
        """
        The host and port of a Flink server.
        """
        return pulumi.get(self, "host_ports")


@pulumi.output_type
class FlinkFlinkUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "additionalBackupRegions":
            suggest = "additional_backup_regions"
        elif key == "customCode":
            suggest = "custom_code"
        elif key == "flinkVersion":
            suggest = "flink_version"
        elif key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "numberOfTaskSlots":
            suggest = "number_of_task_slots"
        elif key == "pekkoAskTimeoutS":
            suggest = "pekko_ask_timeout_s"
        elif key == "pekkoFramesizeB":
            suggest = "pekko_framesize_b"
        elif key == "privatelinkAccess":
            suggest = "privatelink_access"
        elif key == "publicAccess":
            suggest = "public_access"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "staticIps":
            suggest = "static_ips"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in FlinkFlinkUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        FlinkFlinkUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        FlinkFlinkUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 custom_code: Optional[builtins.bool] = None,
                 flink_version: Optional[builtins.str] = None,
                 ip_filter_objects: Optional[Sequence['outputs.FlinkFlinkUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 number_of_task_slots: Optional[builtins.int] = None,
                 pekko_ask_timeout_s: Optional[builtins.int] = None,
                 pekko_framesize_b: Optional[builtins.int] = None,
                 privatelink_access: Optional['outputs.FlinkFlinkUserConfigPrivatelinkAccess'] = None,
                 public_access: Optional['outputs.FlinkFlinkUserConfigPublicAccess'] = None,
                 service_log: Optional[builtins.bool] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.bool custom_code: Enable to upload Custom JARs for Flink applications.
        :param builtins.str flink_version: Enum: `1.16`, `1.19`, `1.20`, and newer. Flink major version.
        :param Sequence['FlinkFlinkUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param builtins.int number_of_task_slots: Task slots per node. For a 3 node plan, total number of task slots is 3x this value. Example: `1`.
        :param builtins.int pekko_ask_timeout_s: Timeout in seconds used for all futures and blocking Pekko requests. Example: `10`.
        :param builtins.int pekko_framesize_b: Maximum size in bytes for messages exchanged between the JobManager and the TaskManagers. Example: `10485760`.
        :param 'FlinkFlinkUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param 'FlinkFlinkUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if custom_code is not None:
            pulumi.set(__self__, "custom_code", custom_code)
        if flink_version is not None:
            pulumi.set(__self__, "flink_version", flink_version)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if number_of_task_slots is not None:
            pulumi.set(__self__, "number_of_task_slots", number_of_task_slots)
        if pekko_ask_timeout_s is not None:
            pulumi.set(__self__, "pekko_ask_timeout_s", pekko_ask_timeout_s)
        if pekko_framesize_b is not None:
            pulumi.set(__self__, "pekko_framesize_b", pekko_framesize_b)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    @_utilities.deprecated("""This property is deprecated.""")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="customCode")
    def custom_code(self) -> Optional[builtins.bool]:
        """
        Enable to upload Custom JARs for Flink applications.
        """
        return pulumi.get(self, "custom_code")

    @property
    @pulumi.getter(name="flinkVersion")
    def flink_version(self) -> Optional[builtins.str]:
        """
        Enum: `1.16`, `1.19`, `1.20`, and newer. Flink major version.
        """
        return pulumi.get(self, "flink_version")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.FlinkFlinkUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="numberOfTaskSlots")
    def number_of_task_slots(self) -> Optional[builtins.int]:
        """
        Task slots per node. For a 3 node plan, total number of task slots is 3x this value. Example: `1`.
        """
        return pulumi.get(self, "number_of_task_slots")

    @property
    @pulumi.getter(name="pekkoAskTimeoutS")
    def pekko_ask_timeout_s(self) -> Optional[builtins.int]:
        """
        Timeout in seconds used for all futures and blocking Pekko requests. Example: `10`.
        """
        return pulumi.get(self, "pekko_ask_timeout_s")

    @property
    @pulumi.getter(name="pekkoFramesizeB")
    def pekko_framesize_b(self) -> Optional[builtins.int]:
        """
        Maximum size in bytes for messages exchanged between the JobManager and the TaskManagers. Example: `10485760`.
        """
        return pulumi.get(self, "pekko_framesize_b")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.FlinkFlinkUserConfigPrivatelinkAccess']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.FlinkFlinkUserConfigPublicAccess']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class FlinkFlinkUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class FlinkFlinkUserConfigPrivatelinkAccess(dict):
    def __init__(__self__, *,
                 flink: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool flink: Enable flink.
        :param builtins.bool prometheus: Enable prometheus.
        """
        if flink is not None:
            pulumi.set(__self__, "flink", flink)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def flink(self) -> Optional[builtins.bool]:
        """
        Enable flink.
        """
        return pulumi.get(self, "flink")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class FlinkFlinkUserConfigPublicAccess(dict):
    def __init__(__self__, *,
                 flink: Optional[builtins.bool] = None):
        """
        :param builtins.bool flink: Allow clients to connect to flink from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if flink is not None:
            pulumi.set(__self__, "flink", flink)

    @property
    @pulumi.getter
    def flink(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to flink from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "flink")


@pulumi.output_type
class FlinkJarApplicationApplicationVersion(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "createdAt":
            suggest = "created_at"
        elif key == "createdBy":
            suggest = "created_by"
        elif key == "fileInfos":
            suggest = "file_infos"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in FlinkJarApplicationApplicationVersion. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        FlinkJarApplicationApplicationVersion.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        FlinkJarApplicationApplicationVersion.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 created_at: Optional[builtins.str] = None,
                 created_by: Optional[builtins.str] = None,
                 file_infos: Optional[Sequence['outputs.FlinkJarApplicationApplicationVersionFileInfo']] = None,
                 id: Optional[builtins.str] = None,
                 version: Optional[builtins.int] = None):
        """
        :param builtins.str created_at: The creation timestamp of this entity in ISO 8601 format, always in UTC.
        :param builtins.str created_by: The creator of this entity.
        :param Sequence['FlinkJarApplicationApplicationVersionFileInfoArgs'] file_infos: Flink JarApplicationVersion FileInfo.
        :param builtins.str id: ApplicationVersion ID.
        :param builtins.int version: Version number.
        """
        if created_at is not None:
            pulumi.set(__self__, "created_at", created_at)
        if created_by is not None:
            pulumi.set(__self__, "created_by", created_by)
        if file_infos is not None:
            pulumi.set(__self__, "file_infos", file_infos)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if version is not None:
            pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter(name="createdAt")
    def created_at(self) -> Optional[builtins.str]:
        """
        The creation timestamp of this entity in ISO 8601 format, always in UTC.
        """
        return pulumi.get(self, "created_at")

    @property
    @pulumi.getter(name="createdBy")
    def created_by(self) -> Optional[builtins.str]:
        """
        The creator of this entity.
        """
        return pulumi.get(self, "created_by")

    @property
    @pulumi.getter(name="fileInfos")
    def file_infos(self) -> Optional[Sequence['outputs.FlinkJarApplicationApplicationVersionFileInfo']]:
        """
        Flink JarApplicationVersion FileInfo.
        """
        return pulumi.get(self, "file_infos")

    @property
    @pulumi.getter
    def id(self) -> Optional[builtins.str]:
        """
        ApplicationVersion ID.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def version(self) -> Optional[builtins.int]:
        """
        Version number.
        """
        return pulumi.get(self, "version")


@pulumi.output_type
class FlinkJarApplicationApplicationVersionFileInfo(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "fileSha256":
            suggest = "file_sha256"
        elif key == "fileSize":
            suggest = "file_size"
        elif key == "fileStatus":
            suggest = "file_status"
        elif key == "verifyErrorCode":
            suggest = "verify_error_code"
        elif key == "verifyErrorMessage":
            suggest = "verify_error_message"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in FlinkJarApplicationApplicationVersionFileInfo. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        FlinkJarApplicationApplicationVersionFileInfo.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        FlinkJarApplicationApplicationVersionFileInfo.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 file_sha256: Optional[builtins.str] = None,
                 file_size: Optional[builtins.int] = None,
                 file_status: Optional[builtins.str] = None,
                 url: Optional[builtins.str] = None,
                 verify_error_code: Optional[builtins.int] = None,
                 verify_error_message: Optional[builtins.str] = None):
        """
        :param builtins.str file_sha256: sha256 of the file if known.
        :param builtins.int file_size: The size of the file in bytes.
        :param builtins.str file_status: Indicates whether the uploaded .jar file has been verified by the system and deployment ready. The possible values are `INITIAL`, `READY` and `FAILED`.
        :param builtins.str url: The pre-signed url of the bucket where the .jar file is uploaded. Becomes null when the JarApplicationVersion is ready or failed.
        :param builtins.int verify_error_code: In the case file_status is FAILED, the error code of the failure. The possible values are `1`, `2` and `3`.
        :param builtins.str verify_error_message: In the case file_status is FAILED, may contain details about the failure.
        """
        if file_sha256 is not None:
            pulumi.set(__self__, "file_sha256", file_sha256)
        if file_size is not None:
            pulumi.set(__self__, "file_size", file_size)
        if file_status is not None:
            pulumi.set(__self__, "file_status", file_status)
        if url is not None:
            pulumi.set(__self__, "url", url)
        if verify_error_code is not None:
            pulumi.set(__self__, "verify_error_code", verify_error_code)
        if verify_error_message is not None:
            pulumi.set(__self__, "verify_error_message", verify_error_message)

    @property
    @pulumi.getter(name="fileSha256")
    def file_sha256(self) -> Optional[builtins.str]:
        """
        sha256 of the file if known.
        """
        return pulumi.get(self, "file_sha256")

    @property
    @pulumi.getter(name="fileSize")
    def file_size(self) -> Optional[builtins.int]:
        """
        The size of the file in bytes.
        """
        return pulumi.get(self, "file_size")

    @property
    @pulumi.getter(name="fileStatus")
    def file_status(self) -> Optional[builtins.str]:
        """
        Indicates whether the uploaded .jar file has been verified by the system and deployment ready. The possible values are `INITIAL`, `READY` and `FAILED`.
        """
        return pulumi.get(self, "file_status")

    @property
    @pulumi.getter
    def url(self) -> Optional[builtins.str]:
        """
        The pre-signed url of the bucket where the .jar file is uploaded. Becomes null when the JarApplicationVersion is ready or failed.
        """
        return pulumi.get(self, "url")

    @property
    @pulumi.getter(name="verifyErrorCode")
    def verify_error_code(self) -> Optional[builtins.int]:
        """
        In the case file_status is FAILED, the error code of the failure. The possible values are `1`, `2` and `3`.
        """
        return pulumi.get(self, "verify_error_code")

    @property
    @pulumi.getter(name="verifyErrorMessage")
    def verify_error_message(self) -> Optional[builtins.str]:
        """
        In the case file_status is FAILED, may contain details about the failure.
        """
        return pulumi.get(self, "verify_error_message")


@pulumi.output_type
class FlinkJarApplicationCurrentDeployment(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "createdAt":
            suggest = "created_at"
        elif key == "createdBy":
            suggest = "created_by"
        elif key == "entryClass":
            suggest = "entry_class"
        elif key == "errorMsg":
            suggest = "error_msg"
        elif key == "jobId":
            suggest = "job_id"
        elif key == "lastSavepoint":
            suggest = "last_savepoint"
        elif key == "programArgs":
            suggest = "program_args"
        elif key == "startingSavepoint":
            suggest = "starting_savepoint"
        elif key == "versionId":
            suggest = "version_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in FlinkJarApplicationCurrentDeployment. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        FlinkJarApplicationCurrentDeployment.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        FlinkJarApplicationCurrentDeployment.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 created_at: Optional[builtins.str] = None,
                 created_by: Optional[builtins.str] = None,
                 entry_class: Optional[builtins.str] = None,
                 error_msg: Optional[builtins.str] = None,
                 id: Optional[builtins.str] = None,
                 job_id: Optional[builtins.str] = None,
                 last_savepoint: Optional[builtins.str] = None,
                 parallelism: Optional[builtins.int] = None,
                 program_args: Optional[Sequence[builtins.str]] = None,
                 starting_savepoint: Optional[builtins.str] = None,
                 status: Optional[builtins.str] = None,
                 version_id: Optional[builtins.str] = None):
        """
        :param builtins.str created_at: The creation timestamp of this entity in ISO 8601 format, always in UTC.
        :param builtins.str created_by: The creator of this entity.
        :param builtins.str entry_class: The fully qualified name of the entry class to pass during Flink job submission through the entryClass parameter.
        :param builtins.str error_msg: Error message describing what caused deployment to fail.
        :param builtins.str id: Deployment ID.
        :param builtins.str job_id: Job ID.
        :param builtins.str last_savepoint: Job savepoint.
        :param builtins.int parallelism: Reading of Flink parallel execution documentation is recommended before setting this value to other than 1. Please do not set this value higher than (total number of nodes x number_of_task_slots), or every new job created will fail.
        :param Sequence[builtins.str] program_args: Arguments to pass during Flink job submission through the programArgsList parameter.
        :param builtins.str starting_savepoint: Job savepoint.
        :param builtins.str status: Deployment status. The possible values are `CANCELED`, `CANCELLING`, `CANCELLING_REQUESTED`, `CREATED`, `DELETE_REQUESTED`, `DELETING`, `FAILED`, `FAILING`, `FINISHED`, `INITIALIZING`, `RECONCILING`, `RESTARTING`, `RUNNING`, `SAVING`, `SAVING_AND_STOP`, `SAVING_AND_STOP_REQUESTED` and `SUSPENDED`.
        :param builtins.str version_id: ApplicationVersion ID.
        """
        if created_at is not None:
            pulumi.set(__self__, "created_at", created_at)
        if created_by is not None:
            pulumi.set(__self__, "created_by", created_by)
        if entry_class is not None:
            pulumi.set(__self__, "entry_class", entry_class)
        if error_msg is not None:
            pulumi.set(__self__, "error_msg", error_msg)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if job_id is not None:
            pulumi.set(__self__, "job_id", job_id)
        if last_savepoint is not None:
            pulumi.set(__self__, "last_savepoint", last_savepoint)
        if parallelism is not None:
            pulumi.set(__self__, "parallelism", parallelism)
        if program_args is not None:
            pulumi.set(__self__, "program_args", program_args)
        if starting_savepoint is not None:
            pulumi.set(__self__, "starting_savepoint", starting_savepoint)
        if status is not None:
            pulumi.set(__self__, "status", status)
        if version_id is not None:
            pulumi.set(__self__, "version_id", version_id)

    @property
    @pulumi.getter(name="createdAt")
    def created_at(self) -> Optional[builtins.str]:
        """
        The creation timestamp of this entity in ISO 8601 format, always in UTC.
        """
        return pulumi.get(self, "created_at")

    @property
    @pulumi.getter(name="createdBy")
    def created_by(self) -> Optional[builtins.str]:
        """
        The creator of this entity.
        """
        return pulumi.get(self, "created_by")

    @property
    @pulumi.getter(name="entryClass")
    def entry_class(self) -> Optional[builtins.str]:
        """
        The fully qualified name of the entry class to pass during Flink job submission through the entryClass parameter.
        """
        return pulumi.get(self, "entry_class")

    @property
    @pulumi.getter(name="errorMsg")
    def error_msg(self) -> Optional[builtins.str]:
        """
        Error message describing what caused deployment to fail.
        """
        return pulumi.get(self, "error_msg")

    @property
    @pulumi.getter
    def id(self) -> Optional[builtins.str]:
        """
        Deployment ID.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="jobId")
    def job_id(self) -> Optional[builtins.str]:
        """
        Job ID.
        """
        return pulumi.get(self, "job_id")

    @property
    @pulumi.getter(name="lastSavepoint")
    def last_savepoint(self) -> Optional[builtins.str]:
        """
        Job savepoint.
        """
        return pulumi.get(self, "last_savepoint")

    @property
    @pulumi.getter
    def parallelism(self) -> Optional[builtins.int]:
        """
        Reading of Flink parallel execution documentation is recommended before setting this value to other than 1. Please do not set this value higher than (total number of nodes x number_of_task_slots), or every new job created will fail.
        """
        return pulumi.get(self, "parallelism")

    @property
    @pulumi.getter(name="programArgs")
    def program_args(self) -> Optional[Sequence[builtins.str]]:
        """
        Arguments to pass during Flink job submission through the programArgsList parameter.
        """
        return pulumi.get(self, "program_args")

    @property
    @pulumi.getter(name="startingSavepoint")
    def starting_savepoint(self) -> Optional[builtins.str]:
        """
        Job savepoint.
        """
        return pulumi.get(self, "starting_savepoint")

    @property
    @pulumi.getter
    def status(self) -> Optional[builtins.str]:
        """
        Deployment status. The possible values are `CANCELED`, `CANCELLING`, `CANCELLING_REQUESTED`, `CREATED`, `DELETE_REQUESTED`, `DELETING`, `FAILED`, `FAILING`, `FINISHED`, `INITIALIZING`, `RECONCILING`, `RESTARTING`, `RUNNING`, `SAVING`, `SAVING_AND_STOP`, `SAVING_AND_STOP_REQUESTED` and `SUSPENDED`.
        """
        return pulumi.get(self, "status")

    @property
    @pulumi.getter(name="versionId")
    def version_id(self) -> Optional[builtins.str]:
        """
        ApplicationVersion ID.
        """
        return pulumi.get(self, "version_id")


@pulumi.output_type
class FlinkJarApplicationVersionFileInfo(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "fileSha256":
            suggest = "file_sha256"
        elif key == "fileSize":
            suggest = "file_size"
        elif key == "fileStatus":
            suggest = "file_status"
        elif key == "verifyErrorCode":
            suggest = "verify_error_code"
        elif key == "verifyErrorMessage":
            suggest = "verify_error_message"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in FlinkJarApplicationVersionFileInfo. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        FlinkJarApplicationVersionFileInfo.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        FlinkJarApplicationVersionFileInfo.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 file_sha256: Optional[builtins.str] = None,
                 file_size: Optional[builtins.int] = None,
                 file_status: Optional[builtins.str] = None,
                 url: Optional[builtins.str] = None,
                 verify_error_code: Optional[builtins.int] = None,
                 verify_error_message: Optional[builtins.str] = None):
        """
        :param builtins.str file_sha256: sha256 of the file if known.
        :param builtins.int file_size: The size of the file in bytes.
        :param builtins.str file_status: Indicates whether the uploaded .jar file has been verified by the system and deployment ready. The possible values are `FAILED`, `INITIAL` and `READY`.
        :param builtins.str url: The pre-signed url of the bucket where the .jar file is uploaded. Becomes null when the JarApplicationVersion is ready or failed.
        :param builtins.int verify_error_code: In the case file_status is FAILED, the error code of the failure. The possible values are `1`, `2` and `3`.
        :param builtins.str verify_error_message: In the case file_status is FAILED, may contain details about the failure.
        """
        if file_sha256 is not None:
            pulumi.set(__self__, "file_sha256", file_sha256)
        if file_size is not None:
            pulumi.set(__self__, "file_size", file_size)
        if file_status is not None:
            pulumi.set(__self__, "file_status", file_status)
        if url is not None:
            pulumi.set(__self__, "url", url)
        if verify_error_code is not None:
            pulumi.set(__self__, "verify_error_code", verify_error_code)
        if verify_error_message is not None:
            pulumi.set(__self__, "verify_error_message", verify_error_message)

    @property
    @pulumi.getter(name="fileSha256")
    def file_sha256(self) -> Optional[builtins.str]:
        """
        sha256 of the file if known.
        """
        return pulumi.get(self, "file_sha256")

    @property
    @pulumi.getter(name="fileSize")
    def file_size(self) -> Optional[builtins.int]:
        """
        The size of the file in bytes.
        """
        return pulumi.get(self, "file_size")

    @property
    @pulumi.getter(name="fileStatus")
    def file_status(self) -> Optional[builtins.str]:
        """
        Indicates whether the uploaded .jar file has been verified by the system and deployment ready. The possible values are `FAILED`, `INITIAL` and `READY`.
        """
        return pulumi.get(self, "file_status")

    @property
    @pulumi.getter
    def url(self) -> Optional[builtins.str]:
        """
        The pre-signed url of the bucket where the .jar file is uploaded. Becomes null when the JarApplicationVersion is ready or failed.
        """
        return pulumi.get(self, "url")

    @property
    @pulumi.getter(name="verifyErrorCode")
    def verify_error_code(self) -> Optional[builtins.int]:
        """
        In the case file_status is FAILED, the error code of the failure. The possible values are `1`, `2` and `3`.
        """
        return pulumi.get(self, "verify_error_code")

    @property
    @pulumi.getter(name="verifyErrorMessage")
    def verify_error_message(self) -> Optional[builtins.str]:
        """
        In the case file_status is FAILED, may contain details about the failure.
        """
        return pulumi.get(self, "verify_error_message")


@pulumi.output_type
class FlinkServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in FlinkServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        FlinkServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        FlinkServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class FlinkTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class FlinkTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GovernanceAccessAccessData(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "serviceName":
            suggest = "service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in GovernanceAccessAccessData. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        GovernanceAccessAccessData.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        GovernanceAccessAccessData.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 project: builtins.str,
                 service_name: builtins.str,
                 acls: Optional[Sequence['outputs.GovernanceAccessAccessDataAcl']] = None,
                 username: Optional[builtins.str] = None):
        """
        :param builtins.str project: Project name. Changing this property forces recreation of the resource.
        :param builtins.str service_name: Service name. Changing this property forces recreation of the resource.
        :param Sequence['GovernanceAccessAccessDataAclArgs'] acls: Required property. Acls. Changing this property forces recreation of the resource.
        :param builtins.str username: The service username assigned to the access. Changing this property forces recreation of the resource.
        """
        pulumi.set(__self__, "project", project)
        pulumi.set(__self__, "service_name", service_name)
        if acls is not None:
            pulumi.set(__self__, "acls", acls)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def project(self) -> builtins.str:
        """
        Project name. Changing this property forces recreation of the resource.
        """
        return pulumi.get(self, "project")

    @property
    @pulumi.getter(name="serviceName")
    def service_name(self) -> builtins.str:
        """
        Service name. Changing this property forces recreation of the resource.
        """
        return pulumi.get(self, "service_name")

    @property
    @pulumi.getter
    def acls(self) -> Optional[Sequence['outputs.GovernanceAccessAccessDataAcl']]:
        """
        Required property. Acls. Changing this property forces recreation of the resource.
        """
        return pulumi.get(self, "acls")

    @property
    @pulumi.getter
    def username(self) -> Optional[builtins.str]:
        """
        The service username assigned to the access. Changing this property forces recreation of the resource.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class GovernanceAccessAccessDataAcl(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "permissionType":
            suggest = "permission_type"
        elif key == "resourceName":
            suggest = "resource_name"
        elif key == "resourceType":
            suggest = "resource_type"
        elif key == "patternType":
            suggest = "pattern_type"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in GovernanceAccessAccessDataAcl. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        GovernanceAccessAccessDataAcl.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        GovernanceAccessAccessDataAcl.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 operation: builtins.str,
                 permission_type: builtins.str,
                 resource_name: builtins.str,
                 resource_type: builtins.str,
                 host: Optional[builtins.str] = None,
                 id: Optional[builtins.str] = None,
                 pattern_type: Optional[builtins.str] = None,
                 principal: Optional[builtins.str] = None):
        """
        :param builtins.str operation: An enumeration. The possible values are `Read` and `Write`. Changing this property forces recreation of the resource.
        :param builtins.str permission_type: An enumeration. The possible value is `ALLOW`. Changing this property forces recreation of the resource.
        :param builtins.str resource_name: Acl resource name. Maximum length: `256`. Changing this property forces recreation of the resource.
        :param builtins.str resource_type: An enumeration. The possible value is `Topic`. Changing this property forces recreation of the resource.
        :param builtins.str host: The IP address from which a principal is allowed or denied access to the resource. Use `*` for all hosts. Maximum length: `256`. Changing this property forces recreation of the resource.
        :param builtins.str id: Acl ID.
        :param builtins.str pattern_type: An enumeration. The possible value is `LITERAL`.
        :param builtins.str principal: Acl principal.
        """
        pulumi.set(__self__, "operation", operation)
        pulumi.set(__self__, "permission_type", permission_type)
        pulumi.set(__self__, "resource_name", resource_name)
        pulumi.set(__self__, "resource_type", resource_type)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if pattern_type is not None:
            pulumi.set(__self__, "pattern_type", pattern_type)
        if principal is not None:
            pulumi.set(__self__, "principal", principal)

    @property
    @pulumi.getter
    def operation(self) -> builtins.str:
        """
        An enumeration. The possible values are `Read` and `Write`. Changing this property forces recreation of the resource.
        """
        return pulumi.get(self, "operation")

    @property
    @pulumi.getter(name="permissionType")
    def permission_type(self) -> builtins.str:
        """
        An enumeration. The possible value is `ALLOW`. Changing this property forces recreation of the resource.
        """
        return pulumi.get(self, "permission_type")

    @property
    @pulumi.getter(name="resourceName")
    def resource_name(self) -> builtins.str:
        """
        Acl resource name. Maximum length: `256`. Changing this property forces recreation of the resource.
        """
        return pulumi.get(self, "resource_name")

    @property
    @pulumi.getter(name="resourceType")
    def resource_type(self) -> builtins.str:
        """
        An enumeration. The possible value is `Topic`. Changing this property forces recreation of the resource.
        """
        return pulumi.get(self, "resource_type")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        The IP address from which a principal is allowed or denied access to the resource. Use `*` for all hosts. Maximum length: `256`. Changing this property forces recreation of the resource.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def id(self) -> Optional[builtins.str]:
        """
        Acl ID.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="patternType")
    def pattern_type(self) -> Optional[builtins.str]:
        """
        An enumeration. The possible value is `LITERAL`.
        """
        return pulumi.get(self, "pattern_type")

    @property
    @pulumi.getter
    def principal(self) -> Optional[builtins.str]:
        """
        Acl principal.
        """
        return pulumi.get(self, "principal")


@pulumi.output_type
class GovernanceAccessTimeouts(dict):
    def __init__(__self__, *,
                 create: Optional[builtins.str] = None,
                 delete: Optional[builtins.str] = None,
                 read: Optional[builtins.str] = None,
                 update: Optional[builtins.str] = None):
        """
        :param builtins.str create: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        :param builtins.str delete: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.
        :param builtins.str read: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.
        :param builtins.str update: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        if create is not None:
            pulumi.set(__self__, "create", create)
        if delete is not None:
            pulumi.set(__self__, "delete", delete)
        if read is not None:
            pulumi.set(__self__, "read", read)
        if update is not None:
            pulumi.set(__self__, "update", update)

    @property
    @pulumi.getter
    def create(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "create")

    @property
    @pulumi.getter
    def delete(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.
        """
        return pulumi.get(self, "delete")

    @property
    @pulumi.getter
    def read(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.
        """
        return pulumi.get(self, "read")

    @property
    @pulumi.getter
    def update(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "update")


@pulumi.output_type
class GrafanaComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in GrafanaComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        GrafanaComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        GrafanaComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GrafanaGrafana(dict):
    def __init__(__self__, *,
                 uris: Optional[Sequence[builtins.str]] = None):
        """
        :param Sequence[builtins.str] uris: Grafana server URIs.
        """
        if uris is not None:
            pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter
    def uris(self) -> Optional[Sequence[builtins.str]]:
        """
        Grafana server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class GrafanaGrafanaUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "additionalBackupRegions":
            suggest = "additional_backup_regions"
        elif key == "alertingEnabled":
            suggest = "alerting_enabled"
        elif key == "alertingErrorOrTimeout":
            suggest = "alerting_error_or_timeout"
        elif key == "alertingMaxAnnotationsToKeep":
            suggest = "alerting_max_annotations_to_keep"
        elif key == "alertingNodataOrNullvalues":
            suggest = "alerting_nodata_or_nullvalues"
        elif key == "allowEmbedding":
            suggest = "allow_embedding"
        elif key == "authAzuread":
            suggest = "auth_azuread"
        elif key == "authBasicEnabled":
            suggest = "auth_basic_enabled"
        elif key == "authGenericOauth":
            suggest = "auth_generic_oauth"
        elif key == "authGithub":
            suggest = "auth_github"
        elif key == "authGitlab":
            suggest = "auth_gitlab"
        elif key == "authGoogle":
            suggest = "auth_google"
        elif key == "cookieSamesite":
            suggest = "cookie_samesite"
        elif key == "customDomain":
            suggest = "custom_domain"
        elif key == "dashboardPreviewsEnabled":
            suggest = "dashboard_previews_enabled"
        elif key == "dashboardScenesEnabled":
            suggest = "dashboard_scenes_enabled"
        elif key == "dashboardsMinRefreshInterval":
            suggest = "dashboards_min_refresh_interval"
        elif key == "dashboardsVersionsToKeep":
            suggest = "dashboards_versions_to_keep"
        elif key == "dataproxySendUserHeader":
            suggest = "dataproxy_send_user_header"
        elif key == "dataproxyTimeout":
            suggest = "dataproxy_timeout"
        elif key == "dateFormats":
            suggest = "date_formats"
        elif key == "disableGravatar":
            suggest = "disable_gravatar"
        elif key == "editorsCanAdmin":
            suggest = "editors_can_admin"
        elif key == "externalImageStorage":
            suggest = "external_image_storage"
        elif key == "googleAnalyticsUaId":
            suggest = "google_analytics_ua_id"
        elif key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "metricsEnabled":
            suggest = "metrics_enabled"
        elif key == "oauthAllowInsecureEmailLookup":
            suggest = "oauth_allow_insecure_email_lookup"
        elif key == "privateAccess":
            suggest = "private_access"
        elif key == "privatelinkAccess":
            suggest = "privatelink_access"
        elif key == "projectToForkFrom":
            suggest = "project_to_fork_from"
        elif key == "publicAccess":
            suggest = "public_access"
        elif key == "recoveryBasebackupName":
            suggest = "recovery_basebackup_name"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "serviceToForkFrom":
            suggest = "service_to_fork_from"
        elif key == "smtpServer":
            suggest = "smtp_server"
        elif key == "staticIps":
            suggest = "static_ips"
        elif key == "unifiedAlertingEnabled":
            suggest = "unified_alerting_enabled"
        elif key == "userAutoAssignOrg":
            suggest = "user_auto_assign_org"
        elif key == "userAutoAssignOrgRole":
            suggest = "user_auto_assign_org_role"
        elif key == "viewersCanEdit":
            suggest = "viewers_can_edit"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in GrafanaGrafanaUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        GrafanaGrafanaUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        GrafanaGrafanaUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 alerting_enabled: Optional[builtins.bool] = None,
                 alerting_error_or_timeout: Optional[builtins.str] = None,
                 alerting_max_annotations_to_keep: Optional[builtins.int] = None,
                 alerting_nodata_or_nullvalues: Optional[builtins.str] = None,
                 allow_embedding: Optional[builtins.bool] = None,
                 auth_azuread: Optional['outputs.GrafanaGrafanaUserConfigAuthAzuread'] = None,
                 auth_basic_enabled: Optional[builtins.bool] = None,
                 auth_generic_oauth: Optional['outputs.GrafanaGrafanaUserConfigAuthGenericOauth'] = None,
                 auth_github: Optional['outputs.GrafanaGrafanaUserConfigAuthGithub'] = None,
                 auth_gitlab: Optional['outputs.GrafanaGrafanaUserConfigAuthGitlab'] = None,
                 auth_google: Optional['outputs.GrafanaGrafanaUserConfigAuthGoogle'] = None,
                 cookie_samesite: Optional[builtins.str] = None,
                 custom_domain: Optional[builtins.str] = None,
                 dashboard_previews_enabled: Optional[builtins.bool] = None,
                 dashboard_scenes_enabled: Optional[builtins.bool] = None,
                 dashboards_min_refresh_interval: Optional[builtins.str] = None,
                 dashboards_versions_to_keep: Optional[builtins.int] = None,
                 dataproxy_send_user_header: Optional[builtins.bool] = None,
                 dataproxy_timeout: Optional[builtins.int] = None,
                 date_formats: Optional['outputs.GrafanaGrafanaUserConfigDateFormats'] = None,
                 disable_gravatar: Optional[builtins.bool] = None,
                 editors_can_admin: Optional[builtins.bool] = None,
                 external_image_storage: Optional['outputs.GrafanaGrafanaUserConfigExternalImageStorage'] = None,
                 google_analytics_ua_id: Optional[builtins.str] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GrafanaGrafanaUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 metrics_enabled: Optional[builtins.bool] = None,
                 oauth_allow_insecure_email_lookup: Optional[builtins.bool] = None,
                 private_access: Optional['outputs.GrafanaGrafanaUserConfigPrivateAccess'] = None,
                 privatelink_access: Optional['outputs.GrafanaGrafanaUserConfigPrivatelinkAccess'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.GrafanaGrafanaUserConfigPublicAccess'] = None,
                 recovery_basebackup_name: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 smtp_server: Optional['outputs.GrafanaGrafanaUserConfigSmtpServer'] = None,
                 static_ips: Optional[builtins.bool] = None,
                 unified_alerting_enabled: Optional[builtins.bool] = None,
                 user_auto_assign_org: Optional[builtins.bool] = None,
                 user_auto_assign_org_role: Optional[builtins.str] = None,
                 viewers_can_edit: Optional[builtins.bool] = None,
                 wal: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.bool alerting_enabled: Setting has no effect with Grafana 11 and onward. Enable or disable Grafana legacy alerting functionality. This should not be enabled with unified*alerting*enabled.
        :param builtins.str alerting_error_or_timeout: Enum: `alerting`, `keep_state`. Default error or timeout setting for new alerting rules.
        :param builtins.int alerting_max_annotations_to_keep: Max number of alert annotations that Grafana stores. 0 (default) keeps all alert annotations. Example: `0`.
        :param builtins.str alerting_nodata_or_nullvalues: Enum: `alerting`, `keep_state`, `no_data`, `ok`. Default value for 'no data or null values' for new alerting rules.
        :param builtins.bool allow_embedding: Allow embedding Grafana dashboards with iframe/frame/object/embed tags. Disabled by default to limit impact of clickjacking.
        :param 'GrafanaGrafanaUserConfigAuthAzureadArgs' auth_azuread: Azure AD OAuth integration
        :param builtins.bool auth_basic_enabled: Enable or disable basic authentication form, used by Grafana built-in login.
        :param 'GrafanaGrafanaUserConfigAuthGenericOauthArgs' auth_generic_oauth: Generic OAuth integration
        :param 'GrafanaGrafanaUserConfigAuthGithubArgs' auth_github: Github Auth integration
        :param 'GrafanaGrafanaUserConfigAuthGitlabArgs' auth_gitlab: GitLab Auth integration
        :param 'GrafanaGrafanaUserConfigAuthGoogleArgs' auth_google: Google Auth integration
        :param builtins.str cookie_samesite: Enum: `lax`, `none`, `strict`. Cookie SameSite attribute: `strict` prevents sending cookie for cross-site requests, effectively disabling direct linking from other sites to Grafana. `lax` is the default value.
        :param builtins.str custom_domain: Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        :param builtins.bool dashboard_previews_enabled: Enable browsing of dashboards in grid (pictures) mode. This feature is new in Grafana 9 and is quite resource intensive. It may cause low-end plans to work more slowly while the dashboard previews are rendering.
        :param builtins.bool dashboard_scenes_enabled: Enable use of the Grafana Scenes Library as the dashboard engine. i.e. the `dashboardScene` feature flag. Upstream blog post at https://grafana.com/blog/2024/10/31/grafana-dashboards-are-now-powered-by-scenes-big-changes-same-ui/.
        :param builtins.str dashboards_min_refresh_interval: Signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s, 1h. Example: `5s`.
        :param builtins.int dashboards_versions_to_keep: Dashboard versions to keep per dashboard. Example: `20`.
        :param builtins.bool dataproxy_send_user_header: Send `X-Grafana-User` header to data source.
        :param builtins.int dataproxy_timeout: Timeout for data proxy requests in seconds. Example: `30`.
        :param 'GrafanaGrafanaUserConfigDateFormatsArgs' date_formats: Grafana date format specifications
        :param builtins.bool disable_gravatar: Set to true to disable gravatar. Defaults to false (gravatar is enabled).
        :param builtins.bool editors_can_admin: Editors can manage folders, teams and dashboards created by them.
        :param 'GrafanaGrafanaUserConfigExternalImageStorageArgs' external_image_storage: External image store settings
        :param builtins.str google_analytics_ua_id: Google Analytics ID. Example: `UA-123456-4`.
        :param Sequence['GrafanaGrafanaUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param builtins.bool metrics_enabled: Enable Grafana's /metrics endpoint.
        :param builtins.bool oauth_allow_insecure_email_lookup: Enforce user lookup based on email instead of the unique ID provided by the IdP.
        :param 'GrafanaGrafanaUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'GrafanaGrafanaUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'GrafanaGrafanaUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_basebackup_name: Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param 'GrafanaGrafanaUserConfigSmtpServerArgs' smtp_server: SMTP server settings
        :param builtins.bool static_ips: Use static public IP addresses.
        :param builtins.bool unified_alerting_enabled: Enable or disable Grafana unified alerting functionality. By default this is enabled and any legacy alerts will be migrated on upgrade to Grafana 9+. To stay on legacy alerting, set unified*alerting*enabled to false and alerting_enabled to true. See https://grafana.com/docs/grafana/latest/alerting/ for more details.
        :param builtins.bool user_auto_assign_org: Auto-assign new users on signup to main organization. Defaults to false.
        :param builtins.str user_auto_assign_org_role: Enum: `Admin`, `Editor`, `Viewer`. Set role for new signups. Defaults to Viewer.
        :param builtins.bool viewers_can_edit: Users with view-only permission can edit but not save dashboards.
        :param builtins.bool wal: Setting to enable/disable Write-Ahead Logging. The default value is false (disabled).
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if alerting_enabled is not None:
            pulumi.set(__self__, "alerting_enabled", alerting_enabled)
        if alerting_error_or_timeout is not None:
            pulumi.set(__self__, "alerting_error_or_timeout", alerting_error_or_timeout)
        if alerting_max_annotations_to_keep is not None:
            pulumi.set(__self__, "alerting_max_annotations_to_keep", alerting_max_annotations_to_keep)
        if alerting_nodata_or_nullvalues is not None:
            pulumi.set(__self__, "alerting_nodata_or_nullvalues", alerting_nodata_or_nullvalues)
        if allow_embedding is not None:
            pulumi.set(__self__, "allow_embedding", allow_embedding)
        if auth_azuread is not None:
            pulumi.set(__self__, "auth_azuread", auth_azuread)
        if auth_basic_enabled is not None:
            pulumi.set(__self__, "auth_basic_enabled", auth_basic_enabled)
        if auth_generic_oauth is not None:
            pulumi.set(__self__, "auth_generic_oauth", auth_generic_oauth)
        if auth_github is not None:
            pulumi.set(__self__, "auth_github", auth_github)
        if auth_gitlab is not None:
            pulumi.set(__self__, "auth_gitlab", auth_gitlab)
        if auth_google is not None:
            pulumi.set(__self__, "auth_google", auth_google)
        if cookie_samesite is not None:
            pulumi.set(__self__, "cookie_samesite", cookie_samesite)
        if custom_domain is not None:
            pulumi.set(__self__, "custom_domain", custom_domain)
        if dashboard_previews_enabled is not None:
            pulumi.set(__self__, "dashboard_previews_enabled", dashboard_previews_enabled)
        if dashboard_scenes_enabled is not None:
            pulumi.set(__self__, "dashboard_scenes_enabled", dashboard_scenes_enabled)
        if dashboards_min_refresh_interval is not None:
            pulumi.set(__self__, "dashboards_min_refresh_interval", dashboards_min_refresh_interval)
        if dashboards_versions_to_keep is not None:
            pulumi.set(__self__, "dashboards_versions_to_keep", dashboards_versions_to_keep)
        if dataproxy_send_user_header is not None:
            pulumi.set(__self__, "dataproxy_send_user_header", dataproxy_send_user_header)
        if dataproxy_timeout is not None:
            pulumi.set(__self__, "dataproxy_timeout", dataproxy_timeout)
        if date_formats is not None:
            pulumi.set(__self__, "date_formats", date_formats)
        if disable_gravatar is not None:
            pulumi.set(__self__, "disable_gravatar", disable_gravatar)
        if editors_can_admin is not None:
            pulumi.set(__self__, "editors_can_admin", editors_can_admin)
        if external_image_storage is not None:
            pulumi.set(__self__, "external_image_storage", external_image_storage)
        if google_analytics_ua_id is not None:
            pulumi.set(__self__, "google_analytics_ua_id", google_analytics_ua_id)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if metrics_enabled is not None:
            pulumi.set(__self__, "metrics_enabled", metrics_enabled)
        if oauth_allow_insecure_email_lookup is not None:
            pulumi.set(__self__, "oauth_allow_insecure_email_lookup", oauth_allow_insecure_email_lookup)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_basebackup_name is not None:
            pulumi.set(__self__, "recovery_basebackup_name", recovery_basebackup_name)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if smtp_server is not None:
            pulumi.set(__self__, "smtp_server", smtp_server)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)
        if unified_alerting_enabled is not None:
            pulumi.set(__self__, "unified_alerting_enabled", unified_alerting_enabled)
        if user_auto_assign_org is not None:
            pulumi.set(__self__, "user_auto_assign_org", user_auto_assign_org)
        if user_auto_assign_org_role is not None:
            pulumi.set(__self__, "user_auto_assign_org_role", user_auto_assign_org_role)
        if viewers_can_edit is not None:
            pulumi.set(__self__, "viewers_can_edit", viewers_can_edit)
        if wal is not None:
            pulumi.set(__self__, "wal", wal)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="alertingEnabled")
    def alerting_enabled(self) -> Optional[builtins.bool]:
        """
        Setting has no effect with Grafana 11 and onward. Enable or disable Grafana legacy alerting functionality. This should not be enabled with unified*alerting*enabled.
        """
        return pulumi.get(self, "alerting_enabled")

    @property
    @pulumi.getter(name="alertingErrorOrTimeout")
    def alerting_error_or_timeout(self) -> Optional[builtins.str]:
        """
        Enum: `alerting`, `keep_state`. Default error or timeout setting for new alerting rules.
        """
        return pulumi.get(self, "alerting_error_or_timeout")

    @property
    @pulumi.getter(name="alertingMaxAnnotationsToKeep")
    def alerting_max_annotations_to_keep(self) -> Optional[builtins.int]:
        """
        Max number of alert annotations that Grafana stores. 0 (default) keeps all alert annotations. Example: `0`.
        """
        return pulumi.get(self, "alerting_max_annotations_to_keep")

    @property
    @pulumi.getter(name="alertingNodataOrNullvalues")
    def alerting_nodata_or_nullvalues(self) -> Optional[builtins.str]:
        """
        Enum: `alerting`, `keep_state`, `no_data`, `ok`. Default value for 'no data or null values' for new alerting rules.
        """
        return pulumi.get(self, "alerting_nodata_or_nullvalues")

    @property
    @pulumi.getter(name="allowEmbedding")
    def allow_embedding(self) -> Optional[builtins.bool]:
        """
        Allow embedding Grafana dashboards with iframe/frame/object/embed tags. Disabled by default to limit impact of clickjacking.
        """
        return pulumi.get(self, "allow_embedding")

    @property
    @pulumi.getter(name="authAzuread")
    def auth_azuread(self) -> Optional['outputs.GrafanaGrafanaUserConfigAuthAzuread']:
        """
        Azure AD OAuth integration
        """
        return pulumi.get(self, "auth_azuread")

    @property
    @pulumi.getter(name="authBasicEnabled")
    def auth_basic_enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable basic authentication form, used by Grafana built-in login.
        """
        return pulumi.get(self, "auth_basic_enabled")

    @property
    @pulumi.getter(name="authGenericOauth")
    def auth_generic_oauth(self) -> Optional['outputs.GrafanaGrafanaUserConfigAuthGenericOauth']:
        """
        Generic OAuth integration
        """
        return pulumi.get(self, "auth_generic_oauth")

    @property
    @pulumi.getter(name="authGithub")
    def auth_github(self) -> Optional['outputs.GrafanaGrafanaUserConfigAuthGithub']:
        """
        Github Auth integration
        """
        return pulumi.get(self, "auth_github")

    @property
    @pulumi.getter(name="authGitlab")
    def auth_gitlab(self) -> Optional['outputs.GrafanaGrafanaUserConfigAuthGitlab']:
        """
        GitLab Auth integration
        """
        return pulumi.get(self, "auth_gitlab")

    @property
    @pulumi.getter(name="authGoogle")
    def auth_google(self) -> Optional['outputs.GrafanaGrafanaUserConfigAuthGoogle']:
        """
        Google Auth integration
        """
        return pulumi.get(self, "auth_google")

    @property
    @pulumi.getter(name="cookieSamesite")
    def cookie_samesite(self) -> Optional[builtins.str]:
        """
        Enum: `lax`, `none`, `strict`. Cookie SameSite attribute: `strict` prevents sending cookie for cross-site requests, effectively disabling direct linking from other sites to Grafana. `lax` is the default value.
        """
        return pulumi.get(self, "cookie_samesite")

    @property
    @pulumi.getter(name="customDomain")
    def custom_domain(self) -> Optional[builtins.str]:
        """
        Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        """
        return pulumi.get(self, "custom_domain")

    @property
    @pulumi.getter(name="dashboardPreviewsEnabled")
    def dashboard_previews_enabled(self) -> Optional[builtins.bool]:
        """
        Enable browsing of dashboards in grid (pictures) mode. This feature is new in Grafana 9 and is quite resource intensive. It may cause low-end plans to work more slowly while the dashboard previews are rendering.
        """
        return pulumi.get(self, "dashboard_previews_enabled")

    @property
    @pulumi.getter(name="dashboardScenesEnabled")
    def dashboard_scenes_enabled(self) -> Optional[builtins.bool]:
        """
        Enable use of the Grafana Scenes Library as the dashboard engine. i.e. the `dashboardScene` feature flag. Upstream blog post at https://grafana.com/blog/2024/10/31/grafana-dashboards-are-now-powered-by-scenes-big-changes-same-ui/.
        """
        return pulumi.get(self, "dashboard_scenes_enabled")

    @property
    @pulumi.getter(name="dashboardsMinRefreshInterval")
    def dashboards_min_refresh_interval(self) -> Optional[builtins.str]:
        """
        Signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s, 1h. Example: `5s`.
        """
        return pulumi.get(self, "dashboards_min_refresh_interval")

    @property
    @pulumi.getter(name="dashboardsVersionsToKeep")
    def dashboards_versions_to_keep(self) -> Optional[builtins.int]:
        """
        Dashboard versions to keep per dashboard. Example: `20`.
        """
        return pulumi.get(self, "dashboards_versions_to_keep")

    @property
    @pulumi.getter(name="dataproxySendUserHeader")
    def dataproxy_send_user_header(self) -> Optional[builtins.bool]:
        """
        Send `X-Grafana-User` header to data source.
        """
        return pulumi.get(self, "dataproxy_send_user_header")

    @property
    @pulumi.getter(name="dataproxyTimeout")
    def dataproxy_timeout(self) -> Optional[builtins.int]:
        """
        Timeout for data proxy requests in seconds. Example: `30`.
        """
        return pulumi.get(self, "dataproxy_timeout")

    @property
    @pulumi.getter(name="dateFormats")
    def date_formats(self) -> Optional['outputs.GrafanaGrafanaUserConfigDateFormats']:
        """
        Grafana date format specifications
        """
        return pulumi.get(self, "date_formats")

    @property
    @pulumi.getter(name="disableGravatar")
    def disable_gravatar(self) -> Optional[builtins.bool]:
        """
        Set to true to disable gravatar. Defaults to false (gravatar is enabled).
        """
        return pulumi.get(self, "disable_gravatar")

    @property
    @pulumi.getter(name="editorsCanAdmin")
    def editors_can_admin(self) -> Optional[builtins.bool]:
        """
        Editors can manage folders, teams and dashboards created by them.
        """
        return pulumi.get(self, "editors_can_admin")

    @property
    @pulumi.getter(name="externalImageStorage")
    def external_image_storage(self) -> Optional['outputs.GrafanaGrafanaUserConfigExternalImageStorage']:
        """
        External image store settings
        """
        return pulumi.get(self, "external_image_storage")

    @property
    @pulumi.getter(name="googleAnalyticsUaId")
    def google_analytics_ua_id(self) -> Optional[builtins.str]:
        """
        Google Analytics ID. Example: `UA-123456-4`.
        """
        return pulumi.get(self, "google_analytics_ua_id")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GrafanaGrafanaUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="metricsEnabled")
    def metrics_enabled(self) -> Optional[builtins.bool]:
        """
        Enable Grafana's /metrics endpoint.
        """
        return pulumi.get(self, "metrics_enabled")

    @property
    @pulumi.getter(name="oauthAllowInsecureEmailLookup")
    def oauth_allow_insecure_email_lookup(self) -> Optional[builtins.bool]:
        """
        Enforce user lookup based on email instead of the unique ID provided by the IdP.
        """
        return pulumi.get(self, "oauth_allow_insecure_email_lookup")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.GrafanaGrafanaUserConfigPrivateAccess']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.GrafanaGrafanaUserConfigPrivatelinkAccess']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GrafanaGrafanaUserConfigPublicAccess']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryBasebackupName")
    def recovery_basebackup_name(self) -> Optional[builtins.str]:
        """
        Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        """
        return pulumi.get(self, "recovery_basebackup_name")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="smtpServer")
    def smtp_server(self) -> Optional['outputs.GrafanaGrafanaUserConfigSmtpServer']:
        """
        SMTP server settings
        """
        return pulumi.get(self, "smtp_server")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")

    @property
    @pulumi.getter(name="unifiedAlertingEnabled")
    def unified_alerting_enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable Grafana unified alerting functionality. By default this is enabled and any legacy alerts will be migrated on upgrade to Grafana 9+. To stay on legacy alerting, set unified*alerting*enabled to false and alerting_enabled to true. See https://grafana.com/docs/grafana/latest/alerting/ for more details.
        """
        return pulumi.get(self, "unified_alerting_enabled")

    @property
    @pulumi.getter(name="userAutoAssignOrg")
    def user_auto_assign_org(self) -> Optional[builtins.bool]:
        """
        Auto-assign new users on signup to main organization. Defaults to false.
        """
        return pulumi.get(self, "user_auto_assign_org")

    @property
    @pulumi.getter(name="userAutoAssignOrgRole")
    def user_auto_assign_org_role(self) -> Optional[builtins.str]:
        """
        Enum: `Admin`, `Editor`, `Viewer`. Set role for new signups. Defaults to Viewer.
        """
        return pulumi.get(self, "user_auto_assign_org_role")

    @property
    @pulumi.getter(name="viewersCanEdit")
    def viewers_can_edit(self) -> Optional[builtins.bool]:
        """
        Users with view-only permission can edit but not save dashboards.
        """
        return pulumi.get(self, "viewers_can_edit")

    @property
    @pulumi.getter
    def wal(self) -> Optional[builtins.bool]:
        """
        Setting to enable/disable Write-Ahead Logging. The default value is false (disabled).
        """
        return pulumi.get(self, "wal")


@pulumi.output_type
class GrafanaGrafanaUserConfigAuthAzuread(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "authUrl":
            suggest = "auth_url"
        elif key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"
        elif key == "tokenUrl":
            suggest = "token_url"
        elif key == "allowSignUp":
            suggest = "allow_sign_up"
        elif key == "allowedDomains":
            suggest = "allowed_domains"
        elif key == "allowedGroups":
            suggest = "allowed_groups"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in GrafanaGrafanaUserConfigAuthAzuread. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        GrafanaGrafanaUserConfigAuthAzuread.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        GrafanaGrafanaUserConfigAuthAzuread.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 auth_url: builtins.str,
                 client_id: builtins.str,
                 client_secret: builtins.str,
                 token_url: builtins.str,
                 allow_sign_up: Optional[builtins.bool] = None,
                 allowed_domains: Optional[Sequence[builtins.str]] = None,
                 allowed_groups: Optional[Sequence[builtins.str]] = None):
        """
        :param builtins.str auth_url: Authorization URL. Example: `https://login.microsoftonline.com/<AZURE_TENANT_ID>/oauth2/v2.0/authorize`.
        :param builtins.str client_id: Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        :param builtins.str client_secret: Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        :param builtins.str token_url: Token URL. Example: `https://login.microsoftonline.com/<AZURE_TENANT_ID>/oauth2/v2.0/token`.
        :param builtins.bool allow_sign_up: Automatically sign-up users on successful sign-in.
        :param Sequence[builtins.str] allowed_domains: Allowed domains.
        :param Sequence[builtins.str] allowed_groups: Require users to belong to one of given groups.
        """
        pulumi.set(__self__, "auth_url", auth_url)
        pulumi.set(__self__, "client_id", client_id)
        pulumi.set(__self__, "client_secret", client_secret)
        pulumi.set(__self__, "token_url", token_url)
        if allow_sign_up is not None:
            pulumi.set(__self__, "allow_sign_up", allow_sign_up)
        if allowed_domains is not None:
            pulumi.set(__self__, "allowed_domains", allowed_domains)
        if allowed_groups is not None:
            pulumi.set(__self__, "allowed_groups", allowed_groups)

    @property
    @pulumi.getter(name="authUrl")
    def auth_url(self) -> builtins.str:
        """
        Authorization URL. Example: `https://login.microsoftonline.com/<AZURE_TENANT_ID>/oauth2/v2.0/authorize`.
        """
        return pulumi.get(self, "auth_url")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> builtins.str:
        """
        Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> builtins.str:
        """
        Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter(name="tokenUrl")
    def token_url(self) -> builtins.str:
        """
        Token URL. Example: `https://login.microsoftonline.com/<AZURE_TENANT_ID>/oauth2/v2.0/token`.
        """
        return pulumi.get(self, "token_url")

    @property
    @pulumi.getter(name="allowSignUp")
    def allow_sign_up(self) -> Optional[builtins.bool]:
        """
        Automatically sign-up users on successful sign-in.
        """
        return pulumi.get(self, "allow_sign_up")

    @property
    @pulumi.getter(name="allowedDomains")
    def allowed_domains(self) -> Optional[Sequence[builtins.str]]:
        """
        Allowed domains.
        """
        return pulumi.get(self, "allowed_domains")

    @property
    @pulumi.getter(name="allowedGroups")
    def allowed_groups(self) -> Optional[Sequence[builtins.str]]:
        """
        Require users to belong to one of given groups.
        """
        return pulumi.get(self, "allowed_groups")


@pulumi.output_type
class GrafanaGrafanaUserConfigAuthGenericOauth(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "apiUrl":
            suggest = "api_url"
        elif key == "authUrl":
            suggest = "auth_url"
        elif key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"
        elif key == "tokenUrl":
            suggest = "token_url"
        elif key == "allowSignUp":
            suggest = "allow_sign_up"
        elif key == "allowedDomains":
            suggest = "allowed_domains"
        elif key == "allowedOrganizations":
            suggest = "allowed_organizations"
        elif key == "autoLogin":
            suggest = "auto_login"
        elif key == "useRefreshToken":
            suggest = "use_refresh_token"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in GrafanaGrafanaUserConfigAuthGenericOauth. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        GrafanaGrafanaUserConfigAuthGenericOauth.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        GrafanaGrafanaUserConfigAuthGenericOauth.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 api_url: builtins.str,
                 auth_url: builtins.str,
                 client_id: builtins.str,
                 client_secret: builtins.str,
                 token_url: builtins.str,
                 allow_sign_up: Optional[builtins.bool] = None,
                 allowed_domains: Optional[Sequence[builtins.str]] = None,
                 allowed_organizations: Optional[Sequence[builtins.str]] = None,
                 auto_login: Optional[builtins.bool] = None,
                 name: Optional[builtins.str] = None,
                 scopes: Optional[Sequence[builtins.str]] = None,
                 use_refresh_token: Optional[builtins.bool] = None):
        """
        :param builtins.str api_url: API URL. Example: `https://yourprovider.com/api`.
        :param builtins.str auth_url: Authorization URL. Example: `https://yourprovider.com/oauth/authorize`.
        :param builtins.str client_id: Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        :param builtins.str client_secret: Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        :param builtins.str token_url: Token URL. Example: `https://yourprovider.com/oauth/token`.
        :param builtins.bool allow_sign_up: Automatically sign-up users on successful sign-in.
        :param Sequence[builtins.str] allowed_domains: Allowed domains.
        :param Sequence[builtins.str] allowed_organizations: Require user to be member of one of the listed organizations.
        :param builtins.bool auto_login: Allow users to bypass the login screen and automatically log in.
        :param builtins.str name: Name of the OAuth integration. Example: `My authentication`.
        :param Sequence[builtins.str] scopes: OAuth scopes.
        :param builtins.bool use_refresh_token: Set to true to use refresh token and check access token expiration.
        """
        pulumi.set(__self__, "api_url", api_url)
        pulumi.set(__self__, "auth_url", auth_url)
        pulumi.set(__self__, "client_id", client_id)
        pulumi.set(__self__, "client_secret", client_secret)
        pulumi.set(__self__, "token_url", token_url)
        if allow_sign_up is not None:
            pulumi.set(__self__, "allow_sign_up", allow_sign_up)
        if allowed_domains is not None:
            pulumi.set(__self__, "allowed_domains", allowed_domains)
        if allowed_organizations is not None:
            pulumi.set(__self__, "allowed_organizations", allowed_organizations)
        if auto_login is not None:
            pulumi.set(__self__, "auto_login", auto_login)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if scopes is not None:
            pulumi.set(__self__, "scopes", scopes)
        if use_refresh_token is not None:
            pulumi.set(__self__, "use_refresh_token", use_refresh_token)

    @property
    @pulumi.getter(name="apiUrl")
    def api_url(self) -> builtins.str:
        """
        API URL. Example: `https://yourprovider.com/api`.
        """
        return pulumi.get(self, "api_url")

    @property
    @pulumi.getter(name="authUrl")
    def auth_url(self) -> builtins.str:
        """
        Authorization URL. Example: `https://yourprovider.com/oauth/authorize`.
        """
        return pulumi.get(self, "auth_url")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> builtins.str:
        """
        Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> builtins.str:
        """
        Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter(name="tokenUrl")
    def token_url(self) -> builtins.str:
        """
        Token URL. Example: `https://yourprovider.com/oauth/token`.
        """
        return pulumi.get(self, "token_url")

    @property
    @pulumi.getter(name="allowSignUp")
    def allow_sign_up(self) -> Optional[builtins.bool]:
        """
        Automatically sign-up users on successful sign-in.
        """
        return pulumi.get(self, "allow_sign_up")

    @property
    @pulumi.getter(name="allowedDomains")
    def allowed_domains(self) -> Optional[Sequence[builtins.str]]:
        """
        Allowed domains.
        """
        return pulumi.get(self, "allowed_domains")

    @property
    @pulumi.getter(name="allowedOrganizations")
    def allowed_organizations(self) -> Optional[Sequence[builtins.str]]:
        """
        Require user to be member of one of the listed organizations.
        """
        return pulumi.get(self, "allowed_organizations")

    @property
    @pulumi.getter(name="autoLogin")
    def auto_login(self) -> Optional[builtins.bool]:
        """
        Allow users to bypass the login screen and automatically log in.
        """
        return pulumi.get(self, "auto_login")

    @property
    @pulumi.getter
    def name(self) -> Optional[builtins.str]:
        """
        Name of the OAuth integration. Example: `My authentication`.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def scopes(self) -> Optional[Sequence[builtins.str]]:
        """
        OAuth scopes.
        """
        return pulumi.get(self, "scopes")

    @property
    @pulumi.getter(name="useRefreshToken")
    def use_refresh_token(self) -> Optional[builtins.bool]:
        """
        Set to true to use refresh token and check access token expiration.
        """
        return pulumi.get(self, "use_refresh_token")


@pulumi.output_type
class GrafanaGrafanaUserConfigAuthGithub(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"
        elif key == "allowSignUp":
            suggest = "allow_sign_up"
        elif key == "allowedOrganizations":
            suggest = "allowed_organizations"
        elif key == "autoLogin":
            suggest = "auto_login"
        elif key == "skipOrgRoleSync":
            suggest = "skip_org_role_sync"
        elif key == "teamIds":
            suggest = "team_ids"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in GrafanaGrafanaUserConfigAuthGithub. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        GrafanaGrafanaUserConfigAuthGithub.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        GrafanaGrafanaUserConfigAuthGithub.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 client_id: builtins.str,
                 client_secret: builtins.str,
                 allow_sign_up: Optional[builtins.bool] = None,
                 allowed_organizations: Optional[Sequence[builtins.str]] = None,
                 auto_login: Optional[builtins.bool] = None,
                 skip_org_role_sync: Optional[builtins.bool] = None,
                 team_ids: Optional[Sequence[builtins.int]] = None):
        """
        :param builtins.str client_id: Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        :param builtins.str client_secret: Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        :param builtins.bool allow_sign_up: Automatically sign-up users on successful sign-in.
        :param Sequence[builtins.str] allowed_organizations: Require users to belong to one of given organizations.
        :param builtins.bool auto_login: Allow users to bypass the login screen and automatically log in.
        :param builtins.bool skip_org_role_sync: Stop automatically syncing user roles.
        :param Sequence[builtins.int] team_ids: Require users to belong to one of given team IDs.
        """
        pulumi.set(__self__, "client_id", client_id)
        pulumi.set(__self__, "client_secret", client_secret)
        if allow_sign_up is not None:
            pulumi.set(__self__, "allow_sign_up", allow_sign_up)
        if allowed_organizations is not None:
            pulumi.set(__self__, "allowed_organizations", allowed_organizations)
        if auto_login is not None:
            pulumi.set(__self__, "auto_login", auto_login)
        if skip_org_role_sync is not None:
            pulumi.set(__self__, "skip_org_role_sync", skip_org_role_sync)
        if team_ids is not None:
            pulumi.set(__self__, "team_ids", team_ids)

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> builtins.str:
        """
        Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> builtins.str:
        """
        Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter(name="allowSignUp")
    def allow_sign_up(self) -> Optional[builtins.bool]:
        """
        Automatically sign-up users on successful sign-in.
        """
        return pulumi.get(self, "allow_sign_up")

    @property
    @pulumi.getter(name="allowedOrganizations")
    def allowed_organizations(self) -> Optional[Sequence[builtins.str]]:
        """
        Require users to belong to one of given organizations.
        """
        return pulumi.get(self, "allowed_organizations")

    @property
    @pulumi.getter(name="autoLogin")
    def auto_login(self) -> Optional[builtins.bool]:
        """
        Allow users to bypass the login screen and automatically log in.
        """
        return pulumi.get(self, "auto_login")

    @property
    @pulumi.getter(name="skipOrgRoleSync")
    def skip_org_role_sync(self) -> Optional[builtins.bool]:
        """
        Stop automatically syncing user roles.
        """
        return pulumi.get(self, "skip_org_role_sync")

    @property
    @pulumi.getter(name="teamIds")
    def team_ids(self) -> Optional[Sequence[builtins.int]]:
        """
        Require users to belong to one of given team IDs.
        """
        return pulumi.get(self, "team_ids")


@pulumi.output_type
class GrafanaGrafanaUserConfigAuthGitlab(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "allowedGroups":
            suggest = "allowed_groups"
        elif key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"
        elif key == "allowSignUp":
            suggest = "allow_sign_up"
        elif key == "apiUrl":
            suggest = "api_url"
        elif key == "authUrl":
            suggest = "auth_url"
        elif key == "tokenUrl":
            suggest = "token_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in GrafanaGrafanaUserConfigAuthGitlab. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        GrafanaGrafanaUserConfigAuthGitlab.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        GrafanaGrafanaUserConfigAuthGitlab.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 allowed_groups: Sequence[builtins.str],
                 client_id: builtins.str,
                 client_secret: builtins.str,
                 allow_sign_up: Optional[builtins.bool] = None,
                 api_url: Optional[builtins.str] = None,
                 auth_url: Optional[builtins.str] = None,
                 token_url: Optional[builtins.str] = None):
        """
        :param Sequence[builtins.str] allowed_groups: Require users to belong to one of given groups.
        :param builtins.str client_id: Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        :param builtins.str client_secret: Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        :param builtins.bool allow_sign_up: Automatically sign-up users on successful sign-in.
        :param builtins.str api_url: This only needs to be set when using self hosted GitLab. Example: `https://gitlab.com/api/v4`.
        :param builtins.str auth_url: This only needs to be set when using self hosted GitLab. Example: `https://gitlab.com/oauth/authorize`.
        :param builtins.str token_url: This only needs to be set when using self hosted GitLab. Example: `https://gitlab.com/oauth/token`.
        """
        pulumi.set(__self__, "allowed_groups", allowed_groups)
        pulumi.set(__self__, "client_id", client_id)
        pulumi.set(__self__, "client_secret", client_secret)
        if allow_sign_up is not None:
            pulumi.set(__self__, "allow_sign_up", allow_sign_up)
        if api_url is not None:
            pulumi.set(__self__, "api_url", api_url)
        if auth_url is not None:
            pulumi.set(__self__, "auth_url", auth_url)
        if token_url is not None:
            pulumi.set(__self__, "token_url", token_url)

    @property
    @pulumi.getter(name="allowedGroups")
    def allowed_groups(self) -> Sequence[builtins.str]:
        """
        Require users to belong to one of given groups.
        """
        return pulumi.get(self, "allowed_groups")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> builtins.str:
        """
        Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> builtins.str:
        """
        Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter(name="allowSignUp")
    def allow_sign_up(self) -> Optional[builtins.bool]:
        """
        Automatically sign-up users on successful sign-in.
        """
        return pulumi.get(self, "allow_sign_up")

    @property
    @pulumi.getter(name="apiUrl")
    def api_url(self) -> Optional[builtins.str]:
        """
        This only needs to be set when using self hosted GitLab. Example: `https://gitlab.com/api/v4`.
        """
        return pulumi.get(self, "api_url")

    @property
    @pulumi.getter(name="authUrl")
    def auth_url(self) -> Optional[builtins.str]:
        """
        This only needs to be set when using self hosted GitLab. Example: `https://gitlab.com/oauth/authorize`.
        """
        return pulumi.get(self, "auth_url")

    @property
    @pulumi.getter(name="tokenUrl")
    def token_url(self) -> Optional[builtins.str]:
        """
        This only needs to be set when using self hosted GitLab. Example: `https://gitlab.com/oauth/token`.
        """
        return pulumi.get(self, "token_url")


@pulumi.output_type
class GrafanaGrafanaUserConfigAuthGoogle(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "allowedDomains":
            suggest = "allowed_domains"
        elif key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"
        elif key == "allowSignUp":
            suggest = "allow_sign_up"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in GrafanaGrafanaUserConfigAuthGoogle. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        GrafanaGrafanaUserConfigAuthGoogle.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        GrafanaGrafanaUserConfigAuthGoogle.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 allowed_domains: Sequence[builtins.str],
                 client_id: builtins.str,
                 client_secret: builtins.str,
                 allow_sign_up: Optional[builtins.bool] = None):
        """
        :param Sequence[builtins.str] allowed_domains: Domains allowed to sign-in to this Grafana.
        :param builtins.str client_id: Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        :param builtins.str client_secret: Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        :param builtins.bool allow_sign_up: Automatically sign-up users on successful sign-in.
        """
        pulumi.set(__self__, "allowed_domains", allowed_domains)
        pulumi.set(__self__, "client_id", client_id)
        pulumi.set(__self__, "client_secret", client_secret)
        if allow_sign_up is not None:
            pulumi.set(__self__, "allow_sign_up", allow_sign_up)

    @property
    @pulumi.getter(name="allowedDomains")
    def allowed_domains(self) -> Sequence[builtins.str]:
        """
        Domains allowed to sign-in to this Grafana.
        """
        return pulumi.get(self, "allowed_domains")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> builtins.str:
        """
        Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> builtins.str:
        """
        Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter(name="allowSignUp")
    def allow_sign_up(self) -> Optional[builtins.bool]:
        """
        Automatically sign-up users on successful sign-in.
        """
        return pulumi.get(self, "allow_sign_up")


@pulumi.output_type
class GrafanaGrafanaUserConfigDateFormats(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "defaultTimezone":
            suggest = "default_timezone"
        elif key == "fullDate":
            suggest = "full_date"
        elif key == "intervalDay":
            suggest = "interval_day"
        elif key == "intervalHour":
            suggest = "interval_hour"
        elif key == "intervalMinute":
            suggest = "interval_minute"
        elif key == "intervalMonth":
            suggest = "interval_month"
        elif key == "intervalSecond":
            suggest = "interval_second"
        elif key == "intervalYear":
            suggest = "interval_year"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in GrafanaGrafanaUserConfigDateFormats. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        GrafanaGrafanaUserConfigDateFormats.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        GrafanaGrafanaUserConfigDateFormats.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 default_timezone: Optional[builtins.str] = None,
                 full_date: Optional[builtins.str] = None,
                 interval_day: Optional[builtins.str] = None,
                 interval_hour: Optional[builtins.str] = None,
                 interval_minute: Optional[builtins.str] = None,
                 interval_month: Optional[builtins.str] = None,
                 interval_second: Optional[builtins.str] = None,
                 interval_year: Optional[builtins.str] = None):
        """
        :param builtins.str default_timezone: Default time zone for user preferences. Value `browser` uses browser local time zone. Example: `Europe/Helsinki`.
        :param builtins.str full_date: Moment.js style format string for cases where full date is shown. Example: `YYYY MM DD`.
        :param builtins.str interval_day: Moment.js style format string used when a time requiring day accuracy is shown. Example: `MM/DD`.
        :param builtins.str interval_hour: Moment.js style format string used when a time requiring hour accuracy is shown. Example: `MM/DD HH:mm`.
        :param builtins.str interval_minute: Moment.js style format string used when a time requiring minute accuracy is shown. Example: `HH:mm`.
        :param builtins.str interval_month: Moment.js style format string used when a time requiring month accuracy is shown. Example: `YYYY-MM`.
        :param builtins.str interval_second: Moment.js style format string used when a time requiring second accuracy is shown. Example: `HH:mm:ss`.
        :param builtins.str interval_year: Moment.js style format string used when a time requiring year accuracy is shown. Example: `YYYY`.
        """
        if default_timezone is not None:
            pulumi.set(__self__, "default_timezone", default_timezone)
        if full_date is not None:
            pulumi.set(__self__, "full_date", full_date)
        if interval_day is not None:
            pulumi.set(__self__, "interval_day", interval_day)
        if interval_hour is not None:
            pulumi.set(__self__, "interval_hour", interval_hour)
        if interval_minute is not None:
            pulumi.set(__self__, "interval_minute", interval_minute)
        if interval_month is not None:
            pulumi.set(__self__, "interval_month", interval_month)
        if interval_second is not None:
            pulumi.set(__self__, "interval_second", interval_second)
        if interval_year is not None:
            pulumi.set(__self__, "interval_year", interval_year)

    @property
    @pulumi.getter(name="defaultTimezone")
    def default_timezone(self) -> Optional[builtins.str]:
        """
        Default time zone for user preferences. Value `browser` uses browser local time zone. Example: `Europe/Helsinki`.
        """
        return pulumi.get(self, "default_timezone")

    @property
    @pulumi.getter(name="fullDate")
    def full_date(self) -> Optional[builtins.str]:
        """
        Moment.js style format string for cases where full date is shown. Example: `YYYY MM DD`.
        """
        return pulumi.get(self, "full_date")

    @property
    @pulumi.getter(name="intervalDay")
    def interval_day(self) -> Optional[builtins.str]:
        """
        Moment.js style format string used when a time requiring day accuracy is shown. Example: `MM/DD`.
        """
        return pulumi.get(self, "interval_day")

    @property
    @pulumi.getter(name="intervalHour")
    def interval_hour(self) -> Optional[builtins.str]:
        """
        Moment.js style format string used when a time requiring hour accuracy is shown. Example: `MM/DD HH:mm`.
        """
        return pulumi.get(self, "interval_hour")

    @property
    @pulumi.getter(name="intervalMinute")
    def interval_minute(self) -> Optional[builtins.str]:
        """
        Moment.js style format string used when a time requiring minute accuracy is shown. Example: `HH:mm`.
        """
        return pulumi.get(self, "interval_minute")

    @property
    @pulumi.getter(name="intervalMonth")
    def interval_month(self) -> Optional[builtins.str]:
        """
        Moment.js style format string used when a time requiring month accuracy is shown. Example: `YYYY-MM`.
        """
        return pulumi.get(self, "interval_month")

    @property
    @pulumi.getter(name="intervalSecond")
    def interval_second(self) -> Optional[builtins.str]:
        """
        Moment.js style format string used when a time requiring second accuracy is shown. Example: `HH:mm:ss`.
        """
        return pulumi.get(self, "interval_second")

    @property
    @pulumi.getter(name="intervalYear")
    def interval_year(self) -> Optional[builtins.str]:
        """
        Moment.js style format string used when a time requiring year accuracy is shown. Example: `YYYY`.
        """
        return pulumi.get(self, "interval_year")


@pulumi.output_type
class GrafanaGrafanaUserConfigExternalImageStorage(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "accessKey":
            suggest = "access_key"
        elif key == "bucketUrl":
            suggest = "bucket_url"
        elif key == "secretKey":
            suggest = "secret_key"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in GrafanaGrafanaUserConfigExternalImageStorage. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        GrafanaGrafanaUserConfigExternalImageStorage.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        GrafanaGrafanaUserConfigExternalImageStorage.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 access_key: builtins.str,
                 bucket_url: builtins.str,
                 provider: builtins.str,
                 secret_key: builtins.str):
        """
        :param builtins.str access_key: S3 access key. Requires permissions to the S3 bucket for the s3:PutObject and s3:PutObjectAcl actions. Example: `AAAAAAAAAAAAAAAAAAA`.
        :param builtins.str bucket_url: Bucket URL for S3. Example: `https://grafana.s3-ap-southeast-2.amazonaws.com/`.
        :param builtins.str provider: Enum: `s3`. External image store provider.
        :param builtins.str secret_key: S3 secret key. Example: `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`.
        """
        pulumi.set(__self__, "access_key", access_key)
        pulumi.set(__self__, "bucket_url", bucket_url)
        pulumi.set(__self__, "provider", provider)
        pulumi.set(__self__, "secret_key", secret_key)

    @property
    @pulumi.getter(name="accessKey")
    def access_key(self) -> builtins.str:
        """
        S3 access key. Requires permissions to the S3 bucket for the s3:PutObject and s3:PutObjectAcl actions. Example: `AAAAAAAAAAAAAAAAAAA`.
        """
        return pulumi.get(self, "access_key")

    @property
    @pulumi.getter(name="bucketUrl")
    def bucket_url(self) -> builtins.str:
        """
        Bucket URL for S3. Example: `https://grafana.s3-ap-southeast-2.amazonaws.com/`.
        """
        return pulumi.get(self, "bucket_url")

    @property
    @pulumi.getter
    def provider(self) -> builtins.str:
        """
        Enum: `s3`. External image store provider.
        """
        return pulumi.get(self, "provider")

    @property
    @pulumi.getter(name="secretKey")
    def secret_key(self) -> builtins.str:
        """
        S3 secret key. Example: `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`.
        """
        return pulumi.get(self, "secret_key")


@pulumi.output_type
class GrafanaGrafanaUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GrafanaGrafanaUserConfigPrivateAccess(dict):
    def __init__(__self__, *,
                 grafana: Optional[builtins.bool] = None):
        """
        :param builtins.bool grafana: Allow clients to connect to grafana with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if grafana is not None:
            pulumi.set(__self__, "grafana", grafana)

    @property
    @pulumi.getter
    def grafana(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to grafana with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "grafana")


@pulumi.output_type
class GrafanaGrafanaUserConfigPrivatelinkAccess(dict):
    def __init__(__self__, *,
                 grafana: Optional[builtins.bool] = None):
        """
        :param builtins.bool grafana: Enable grafana.
        """
        if grafana is not None:
            pulumi.set(__self__, "grafana", grafana)

    @property
    @pulumi.getter
    def grafana(self) -> Optional[builtins.bool]:
        """
        Enable grafana.
        """
        return pulumi.get(self, "grafana")


@pulumi.output_type
class GrafanaGrafanaUserConfigPublicAccess(dict):
    def __init__(__self__, *,
                 grafana: Optional[builtins.bool] = None):
        """
        :param builtins.bool grafana: Allow clients to connect to grafana from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if grafana is not None:
            pulumi.set(__self__, "grafana", grafana)

    @property
    @pulumi.getter
    def grafana(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to grafana from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "grafana")


@pulumi.output_type
class GrafanaGrafanaUserConfigSmtpServer(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "fromAddress":
            suggest = "from_address"
        elif key == "fromName":
            suggest = "from_name"
        elif key == "skipVerify":
            suggest = "skip_verify"
        elif key == "starttlsPolicy":
            suggest = "starttls_policy"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in GrafanaGrafanaUserConfigSmtpServer. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        GrafanaGrafanaUserConfigSmtpServer.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        GrafanaGrafanaUserConfigSmtpServer.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 from_address: builtins.str,
                 host: builtins.str,
                 port: builtins.int,
                 from_name: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 skip_verify: Optional[builtins.bool] = None,
                 starttls_policy: Optional[builtins.str] = None,
                 username: Optional[builtins.str] = None):
        """
        :param builtins.str from_address: Address used for sending emails. Example: `yourgrafanauser@yourdomain.example.com`.
        :param builtins.str host: Server hostname or IP. Example: `smtp.example.com`.
        :param builtins.int port: SMTP server port. Example: `25`.
        :param builtins.str from_name: Name used in outgoing emails, defaults to Grafana.
        :param builtins.str password: Password for SMTP authentication. Example: `ein0eemeev5eeth3Ahfu`.
        :param builtins.bool skip_verify: Skip verifying server certificate. Defaults to false.
        :param builtins.str starttls_policy: Enum: `MandatoryStartTLS`, `NoStartTLS`, `OpportunisticStartTLS`. Either OpportunisticStartTLS, MandatoryStartTLS or NoStartTLS. Default is OpportunisticStartTLS.
        :param builtins.str username: Username for SMTP authentication. Example: `smtpuser`.
        """
        pulumi.set(__self__, "from_address", from_address)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "port", port)
        if from_name is not None:
            pulumi.set(__self__, "from_name", from_name)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if skip_verify is not None:
            pulumi.set(__self__, "skip_verify", skip_verify)
        if starttls_policy is not None:
            pulumi.set(__self__, "starttls_policy", starttls_policy)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="fromAddress")
    def from_address(self) -> builtins.str:
        """
        Address used for sending emails. Example: `yourgrafanauser@yourdomain.example.com`.
        """
        return pulumi.get(self, "from_address")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Server hostname or IP. Example: `smtp.example.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        SMTP server port. Example: `25`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter(name="fromName")
    def from_name(self) -> Optional[builtins.str]:
        """
        Name used in outgoing emails, defaults to Grafana.
        """
        return pulumi.get(self, "from_name")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        Password for SMTP authentication. Example: `ein0eemeev5eeth3Ahfu`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter(name="skipVerify")
    def skip_verify(self) -> Optional[builtins.bool]:
        """
        Skip verifying server certificate. Defaults to false.
        """
        return pulumi.get(self, "skip_verify")

    @property
    @pulumi.getter(name="starttlsPolicy")
    def starttls_policy(self) -> Optional[builtins.str]:
        """
        Enum: `MandatoryStartTLS`, `NoStartTLS`, `OpportunisticStartTLS`. Either OpportunisticStartTLS, MandatoryStartTLS or NoStartTLS. Default is OpportunisticStartTLS.
        """
        return pulumi.get(self, "starttls_policy")

    @property
    @pulumi.getter
    def username(self) -> Optional[builtins.str]:
        """
        Username for SMTP authentication. Example: `smtpuser`.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class GrafanaServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in GrafanaServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        GrafanaServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        GrafanaServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GrafanaTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GrafanaTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class InfluxDbComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in InfluxDbComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        InfluxDbComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        InfluxDbComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class InfluxDbInfluxdb(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "databaseName":
            suggest = "database_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in InfluxDbInfluxdb. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        InfluxDbInfluxdb.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        InfluxDbInfluxdb.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 database_name: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 uris: Optional[Sequence[builtins.str]] = None,
                 username: Optional[builtins.str] = None):
        """
        :param builtins.str database_name: Name of the default InfluxDB database
        :param builtins.str password: InfluxDB password
        :param Sequence[builtins.str] uris: InfluxDB server URIs.
        :param builtins.str username: InfluxDB username
        """
        if database_name is not None:
            pulumi.set(__self__, "database_name", database_name)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if uris is not None:
            pulumi.set(__self__, "uris", uris)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> Optional[builtins.str]:
        """
        Name of the default InfluxDB database
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        InfluxDB password
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def uris(self) -> Optional[Sequence[builtins.str]]:
        """
        InfluxDB server URIs.
        """
        return pulumi.get(self, "uris")

    @property
    @pulumi.getter
    def username(self) -> Optional[builtins.str]:
        """
        InfluxDB username
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class InfluxDbInfluxdbUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "additionalBackupRegions":
            suggest = "additional_backup_regions"
        elif key == "customDomain":
            suggest = "custom_domain"
        elif key == "influxdbVersion":
            suggest = "influxdb_version"
        elif key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "privateAccess":
            suggest = "private_access"
        elif key == "privatelinkAccess":
            suggest = "privatelink_access"
        elif key == "projectToForkFrom":
            suggest = "project_to_fork_from"
        elif key == "publicAccess":
            suggest = "public_access"
        elif key == "recoveryBasebackupName":
            suggest = "recovery_basebackup_name"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "serviceToForkFrom":
            suggest = "service_to_fork_from"
        elif key == "staticIps":
            suggest = "static_ips"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in InfluxDbInfluxdbUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        InfluxDbInfluxdbUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        InfluxDbInfluxdbUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 custom_domain: Optional[builtins.str] = None,
                 influxdb: Optional['outputs.InfluxDbInfluxdbUserConfigInfluxdb'] = None,
                 influxdb_version: Optional[builtins.str] = None,
                 ip_filter_objects: Optional[Sequence['outputs.InfluxDbInfluxdbUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 private_access: Optional['outputs.InfluxDbInfluxdbUserConfigPrivateAccess'] = None,
                 privatelink_access: Optional['outputs.InfluxDbInfluxdbUserConfigPrivatelinkAccess'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.InfluxDbInfluxdbUserConfigPublicAccess'] = None,
                 recovery_basebackup_name: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.str custom_domain: Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        :param 'InfluxDbInfluxdbUserConfigInfluxdbArgs' influxdb: influxdb.conf configuration values
        :param builtins.str influxdb_version: Enum: `1.8`, and newer. InfluxDB major version. Default: `1.8`.
        :param Sequence['InfluxDbInfluxdbUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'InfluxDbInfluxdbUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'InfluxDbInfluxdbUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'InfluxDbInfluxdbUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_basebackup_name: Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if custom_domain is not None:
            pulumi.set(__self__, "custom_domain", custom_domain)
        if influxdb is not None:
            pulumi.set(__self__, "influxdb", influxdb)
        if influxdb_version is not None:
            pulumi.set(__self__, "influxdb_version", influxdb_version)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_basebackup_name is not None:
            pulumi.set(__self__, "recovery_basebackup_name", recovery_basebackup_name)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    @_utilities.deprecated("""This property is deprecated.""")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="customDomain")
    def custom_domain(self) -> Optional[builtins.str]:
        """
        Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        """
        return pulumi.get(self, "custom_domain")

    @property
    @pulumi.getter
    def influxdb(self) -> Optional['outputs.InfluxDbInfluxdbUserConfigInfluxdb']:
        """
        influxdb.conf configuration values
        """
        return pulumi.get(self, "influxdb")

    @property
    @pulumi.getter(name="influxdbVersion")
    def influxdb_version(self) -> Optional[builtins.str]:
        """
        Enum: `1.8`, and newer. InfluxDB major version. Default: `1.8`.
        """
        return pulumi.get(self, "influxdb_version")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.InfluxDbInfluxdbUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.InfluxDbInfluxdbUserConfigPrivateAccess']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.InfluxDbInfluxdbUserConfigPrivatelinkAccess']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.InfluxDbInfluxdbUserConfigPublicAccess']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryBasebackupName")
    def recovery_basebackup_name(self) -> Optional[builtins.str]:
        """
        Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        """
        return pulumi.get(self, "recovery_basebackup_name")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class InfluxDbInfluxdbUserConfigInfluxdb(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "logQueriesAfter":
            suggest = "log_queries_after"
        elif key == "maxConnectionLimit":
            suggest = "max_connection_limit"
        elif key == "maxRowLimit":
            suggest = "max_row_limit"
        elif key == "maxSelectBuckets":
            suggest = "max_select_buckets"
        elif key == "maxSelectPoint":
            suggest = "max_select_point"
        elif key == "queryLogEnabled":
            suggest = "query_log_enabled"
        elif key == "queryTimeout":
            suggest = "query_timeout"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in InfluxDbInfluxdbUserConfigInfluxdb. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        InfluxDbInfluxdbUserConfigInfluxdb.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        InfluxDbInfluxdbUserConfigInfluxdb.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 log_queries_after: Optional[builtins.int] = None,
                 max_connection_limit: Optional[builtins.int] = None,
                 max_row_limit: Optional[builtins.int] = None,
                 max_select_buckets: Optional[builtins.int] = None,
                 max_select_point: Optional[builtins.int] = None,
                 query_log_enabled: Optional[builtins.bool] = None,
                 query_timeout: Optional[builtins.int] = None):
        """
        :param builtins.int log_queries_after: The maximum duration in seconds before a query is logged as a slow query. Setting this to 0 (the default) will never log slow queries.
        :param builtins.int max_connection_limit: Maximum number of connections to InfluxDB. Setting this to 0 (default) means no limit. If using max_connection_limit, it is recommended to set the value to be large enough in order to not block clients unnecessarily.
        :param builtins.int max_row_limit: The maximum number of rows returned in a non-chunked query. Setting this to 0 (the default) allows an unlimited number to be returned.
        :param builtins.int max_select_buckets: The maximum number of `GROUP BY time()` buckets that can be processed in a query. Setting this to 0 (the default) allows an unlimited number to be processed.
        :param builtins.int max_select_point: The maximum number of points that can be processed in a SELECT statement. Setting this to 0 (the default) allows an unlimited number to be processed.
        :param builtins.bool query_log_enabled: Whether queries should be logged before execution. May log sensitive data contained within a query.
        :param builtins.int query_timeout: The maximum duration in seconds before a query is killed. Setting this to 0 (the default) will never kill slow queries.
        """
        if log_queries_after is not None:
            pulumi.set(__self__, "log_queries_after", log_queries_after)
        if max_connection_limit is not None:
            pulumi.set(__self__, "max_connection_limit", max_connection_limit)
        if max_row_limit is not None:
            pulumi.set(__self__, "max_row_limit", max_row_limit)
        if max_select_buckets is not None:
            pulumi.set(__self__, "max_select_buckets", max_select_buckets)
        if max_select_point is not None:
            pulumi.set(__self__, "max_select_point", max_select_point)
        if query_log_enabled is not None:
            pulumi.set(__self__, "query_log_enabled", query_log_enabled)
        if query_timeout is not None:
            pulumi.set(__self__, "query_timeout", query_timeout)

    @property
    @pulumi.getter(name="logQueriesAfter")
    def log_queries_after(self) -> Optional[builtins.int]:
        """
        The maximum duration in seconds before a query is logged as a slow query. Setting this to 0 (the default) will never log slow queries.
        """
        return pulumi.get(self, "log_queries_after")

    @property
    @pulumi.getter(name="maxConnectionLimit")
    def max_connection_limit(self) -> Optional[builtins.int]:
        """
        Maximum number of connections to InfluxDB. Setting this to 0 (default) means no limit. If using max_connection_limit, it is recommended to set the value to be large enough in order to not block clients unnecessarily.
        """
        return pulumi.get(self, "max_connection_limit")

    @property
    @pulumi.getter(name="maxRowLimit")
    def max_row_limit(self) -> Optional[builtins.int]:
        """
        The maximum number of rows returned in a non-chunked query. Setting this to 0 (the default) allows an unlimited number to be returned.
        """
        return pulumi.get(self, "max_row_limit")

    @property
    @pulumi.getter(name="maxSelectBuckets")
    def max_select_buckets(self) -> Optional[builtins.int]:
        """
        The maximum number of `GROUP BY time()` buckets that can be processed in a query. Setting this to 0 (the default) allows an unlimited number to be processed.
        """
        return pulumi.get(self, "max_select_buckets")

    @property
    @pulumi.getter(name="maxSelectPoint")
    def max_select_point(self) -> Optional[builtins.int]:
        """
        The maximum number of points that can be processed in a SELECT statement. Setting this to 0 (the default) allows an unlimited number to be processed.
        """
        return pulumi.get(self, "max_select_point")

    @property
    @pulumi.getter(name="queryLogEnabled")
    def query_log_enabled(self) -> Optional[builtins.bool]:
        """
        Whether queries should be logged before execution. May log sensitive data contained within a query.
        """
        return pulumi.get(self, "query_log_enabled")

    @property
    @pulumi.getter(name="queryTimeout")
    def query_timeout(self) -> Optional[builtins.int]:
        """
        The maximum duration in seconds before a query is killed. Setting this to 0 (the default) will never kill slow queries.
        """
        return pulumi.get(self, "query_timeout")


@pulumi.output_type
class InfluxDbInfluxdbUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class InfluxDbInfluxdbUserConfigPrivateAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "userBackup":
            suggest = "user_backup"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in InfluxDbInfluxdbUserConfigPrivateAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        InfluxDbInfluxdbUserConfigPrivateAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        InfluxDbInfluxdbUserConfigPrivateAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 influxdb: Optional[builtins.bool] = None,
                 user_backup: Optional[builtins.bool] = None):
        """
        :param builtins.bool influxdb: Allow clients to connect to influxdb with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool user_backup: Allow clients to connect to user_backup with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if influxdb is not None:
            pulumi.set(__self__, "influxdb", influxdb)
        if user_backup is not None:
            pulumi.set(__self__, "user_backup", user_backup)

    @property
    @pulumi.getter
    def influxdb(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to influxdb with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "influxdb")

    @property
    @pulumi.getter(name="userBackup")
    def user_backup(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to user_backup with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "user_backup")


@pulumi.output_type
class InfluxDbInfluxdbUserConfigPrivatelinkAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "userBackup":
            suggest = "user_backup"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in InfluxDbInfluxdbUserConfigPrivatelinkAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        InfluxDbInfluxdbUserConfigPrivatelinkAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        InfluxDbInfluxdbUserConfigPrivatelinkAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 influxdb: Optional[builtins.bool] = None,
                 user_backup: Optional[builtins.bool] = None):
        """
        :param builtins.bool influxdb: Enable influxdb.
        :param builtins.bool user_backup: Enable user_backup.
        """
        if influxdb is not None:
            pulumi.set(__self__, "influxdb", influxdb)
        if user_backup is not None:
            pulumi.set(__self__, "user_backup", user_backup)

    @property
    @pulumi.getter
    def influxdb(self) -> Optional[builtins.bool]:
        """
        Enable influxdb.
        """
        return pulumi.get(self, "influxdb")

    @property
    @pulumi.getter(name="userBackup")
    def user_backup(self) -> Optional[builtins.bool]:
        """
        Enable user_backup.
        """
        return pulumi.get(self, "user_backup")


@pulumi.output_type
class InfluxDbInfluxdbUserConfigPublicAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "userBackup":
            suggest = "user_backup"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in InfluxDbInfluxdbUserConfigPublicAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        InfluxDbInfluxdbUserConfigPublicAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        InfluxDbInfluxdbUserConfigPublicAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 influxdb: Optional[builtins.bool] = None,
                 user_backup: Optional[builtins.bool] = None):
        """
        :param builtins.bool influxdb: Allow clients to connect to influxdb from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool user_backup: Allow clients to connect to user_backup from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if influxdb is not None:
            pulumi.set(__self__, "influxdb", influxdb)
        if user_backup is not None:
            pulumi.set(__self__, "user_backup", user_backup)

    @property
    @pulumi.getter
    def influxdb(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to influxdb from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "influxdb")

    @property
    @pulumi.getter(name="userBackup")
    def user_backup(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to user_backup from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "user_backup")


@pulumi.output_type
class InfluxDbServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in InfluxDbServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        InfluxDbServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        InfluxDbServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class InfluxDbTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class InfluxDbTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class KafkaComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class KafkaConnectComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaConnectComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaConnectComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaConnectComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class KafkaConnectKafkaConnectUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "additionalBackupRegions":
            suggest = "additional_backup_regions"
        elif key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "kafkaConnect":
            suggest = "kafka_connect"
        elif key == "pluginVersions":
            suggest = "plugin_versions"
        elif key == "privateAccess":
            suggest = "private_access"
        elif key == "privatelinkAccess":
            suggest = "privatelink_access"
        elif key == "publicAccess":
            suggest = "public_access"
        elif key == "secretProviders":
            suggest = "secret_providers"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "staticIps":
            suggest = "static_ips"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaConnectKafkaConnectUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaConnectKafkaConnectUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaConnectKafkaConnectUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 ip_filter_objects: Optional[Sequence['outputs.KafkaConnectKafkaConnectUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 kafka_connect: Optional['outputs.KafkaConnectKafkaConnectUserConfigKafkaConnect'] = None,
                 plugin_versions: Optional[Sequence['outputs.KafkaConnectKafkaConnectUserConfigPluginVersion']] = None,
                 private_access: Optional['outputs.KafkaConnectKafkaConnectUserConfigPrivateAccess'] = None,
                 privatelink_access: Optional['outputs.KafkaConnectKafkaConnectUserConfigPrivatelinkAccess'] = None,
                 public_access: Optional['outputs.KafkaConnectKafkaConnectUserConfigPublicAccess'] = None,
                 secret_providers: Optional[Sequence['outputs.KafkaConnectKafkaConnectUserConfigSecretProvider']] = None,
                 service_log: Optional[builtins.bool] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param Sequence['KafkaConnectKafkaConnectUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'KafkaConnectKafkaConnectUserConfigKafkaConnectArgs' kafka_connect: Kafka Connect configuration values
        :param Sequence['KafkaConnectKafkaConnectUserConfigPluginVersionArgs'] plugin_versions: The plugin selected by the user
        :param 'KafkaConnectKafkaConnectUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'KafkaConnectKafkaConnectUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param 'KafkaConnectKafkaConnectUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)
        if plugin_versions is not None:
            pulumi.set(__self__, "plugin_versions", plugin_versions)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if secret_providers is not None:
            pulumi.set(__self__, "secret_providers", secret_providers)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    @_utilities.deprecated("""This property is deprecated.""")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.KafkaConnectKafkaConnectUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional['outputs.KafkaConnectKafkaConnectUserConfigKafkaConnect']:
        """
        Kafka Connect configuration values
        """
        return pulumi.get(self, "kafka_connect")

    @property
    @pulumi.getter(name="pluginVersions")
    def plugin_versions(self) -> Optional[Sequence['outputs.KafkaConnectKafkaConnectUserConfigPluginVersion']]:
        """
        The plugin selected by the user
        """
        return pulumi.get(self, "plugin_versions")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.KafkaConnectKafkaConnectUserConfigPrivateAccess']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.KafkaConnectKafkaConnectUserConfigPrivatelinkAccess']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.KafkaConnectKafkaConnectUserConfigPublicAccess']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="secretProviders")
    def secret_providers(self) -> Optional[Sequence['outputs.KafkaConnectKafkaConnectUserConfigSecretProvider']]:
        return pulumi.get(self, "secret_providers")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class KafkaConnectKafkaConnectUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class KafkaConnectKafkaConnectUserConfigKafkaConnect(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectorClientConfigOverridePolicy":
            suggest = "connector_client_config_override_policy"
        elif key == "consumerAutoOffsetReset":
            suggest = "consumer_auto_offset_reset"
        elif key == "consumerFetchMaxBytes":
            suggest = "consumer_fetch_max_bytes"
        elif key == "consumerIsolationLevel":
            suggest = "consumer_isolation_level"
        elif key == "consumerMaxPartitionFetchBytes":
            suggest = "consumer_max_partition_fetch_bytes"
        elif key == "consumerMaxPollIntervalMs":
            suggest = "consumer_max_poll_interval_ms"
        elif key == "consumerMaxPollRecords":
            suggest = "consumer_max_poll_records"
        elif key == "offsetFlushIntervalMs":
            suggest = "offset_flush_interval_ms"
        elif key == "offsetFlushTimeoutMs":
            suggest = "offset_flush_timeout_ms"
        elif key == "producerBatchSize":
            suggest = "producer_batch_size"
        elif key == "producerBufferMemory":
            suggest = "producer_buffer_memory"
        elif key == "producerCompressionType":
            suggest = "producer_compression_type"
        elif key == "producerLingerMs":
            suggest = "producer_linger_ms"
        elif key == "producerMaxRequestSize":
            suggest = "producer_max_request_size"
        elif key == "scheduledRebalanceMaxDelayMs":
            suggest = "scheduled_rebalance_max_delay_ms"
        elif key == "sessionTimeoutMs":
            suggest = "session_timeout_ms"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaConnectKafkaConnectUserConfigKafkaConnect. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaConnectKafkaConnectUserConfigKafkaConnect.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaConnectKafkaConnectUserConfigKafkaConnect.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 connector_client_config_override_policy: Optional[builtins.str] = None,
                 consumer_auto_offset_reset: Optional[builtins.str] = None,
                 consumer_fetch_max_bytes: Optional[builtins.int] = None,
                 consumer_isolation_level: Optional[builtins.str] = None,
                 consumer_max_partition_fetch_bytes: Optional[builtins.int] = None,
                 consumer_max_poll_interval_ms: Optional[builtins.int] = None,
                 consumer_max_poll_records: Optional[builtins.int] = None,
                 offset_flush_interval_ms: Optional[builtins.int] = None,
                 offset_flush_timeout_ms: Optional[builtins.int] = None,
                 producer_batch_size: Optional[builtins.int] = None,
                 producer_buffer_memory: Optional[builtins.int] = None,
                 producer_compression_type: Optional[builtins.str] = None,
                 producer_linger_ms: Optional[builtins.int] = None,
                 producer_max_request_size: Optional[builtins.int] = None,
                 scheduled_rebalance_max_delay_ms: Optional[builtins.int] = None,
                 session_timeout_ms: Optional[builtins.int] = None):
        """
        :param builtins.str connector_client_config_override_policy: Enum: `All`, `None`. Defines what client configurations can be overridden by the connector. Default is None.
        :param builtins.str consumer_auto_offset_reset: Enum: `earliest`, `latest`. What to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server. Default is earliest.
        :param builtins.int consumer_fetch_max_bytes: Records are fetched in batches by the consumer, and if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that the consumer can make progress. As such, this is not a absolute maximum. Example: `52428800`.
        :param builtins.str consumer_isolation_level: Enum: `read_committed`, `read_uncommitted`. Transaction read isolation level. read*uncommitted is the default, but read*committed can be used if consume-exactly-once behavior is desired.
        :param builtins.int consumer_max_partition_fetch_bytes: Records are fetched in batches by the consumer.If the first record batch in the first non-empty partition of the fetch is larger than this limit, the batch will still be returned to ensure that the consumer can make progress. Example: `1048576`.
        :param builtins.int consumer_max_poll_interval_ms: The maximum delay in milliseconds between invocations of poll() when using consumer group management (defaults to 300000).
        :param builtins.int consumer_max_poll_records: The maximum number of records returned in a single call to poll() (defaults to 500).
        :param builtins.int offset_flush_interval_ms: The interval at which to try committing offsets for tasks (defaults to 60000).
        :param builtins.int offset_flush_timeout_ms: Maximum number of milliseconds to wait for records to flush and partition offset data to be committed to offset storage before cancelling the process and restoring the offset data to be committed in a future attempt (defaults to 5000).
        :param builtins.int producer_batch_size: This setting gives the upper bound of the batch size to be sent. If there are fewer than this many bytes accumulated for this partition, the producer will `linger` for the linger.ms time waiting for more records to show up. A batch size of zero will disable batching entirely (defaults to 16384).
        :param builtins.int producer_buffer_memory: The total bytes of memory the producer can use to buffer records waiting to be sent to the broker (defaults to 33554432).
        :param builtins.str producer_compression_type: Enum: `gzip`, `lz4`, `none`, `snappy`, `zstd`. Specify the default compression type for producers. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `none` which is the default and equivalent to no compression.
        :param builtins.int producer_linger_ms: This setting gives the upper bound on the delay for batching: once there is batch.size worth of records for a partition it will be sent immediately regardless of this setting, however if there are fewer than this many bytes accumulated for this partition the producer will `linger` for the specified time waiting for more records to show up. Defaults to 0.
        :param builtins.int producer_max_request_size: This setting will limit the number of record batches the producer will send in a single request to avoid sending huge requests. Example: `1048576`.
        :param builtins.int scheduled_rebalance_max_delay_ms: The maximum delay that is scheduled in order to wait for the return of one or more departed workers before rebalancing and reassigning their connectors and tasks to the group. During this period the connectors and tasks of the departed workers remain unassigned. Defaults to 5 minutes.
        :param builtins.int session_timeout_ms: The timeout in milliseconds used to detect failures when using Kafka’s group management facilities (defaults to 10000).
        """
        if connector_client_config_override_policy is not None:
            pulumi.set(__self__, "connector_client_config_override_policy", connector_client_config_override_policy)
        if consumer_auto_offset_reset is not None:
            pulumi.set(__self__, "consumer_auto_offset_reset", consumer_auto_offset_reset)
        if consumer_fetch_max_bytes is not None:
            pulumi.set(__self__, "consumer_fetch_max_bytes", consumer_fetch_max_bytes)
        if consumer_isolation_level is not None:
            pulumi.set(__self__, "consumer_isolation_level", consumer_isolation_level)
        if consumer_max_partition_fetch_bytes is not None:
            pulumi.set(__self__, "consumer_max_partition_fetch_bytes", consumer_max_partition_fetch_bytes)
        if consumer_max_poll_interval_ms is not None:
            pulumi.set(__self__, "consumer_max_poll_interval_ms", consumer_max_poll_interval_ms)
        if consumer_max_poll_records is not None:
            pulumi.set(__self__, "consumer_max_poll_records", consumer_max_poll_records)
        if offset_flush_interval_ms is not None:
            pulumi.set(__self__, "offset_flush_interval_ms", offset_flush_interval_ms)
        if offset_flush_timeout_ms is not None:
            pulumi.set(__self__, "offset_flush_timeout_ms", offset_flush_timeout_ms)
        if producer_batch_size is not None:
            pulumi.set(__self__, "producer_batch_size", producer_batch_size)
        if producer_buffer_memory is not None:
            pulumi.set(__self__, "producer_buffer_memory", producer_buffer_memory)
        if producer_compression_type is not None:
            pulumi.set(__self__, "producer_compression_type", producer_compression_type)
        if producer_linger_ms is not None:
            pulumi.set(__self__, "producer_linger_ms", producer_linger_ms)
        if producer_max_request_size is not None:
            pulumi.set(__self__, "producer_max_request_size", producer_max_request_size)
        if scheduled_rebalance_max_delay_ms is not None:
            pulumi.set(__self__, "scheduled_rebalance_max_delay_ms", scheduled_rebalance_max_delay_ms)
        if session_timeout_ms is not None:
            pulumi.set(__self__, "session_timeout_ms", session_timeout_ms)

    @property
    @pulumi.getter(name="connectorClientConfigOverridePolicy")
    def connector_client_config_override_policy(self) -> Optional[builtins.str]:
        """
        Enum: `All`, `None`. Defines what client configurations can be overridden by the connector. Default is None.
        """
        return pulumi.get(self, "connector_client_config_override_policy")

    @property
    @pulumi.getter(name="consumerAutoOffsetReset")
    def consumer_auto_offset_reset(self) -> Optional[builtins.str]:
        """
        Enum: `earliest`, `latest`. What to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server. Default is earliest.
        """
        return pulumi.get(self, "consumer_auto_offset_reset")

    @property
    @pulumi.getter(name="consumerFetchMaxBytes")
    def consumer_fetch_max_bytes(self) -> Optional[builtins.int]:
        """
        Records are fetched in batches by the consumer, and if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that the consumer can make progress. As such, this is not a absolute maximum. Example: `52428800`.
        """
        return pulumi.get(self, "consumer_fetch_max_bytes")

    @property
    @pulumi.getter(name="consumerIsolationLevel")
    def consumer_isolation_level(self) -> Optional[builtins.str]:
        """
        Enum: `read_committed`, `read_uncommitted`. Transaction read isolation level. read*uncommitted is the default, but read*committed can be used if consume-exactly-once behavior is desired.
        """
        return pulumi.get(self, "consumer_isolation_level")

    @property
    @pulumi.getter(name="consumerMaxPartitionFetchBytes")
    def consumer_max_partition_fetch_bytes(self) -> Optional[builtins.int]:
        """
        Records are fetched in batches by the consumer.If the first record batch in the first non-empty partition of the fetch is larger than this limit, the batch will still be returned to ensure that the consumer can make progress. Example: `1048576`.
        """
        return pulumi.get(self, "consumer_max_partition_fetch_bytes")

    @property
    @pulumi.getter(name="consumerMaxPollIntervalMs")
    def consumer_max_poll_interval_ms(self) -> Optional[builtins.int]:
        """
        The maximum delay in milliseconds between invocations of poll() when using consumer group management (defaults to 300000).
        """
        return pulumi.get(self, "consumer_max_poll_interval_ms")

    @property
    @pulumi.getter(name="consumerMaxPollRecords")
    def consumer_max_poll_records(self) -> Optional[builtins.int]:
        """
        The maximum number of records returned in a single call to poll() (defaults to 500).
        """
        return pulumi.get(self, "consumer_max_poll_records")

    @property
    @pulumi.getter(name="offsetFlushIntervalMs")
    def offset_flush_interval_ms(self) -> Optional[builtins.int]:
        """
        The interval at which to try committing offsets for tasks (defaults to 60000).
        """
        return pulumi.get(self, "offset_flush_interval_ms")

    @property
    @pulumi.getter(name="offsetFlushTimeoutMs")
    def offset_flush_timeout_ms(self) -> Optional[builtins.int]:
        """
        Maximum number of milliseconds to wait for records to flush and partition offset data to be committed to offset storage before cancelling the process and restoring the offset data to be committed in a future attempt (defaults to 5000).
        """
        return pulumi.get(self, "offset_flush_timeout_ms")

    @property
    @pulumi.getter(name="producerBatchSize")
    def producer_batch_size(self) -> Optional[builtins.int]:
        """
        This setting gives the upper bound of the batch size to be sent. If there are fewer than this many bytes accumulated for this partition, the producer will `linger` for the linger.ms time waiting for more records to show up. A batch size of zero will disable batching entirely (defaults to 16384).
        """
        return pulumi.get(self, "producer_batch_size")

    @property
    @pulumi.getter(name="producerBufferMemory")
    def producer_buffer_memory(self) -> Optional[builtins.int]:
        """
        The total bytes of memory the producer can use to buffer records waiting to be sent to the broker (defaults to 33554432).
        """
        return pulumi.get(self, "producer_buffer_memory")

    @property
    @pulumi.getter(name="producerCompressionType")
    def producer_compression_type(self) -> Optional[builtins.str]:
        """
        Enum: `gzip`, `lz4`, `none`, `snappy`, `zstd`. Specify the default compression type for producers. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `none` which is the default and equivalent to no compression.
        """
        return pulumi.get(self, "producer_compression_type")

    @property
    @pulumi.getter(name="producerLingerMs")
    def producer_linger_ms(self) -> Optional[builtins.int]:
        """
        This setting gives the upper bound on the delay for batching: once there is batch.size worth of records for a partition it will be sent immediately regardless of this setting, however if there are fewer than this many bytes accumulated for this partition the producer will `linger` for the specified time waiting for more records to show up. Defaults to 0.
        """
        return pulumi.get(self, "producer_linger_ms")

    @property
    @pulumi.getter(name="producerMaxRequestSize")
    def producer_max_request_size(self) -> Optional[builtins.int]:
        """
        This setting will limit the number of record batches the producer will send in a single request to avoid sending huge requests. Example: `1048576`.
        """
        return pulumi.get(self, "producer_max_request_size")

    @property
    @pulumi.getter(name="scheduledRebalanceMaxDelayMs")
    def scheduled_rebalance_max_delay_ms(self) -> Optional[builtins.int]:
        """
        The maximum delay that is scheduled in order to wait for the return of one or more departed workers before rebalancing and reassigning their connectors and tasks to the group. During this period the connectors and tasks of the departed workers remain unassigned. Defaults to 5 minutes.
        """
        return pulumi.get(self, "scheduled_rebalance_max_delay_ms")

    @property
    @pulumi.getter(name="sessionTimeoutMs")
    def session_timeout_ms(self) -> Optional[builtins.int]:
        """
        The timeout in milliseconds used to detect failures when using Kafka’s group management facilities (defaults to 10000).
        """
        return pulumi.get(self, "session_timeout_ms")


@pulumi.output_type
class KafkaConnectKafkaConnectUserConfigPluginVersion(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "pluginName":
            suggest = "plugin_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaConnectKafkaConnectUserConfigPluginVersion. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaConnectKafkaConnectUserConfigPluginVersion.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaConnectKafkaConnectUserConfigPluginVersion.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 plugin_name: builtins.str,
                 version: builtins.str):
        """
        :param builtins.str plugin_name: The name of the plugin. Example: `debezium-connector`.
        :param builtins.str version: The version of the plugin. Example: `2.5.0`.
        """
        pulumi.set(__self__, "plugin_name", plugin_name)
        pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter(name="pluginName")
    def plugin_name(self) -> builtins.str:
        """
        The name of the plugin. Example: `debezium-connector`.
        """
        return pulumi.get(self, "plugin_name")

    @property
    @pulumi.getter
    def version(self) -> builtins.str:
        """
        The version of the plugin. Example: `2.5.0`.
        """
        return pulumi.get(self, "version")


@pulumi.output_type
class KafkaConnectKafkaConnectUserConfigPrivateAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "kafkaConnect":
            suggest = "kafka_connect"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaConnectKafkaConnectUserConfigPrivateAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaConnectKafkaConnectUserConfigPrivateAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaConnectKafkaConnectUserConfigPrivateAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 kafka_connect: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool kafka_connect: Allow clients to connect to kafka_connect with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to kafka_connect with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "kafka_connect")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class KafkaConnectKafkaConnectUserConfigPrivatelinkAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "kafkaConnect":
            suggest = "kafka_connect"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaConnectKafkaConnectUserConfigPrivatelinkAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaConnectKafkaConnectUserConfigPrivatelinkAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaConnectKafkaConnectUserConfigPrivatelinkAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 jolokia: Optional[builtins.bool] = None,
                 kafka_connect: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool jolokia: Enable jolokia.
        :param builtins.bool kafka_connect: Enable kafka_connect.
        :param builtins.bool prometheus: Enable prometheus.
        """
        if jolokia is not None:
            pulumi.set(__self__, "jolokia", jolokia)
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def jolokia(self) -> Optional[builtins.bool]:
        """
        Enable jolokia.
        """
        return pulumi.get(self, "jolokia")

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional[builtins.bool]:
        """
        Enable kafka_connect.
        """
        return pulumi.get(self, "kafka_connect")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class KafkaConnectKafkaConnectUserConfigPublicAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "kafkaConnect":
            suggest = "kafka_connect"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaConnectKafkaConnectUserConfigPublicAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaConnectKafkaConnectUserConfigPublicAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaConnectKafkaConnectUserConfigPublicAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 kafka_connect: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool kafka_connect: Allow clients to connect to kafka_connect from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to kafka_connect from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "kafka_connect")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class KafkaConnectKafkaConnectUserConfigSecretProvider(dict):
    def __init__(__self__, *,
                 name: builtins.str,
                 aws: Optional['outputs.KafkaConnectKafkaConnectUserConfigSecretProviderAws'] = None,
                 vault: Optional['outputs.KafkaConnectKafkaConnectUserConfigSecretProviderVault'] = None):
        """
        :param builtins.str name: Name of the secret provider. Used to reference secrets in connector config.
        :param 'KafkaConnectKafkaConnectUserConfigSecretProviderAwsArgs' aws: AWS secret provider configuration
        :param 'KafkaConnectKafkaConnectUserConfigSecretProviderVaultArgs' vault: Vault secret provider configuration
        """
        pulumi.set(__self__, "name", name)
        if aws is not None:
            pulumi.set(__self__, "aws", aws)
        if vault is not None:
            pulumi.set(__self__, "vault", vault)

    @property
    @pulumi.getter
    def name(self) -> builtins.str:
        """
        Name of the secret provider. Used to reference secrets in connector config.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def aws(self) -> Optional['outputs.KafkaConnectKafkaConnectUserConfigSecretProviderAws']:
        """
        AWS secret provider configuration
        """
        return pulumi.get(self, "aws")

    @property
    @pulumi.getter
    def vault(self) -> Optional['outputs.KafkaConnectKafkaConnectUserConfigSecretProviderVault']:
        """
        Vault secret provider configuration
        """
        return pulumi.get(self, "vault")


@pulumi.output_type
class KafkaConnectKafkaConnectUserConfigSecretProviderAws(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "authMethod":
            suggest = "auth_method"
        elif key == "accessKey":
            suggest = "access_key"
        elif key == "secretKey":
            suggest = "secret_key"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaConnectKafkaConnectUserConfigSecretProviderAws. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaConnectKafkaConnectUserConfigSecretProviderAws.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaConnectKafkaConnectUserConfigSecretProviderAws.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 auth_method: builtins.str,
                 region: builtins.str,
                 access_key: Optional[builtins.str] = None,
                 secret_key: Optional[builtins.str] = None):
        """
        :param builtins.str auth_method: Enum: `credentials`. Auth method of the vault secret provider.
        :param builtins.str region: Region used to lookup secrets with AWS SecretManager.
        :param builtins.str access_key: Access key used to authenticate with aws.
        :param builtins.str secret_key: Secret key used to authenticate with aws.
        """
        pulumi.set(__self__, "auth_method", auth_method)
        pulumi.set(__self__, "region", region)
        if access_key is not None:
            pulumi.set(__self__, "access_key", access_key)
        if secret_key is not None:
            pulumi.set(__self__, "secret_key", secret_key)

    @property
    @pulumi.getter(name="authMethod")
    def auth_method(self) -> builtins.str:
        """
        Enum: `credentials`. Auth method of the vault secret provider.
        """
        return pulumi.get(self, "auth_method")

    @property
    @pulumi.getter
    def region(self) -> builtins.str:
        """
        Region used to lookup secrets with AWS SecretManager.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="accessKey")
    def access_key(self) -> Optional[builtins.str]:
        """
        Access key used to authenticate with aws.
        """
        return pulumi.get(self, "access_key")

    @property
    @pulumi.getter(name="secretKey")
    def secret_key(self) -> Optional[builtins.str]:
        """
        Secret key used to authenticate with aws.
        """
        return pulumi.get(self, "secret_key")


@pulumi.output_type
class KafkaConnectKafkaConnectUserConfigSecretProviderVault(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "authMethod":
            suggest = "auth_method"
        elif key == "engineVersion":
            suggest = "engine_version"
        elif key == "prefixPathDepth":
            suggest = "prefix_path_depth"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaConnectKafkaConnectUserConfigSecretProviderVault. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaConnectKafkaConnectUserConfigSecretProviderVault.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaConnectKafkaConnectUserConfigSecretProviderVault.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 address: builtins.str,
                 auth_method: builtins.str,
                 engine_version: Optional[builtins.int] = None,
                 prefix_path_depth: Optional[builtins.int] = None,
                 token: Optional[builtins.str] = None):
        """
        :param builtins.str address: Address of the Vault server.
        :param builtins.str auth_method: Enum: `token`. Auth method of the vault secret provider.
        :param builtins.int engine_version: Enum: `1`, `2`, and newer. KV Secrets Engine version of the Vault server instance.
        :param builtins.int prefix_path_depth: Prefix path depth of the secrets Engine. Default is 1. If the secrets engine path has more than one segment it has to be increased to the number of segments.
        :param builtins.str token: Token used to authenticate with vault and auth method `token`.
        """
        pulumi.set(__self__, "address", address)
        pulumi.set(__self__, "auth_method", auth_method)
        if engine_version is not None:
            pulumi.set(__self__, "engine_version", engine_version)
        if prefix_path_depth is not None:
            pulumi.set(__self__, "prefix_path_depth", prefix_path_depth)
        if token is not None:
            pulumi.set(__self__, "token", token)

    @property
    @pulumi.getter
    def address(self) -> builtins.str:
        """
        Address of the Vault server.
        """
        return pulumi.get(self, "address")

    @property
    @pulumi.getter(name="authMethod")
    def auth_method(self) -> builtins.str:
        """
        Enum: `token`. Auth method of the vault secret provider.
        """
        return pulumi.get(self, "auth_method")

    @property
    @pulumi.getter(name="engineVersion")
    def engine_version(self) -> Optional[builtins.int]:
        """
        Enum: `1`, `2`, and newer. KV Secrets Engine version of the Vault server instance.
        """
        return pulumi.get(self, "engine_version")

    @property
    @pulumi.getter(name="prefixPathDepth")
    def prefix_path_depth(self) -> Optional[builtins.int]:
        """
        Prefix path depth of the secrets Engine. Default is 1. If the secrets engine path has more than one segment it has to be increased to the number of segments.
        """
        return pulumi.get(self, "prefix_path_depth")

    @property
    @pulumi.getter
    def token(self) -> Optional[builtins.str]:
        """
        Token used to authenticate with vault and auth method `token`.
        """
        return pulumi.get(self, "token")


@pulumi.output_type
class KafkaConnectServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaConnectServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaConnectServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaConnectServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class KafkaConnectTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class KafkaConnectTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class KafkaConnectorTask(dict):
    def __init__(__self__, *,
                 connector: Optional[builtins.str] = None,
                 task: Optional[builtins.int] = None):
        """
        :param builtins.str connector: The name of the related connector.
        :param builtins.int task: The task ID of the task.
        """
        if connector is not None:
            pulumi.set(__self__, "connector", connector)
        if task is not None:
            pulumi.set(__self__, "task", task)

    @property
    @pulumi.getter
    def connector(self) -> Optional[builtins.str]:
        """
        The name of the related connector.
        """
        return pulumi.get(self, "connector")

    @property
    @pulumi.getter
    def task(self) -> Optional[builtins.int]:
        """
        The task ID of the task.
        """
        return pulumi.get(self, "task")


@pulumi.output_type
class KafkaKafka(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "accessCert":
            suggest = "access_cert"
        elif key == "accessKey":
            suggest = "access_key"
        elif key == "connectUri":
            suggest = "connect_uri"
        elif key == "restUri":
            suggest = "rest_uri"
        elif key == "schemaRegistryUri":
            suggest = "schema_registry_uri"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaKafka. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaKafka.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaKafka.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 access_cert: Optional[builtins.str] = None,
                 access_key: Optional[builtins.str] = None,
                 connect_uri: Optional[builtins.str] = None,
                 rest_uri: Optional[builtins.str] = None,
                 schema_registry_uri: Optional[builtins.str] = None,
                 uris: Optional[Sequence[builtins.str]] = None):
        """
        :param builtins.str access_cert: The Kafka client certificate.
        :param builtins.str access_key: The Kafka client certificate key.
        :param builtins.str connect_uri: The Kafka Connect URI.
        :param builtins.str rest_uri: The Kafka REST URI.
        :param builtins.str schema_registry_uri: The Schema Registry URI.
        :param Sequence[builtins.str] uris: Kafka server URIs.
        """
        if access_cert is not None:
            pulumi.set(__self__, "access_cert", access_cert)
        if access_key is not None:
            pulumi.set(__self__, "access_key", access_key)
        if connect_uri is not None:
            pulumi.set(__self__, "connect_uri", connect_uri)
        if rest_uri is not None:
            pulumi.set(__self__, "rest_uri", rest_uri)
        if schema_registry_uri is not None:
            pulumi.set(__self__, "schema_registry_uri", schema_registry_uri)
        if uris is not None:
            pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter(name="accessCert")
    def access_cert(self) -> Optional[builtins.str]:
        """
        The Kafka client certificate.
        """
        return pulumi.get(self, "access_cert")

    @property
    @pulumi.getter(name="accessKey")
    def access_key(self) -> Optional[builtins.str]:
        """
        The Kafka client certificate key.
        """
        return pulumi.get(self, "access_key")

    @property
    @pulumi.getter(name="connectUri")
    def connect_uri(self) -> Optional[builtins.str]:
        """
        The Kafka Connect URI.
        """
        return pulumi.get(self, "connect_uri")

    @property
    @pulumi.getter(name="restUri")
    def rest_uri(self) -> Optional[builtins.str]:
        """
        The Kafka REST URI.
        """
        return pulumi.get(self, "rest_uri")

    @property
    @pulumi.getter(name="schemaRegistryUri")
    def schema_registry_uri(self) -> Optional[builtins.str]:
        """
        The Schema Registry URI.
        """
        return pulumi.get(self, "schema_registry_uri")

    @property
    @pulumi.getter
    def uris(self) -> Optional[Sequence[builtins.str]]:
        """
        Kafka server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class KafkaKafkaUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "additionalBackupRegions":
            suggest = "additional_backup_regions"
        elif key == "aivenKafkaTopicMessages":
            suggest = "aiven_kafka_topic_messages"
        elif key == "customDomain":
            suggest = "custom_domain"
        elif key == "followerFetching":
            suggest = "follower_fetching"
        elif key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "kafkaAuthenticationMethods":
            suggest = "kafka_authentication_methods"
        elif key == "kafkaConnect":
            suggest = "kafka_connect"
        elif key == "kafkaConnectConfig":
            suggest = "kafka_connect_config"
        elif key == "kafkaConnectPluginVersions":
            suggest = "kafka_connect_plugin_versions"
        elif key == "kafkaConnectSecretProviders":
            suggest = "kafka_connect_secret_providers"
        elif key == "kafkaRest":
            suggest = "kafka_rest"
        elif key == "kafkaRestAuthorization":
            suggest = "kafka_rest_authorization"
        elif key == "kafkaRestConfig":
            suggest = "kafka_rest_config"
        elif key == "kafkaSaslMechanisms":
            suggest = "kafka_sasl_mechanisms"
        elif key == "kafkaVersion":
            suggest = "kafka_version"
        elif key == "letsencryptSaslPrivatelink":
            suggest = "letsencrypt_sasl_privatelink"
        elif key == "privateAccess":
            suggest = "private_access"
        elif key == "privatelinkAccess":
            suggest = "privatelink_access"
        elif key == "publicAccess":
            suggest = "public_access"
        elif key == "schemaRegistry":
            suggest = "schema_registry"
        elif key == "schemaRegistryConfig":
            suggest = "schema_registry_config"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "singleZone":
            suggest = "single_zone"
        elif key == "staticIps":
            suggest = "static_ips"
        elif key == "tieredStorage":
            suggest = "tiered_storage"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaKafkaUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaKafkaUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaKafkaUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 aiven_kafka_topic_messages: Optional[builtins.bool] = None,
                 custom_domain: Optional[builtins.str] = None,
                 follower_fetching: Optional['outputs.KafkaKafkaUserConfigFollowerFetching'] = None,
                 ip_filter_objects: Optional[Sequence['outputs.KafkaKafkaUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 kafka: Optional['outputs.KafkaKafkaUserConfigKafka'] = None,
                 kafka_authentication_methods: Optional['outputs.KafkaKafkaUserConfigKafkaAuthenticationMethods'] = None,
                 kafka_connect: Optional[builtins.bool] = None,
                 kafka_connect_config: Optional['outputs.KafkaKafkaUserConfigKafkaConnectConfig'] = None,
                 kafka_connect_plugin_versions: Optional[Sequence['outputs.KafkaKafkaUserConfigKafkaConnectPluginVersion']] = None,
                 kafka_connect_secret_providers: Optional[Sequence['outputs.KafkaKafkaUserConfigKafkaConnectSecretProvider']] = None,
                 kafka_rest: Optional[builtins.bool] = None,
                 kafka_rest_authorization: Optional[builtins.bool] = None,
                 kafka_rest_config: Optional['outputs.KafkaKafkaUserConfigKafkaRestConfig'] = None,
                 kafka_sasl_mechanisms: Optional['outputs.KafkaKafkaUserConfigKafkaSaslMechanisms'] = None,
                 kafka_version: Optional[builtins.str] = None,
                 letsencrypt_sasl_privatelink: Optional[builtins.bool] = None,
                 private_access: Optional['outputs.KafkaKafkaUserConfigPrivateAccess'] = None,
                 privatelink_access: Optional['outputs.KafkaKafkaUserConfigPrivatelinkAccess'] = None,
                 public_access: Optional['outputs.KafkaKafkaUserConfigPublicAccess'] = None,
                 schema_registry: Optional[builtins.bool] = None,
                 schema_registry_config: Optional['outputs.KafkaKafkaUserConfigSchemaRegistryConfig'] = None,
                 service_log: Optional[builtins.bool] = None,
                 single_zone: Optional['outputs.KafkaKafkaUserConfigSingleZone'] = None,
                 static_ips: Optional[builtins.bool] = None,
                 tiered_storage: Optional['outputs.KafkaKafkaUserConfigTieredStorage'] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.bool aiven_kafka_topic_messages: Allow access to read Kafka topic messages in the Aiven Console and REST API.
        :param builtins.str custom_domain: Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        :param 'KafkaKafkaUserConfigFollowerFetchingArgs' follower_fetching: Enable follower fetching
        :param Sequence['KafkaKafkaUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'KafkaKafkaUserConfigKafkaArgs' kafka: Kafka broker configuration values
        :param 'KafkaKafkaUserConfigKafkaAuthenticationMethodsArgs' kafka_authentication_methods: Kafka authentication methods
        :param builtins.bool kafka_connect: Enable Kafka Connect service. Default: `false`.
        :param 'KafkaKafkaUserConfigKafkaConnectConfigArgs' kafka_connect_config: Kafka Connect configuration values
        :param Sequence['KafkaKafkaUserConfigKafkaConnectPluginVersionArgs'] kafka_connect_plugin_versions: The plugin selected by the user
        :param builtins.bool kafka_rest: Enable Kafka-REST service. Default: `false`.
        :param builtins.bool kafka_rest_authorization: Enable authorization in Kafka-REST service.
        :param 'KafkaKafkaUserConfigKafkaRestConfigArgs' kafka_rest_config: Kafka REST configuration
        :param 'KafkaKafkaUserConfigKafkaSaslMechanismsArgs' kafka_sasl_mechanisms: Kafka SASL mechanisms
        :param builtins.str kafka_version: Enum: `3.1`, `3.2`, `3.3`, `3.4`, `3.5`, `3.6`, `3.7`, `3.8`, `3.9`, and newer. Kafka major version.
        :param builtins.bool letsencrypt_sasl_privatelink: Use Letsencrypt CA for Kafka SASL via Privatelink.
        :param 'KafkaKafkaUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'KafkaKafkaUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param 'KafkaKafkaUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.bool schema_registry: Enable Schema-Registry service. Default: `false`.
        :param 'KafkaKafkaUserConfigSchemaRegistryConfigArgs' schema_registry_config: Schema Registry configuration
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param 'KafkaKafkaUserConfigSingleZoneArgs' single_zone: Single-zone configuration
        :param builtins.bool static_ips: Use static public IP addresses.
        :param 'KafkaKafkaUserConfigTieredStorageArgs' tiered_storage: Tiered storage configuration
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if aiven_kafka_topic_messages is not None:
            pulumi.set(__self__, "aiven_kafka_topic_messages", aiven_kafka_topic_messages)
        if custom_domain is not None:
            pulumi.set(__self__, "custom_domain", custom_domain)
        if follower_fetching is not None:
            pulumi.set(__self__, "follower_fetching", follower_fetching)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if kafka is not None:
            pulumi.set(__self__, "kafka", kafka)
        if kafka_authentication_methods is not None:
            pulumi.set(__self__, "kafka_authentication_methods", kafka_authentication_methods)
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)
        if kafka_connect_config is not None:
            pulumi.set(__self__, "kafka_connect_config", kafka_connect_config)
        if kafka_connect_plugin_versions is not None:
            pulumi.set(__self__, "kafka_connect_plugin_versions", kafka_connect_plugin_versions)
        if kafka_connect_secret_providers is not None:
            pulumi.set(__self__, "kafka_connect_secret_providers", kafka_connect_secret_providers)
        if kafka_rest is not None:
            pulumi.set(__self__, "kafka_rest", kafka_rest)
        if kafka_rest_authorization is not None:
            pulumi.set(__self__, "kafka_rest_authorization", kafka_rest_authorization)
        if kafka_rest_config is not None:
            pulumi.set(__self__, "kafka_rest_config", kafka_rest_config)
        if kafka_sasl_mechanisms is not None:
            pulumi.set(__self__, "kafka_sasl_mechanisms", kafka_sasl_mechanisms)
        if kafka_version is not None:
            pulumi.set(__self__, "kafka_version", kafka_version)
        if letsencrypt_sasl_privatelink is not None:
            pulumi.set(__self__, "letsencrypt_sasl_privatelink", letsencrypt_sasl_privatelink)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if schema_registry is not None:
            pulumi.set(__self__, "schema_registry", schema_registry)
        if schema_registry_config is not None:
            pulumi.set(__self__, "schema_registry_config", schema_registry_config)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if single_zone is not None:
            pulumi.set(__self__, "single_zone", single_zone)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)
        if tiered_storage is not None:
            pulumi.set(__self__, "tiered_storage", tiered_storage)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    @_utilities.deprecated("""This property is deprecated.""")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="aivenKafkaTopicMessages")
    def aiven_kafka_topic_messages(self) -> Optional[builtins.bool]:
        """
        Allow access to read Kafka topic messages in the Aiven Console and REST API.
        """
        return pulumi.get(self, "aiven_kafka_topic_messages")

    @property
    @pulumi.getter(name="customDomain")
    def custom_domain(self) -> Optional[builtins.str]:
        """
        Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        """
        return pulumi.get(self, "custom_domain")

    @property
    @pulumi.getter(name="followerFetching")
    def follower_fetching(self) -> Optional['outputs.KafkaKafkaUserConfigFollowerFetching']:
        """
        Enable follower fetching
        """
        return pulumi.get(self, "follower_fetching")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.KafkaKafkaUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter
    def kafka(self) -> Optional['outputs.KafkaKafkaUserConfigKafka']:
        """
        Kafka broker configuration values
        """
        return pulumi.get(self, "kafka")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethods")
    def kafka_authentication_methods(self) -> Optional['outputs.KafkaKafkaUserConfigKafkaAuthenticationMethods']:
        """
        Kafka authentication methods
        """
        return pulumi.get(self, "kafka_authentication_methods")

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional[builtins.bool]:
        """
        Enable Kafka Connect service. Default: `false`.
        """
        return pulumi.get(self, "kafka_connect")

    @property
    @pulumi.getter(name="kafkaConnectConfig")
    def kafka_connect_config(self) -> Optional['outputs.KafkaKafkaUserConfigKafkaConnectConfig']:
        """
        Kafka Connect configuration values
        """
        return pulumi.get(self, "kafka_connect_config")

    @property
    @pulumi.getter(name="kafkaConnectPluginVersions")
    def kafka_connect_plugin_versions(self) -> Optional[Sequence['outputs.KafkaKafkaUserConfigKafkaConnectPluginVersion']]:
        """
        The plugin selected by the user
        """
        return pulumi.get(self, "kafka_connect_plugin_versions")

    @property
    @pulumi.getter(name="kafkaConnectSecretProviders")
    def kafka_connect_secret_providers(self) -> Optional[Sequence['outputs.KafkaKafkaUserConfigKafkaConnectSecretProvider']]:
        return pulumi.get(self, "kafka_connect_secret_providers")

    @property
    @pulumi.getter(name="kafkaRest")
    def kafka_rest(self) -> Optional[builtins.bool]:
        """
        Enable Kafka-REST service. Default: `false`.
        """
        return pulumi.get(self, "kafka_rest")

    @property
    @pulumi.getter(name="kafkaRestAuthorization")
    def kafka_rest_authorization(self) -> Optional[builtins.bool]:
        """
        Enable authorization in Kafka-REST service.
        """
        return pulumi.get(self, "kafka_rest_authorization")

    @property
    @pulumi.getter(name="kafkaRestConfig")
    def kafka_rest_config(self) -> Optional['outputs.KafkaKafkaUserConfigKafkaRestConfig']:
        """
        Kafka REST configuration
        """
        return pulumi.get(self, "kafka_rest_config")

    @property
    @pulumi.getter(name="kafkaSaslMechanisms")
    def kafka_sasl_mechanisms(self) -> Optional['outputs.KafkaKafkaUserConfigKafkaSaslMechanisms']:
        """
        Kafka SASL mechanisms
        """
        return pulumi.get(self, "kafka_sasl_mechanisms")

    @property
    @pulumi.getter(name="kafkaVersion")
    def kafka_version(self) -> Optional[builtins.str]:
        """
        Enum: `3.1`, `3.2`, `3.3`, `3.4`, `3.5`, `3.6`, `3.7`, `3.8`, `3.9`, and newer. Kafka major version.
        """
        return pulumi.get(self, "kafka_version")

    @property
    @pulumi.getter(name="letsencryptSaslPrivatelink")
    def letsencrypt_sasl_privatelink(self) -> Optional[builtins.bool]:
        """
        Use Letsencrypt CA for Kafka SASL via Privatelink.
        """
        return pulumi.get(self, "letsencrypt_sasl_privatelink")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.KafkaKafkaUserConfigPrivateAccess']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.KafkaKafkaUserConfigPrivatelinkAccess']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.KafkaKafkaUserConfigPublicAccess']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="schemaRegistry")
    def schema_registry(self) -> Optional[builtins.bool]:
        """
        Enable Schema-Registry service. Default: `false`.
        """
        return pulumi.get(self, "schema_registry")

    @property
    @pulumi.getter(name="schemaRegistryConfig")
    def schema_registry_config(self) -> Optional['outputs.KafkaKafkaUserConfigSchemaRegistryConfig']:
        """
        Schema Registry configuration
        """
        return pulumi.get(self, "schema_registry_config")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="singleZone")
    def single_zone(self) -> Optional['outputs.KafkaKafkaUserConfigSingleZone']:
        """
        Single-zone configuration
        """
        return pulumi.get(self, "single_zone")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")

    @property
    @pulumi.getter(name="tieredStorage")
    def tiered_storage(self) -> Optional['outputs.KafkaKafkaUserConfigTieredStorage']:
        """
        Tiered storage configuration
        """
        return pulumi.get(self, "tiered_storage")


@pulumi.output_type
class KafkaKafkaUserConfigFollowerFetching(dict):
    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None):
        """
        :param builtins.bool enabled: Whether to enable the follower fetching functionality.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[builtins.bool]:
        """
        Whether to enable the follower fetching functionality.
        """
        return pulumi.get(self, "enabled")


@pulumi.output_type
class KafkaKafkaUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class KafkaKafkaUserConfigKafka(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "autoCreateTopicsEnable":
            suggest = "auto_create_topics_enable"
        elif key == "compressionType":
            suggest = "compression_type"
        elif key == "connectionsMaxIdleMs":
            suggest = "connections_max_idle_ms"
        elif key == "defaultReplicationFactor":
            suggest = "default_replication_factor"
        elif key == "groupInitialRebalanceDelayMs":
            suggest = "group_initial_rebalance_delay_ms"
        elif key == "groupMaxSessionTimeoutMs":
            suggest = "group_max_session_timeout_ms"
        elif key == "groupMinSessionTimeoutMs":
            suggest = "group_min_session_timeout_ms"
        elif key == "logCleanerDeleteRetentionMs":
            suggest = "log_cleaner_delete_retention_ms"
        elif key == "logCleanerMaxCompactionLagMs":
            suggest = "log_cleaner_max_compaction_lag_ms"
        elif key == "logCleanerMinCleanableRatio":
            suggest = "log_cleaner_min_cleanable_ratio"
        elif key == "logCleanerMinCompactionLagMs":
            suggest = "log_cleaner_min_compaction_lag_ms"
        elif key == "logCleanupPolicy":
            suggest = "log_cleanup_policy"
        elif key == "logFlushIntervalMessages":
            suggest = "log_flush_interval_messages"
        elif key == "logFlushIntervalMs":
            suggest = "log_flush_interval_ms"
        elif key == "logIndexIntervalBytes":
            suggest = "log_index_interval_bytes"
        elif key == "logIndexSizeMaxBytes":
            suggest = "log_index_size_max_bytes"
        elif key == "logLocalRetentionBytes":
            suggest = "log_local_retention_bytes"
        elif key == "logLocalRetentionMs":
            suggest = "log_local_retention_ms"
        elif key == "logMessageDownconversionEnable":
            suggest = "log_message_downconversion_enable"
        elif key == "logMessageTimestampDifferenceMaxMs":
            suggest = "log_message_timestamp_difference_max_ms"
        elif key == "logMessageTimestampType":
            suggest = "log_message_timestamp_type"
        elif key == "logPreallocate":
            suggest = "log_preallocate"
        elif key == "logRetentionBytes":
            suggest = "log_retention_bytes"
        elif key == "logRetentionHours":
            suggest = "log_retention_hours"
        elif key == "logRetentionMs":
            suggest = "log_retention_ms"
        elif key == "logRollJitterMs":
            suggest = "log_roll_jitter_ms"
        elif key == "logRollMs":
            suggest = "log_roll_ms"
        elif key == "logSegmentBytes":
            suggest = "log_segment_bytes"
        elif key == "logSegmentDeleteDelayMs":
            suggest = "log_segment_delete_delay_ms"
        elif key == "maxConnectionsPerIp":
            suggest = "max_connections_per_ip"
        elif key == "maxIncrementalFetchSessionCacheSlots":
            suggest = "max_incremental_fetch_session_cache_slots"
        elif key == "messageMaxBytes":
            suggest = "message_max_bytes"
        elif key == "minInsyncReplicas":
            suggest = "min_insync_replicas"
        elif key == "numPartitions":
            suggest = "num_partitions"
        elif key == "offsetsRetentionMinutes":
            suggest = "offsets_retention_minutes"
        elif key == "producerPurgatoryPurgeIntervalRequests":
            suggest = "producer_purgatory_purge_interval_requests"
        elif key == "replicaFetchMaxBytes":
            suggest = "replica_fetch_max_bytes"
        elif key == "replicaFetchResponseMaxBytes":
            suggest = "replica_fetch_response_max_bytes"
        elif key == "saslOauthbearerExpectedAudience":
            suggest = "sasl_oauthbearer_expected_audience"
        elif key == "saslOauthbearerExpectedIssuer":
            suggest = "sasl_oauthbearer_expected_issuer"
        elif key == "saslOauthbearerJwksEndpointUrl":
            suggest = "sasl_oauthbearer_jwks_endpoint_url"
        elif key == "saslOauthbearerSubClaimName":
            suggest = "sasl_oauthbearer_sub_claim_name"
        elif key == "socketRequestMaxBytes":
            suggest = "socket_request_max_bytes"
        elif key == "transactionPartitionVerificationEnable":
            suggest = "transaction_partition_verification_enable"
        elif key == "transactionRemoveExpiredTransactionCleanupIntervalMs":
            suggest = "transaction_remove_expired_transaction_cleanup_interval_ms"
        elif key == "transactionStateLogSegmentBytes":
            suggest = "transaction_state_log_segment_bytes"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaKafkaUserConfigKafka. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaKafkaUserConfigKafka.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaKafkaUserConfigKafka.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 auto_create_topics_enable: Optional[builtins.bool] = None,
                 compression_type: Optional[builtins.str] = None,
                 connections_max_idle_ms: Optional[builtins.int] = None,
                 default_replication_factor: Optional[builtins.int] = None,
                 group_initial_rebalance_delay_ms: Optional[builtins.int] = None,
                 group_max_session_timeout_ms: Optional[builtins.int] = None,
                 group_min_session_timeout_ms: Optional[builtins.int] = None,
                 log_cleaner_delete_retention_ms: Optional[builtins.int] = None,
                 log_cleaner_max_compaction_lag_ms: Optional[builtins.int] = None,
                 log_cleaner_min_cleanable_ratio: Optional[builtins.float] = None,
                 log_cleaner_min_compaction_lag_ms: Optional[builtins.int] = None,
                 log_cleanup_policy: Optional[builtins.str] = None,
                 log_flush_interval_messages: Optional[builtins.int] = None,
                 log_flush_interval_ms: Optional[builtins.int] = None,
                 log_index_interval_bytes: Optional[builtins.int] = None,
                 log_index_size_max_bytes: Optional[builtins.int] = None,
                 log_local_retention_bytes: Optional[builtins.int] = None,
                 log_local_retention_ms: Optional[builtins.int] = None,
                 log_message_downconversion_enable: Optional[builtins.bool] = None,
                 log_message_timestamp_difference_max_ms: Optional[builtins.int] = None,
                 log_message_timestamp_type: Optional[builtins.str] = None,
                 log_preallocate: Optional[builtins.bool] = None,
                 log_retention_bytes: Optional[builtins.int] = None,
                 log_retention_hours: Optional[builtins.int] = None,
                 log_retention_ms: Optional[builtins.int] = None,
                 log_roll_jitter_ms: Optional[builtins.int] = None,
                 log_roll_ms: Optional[builtins.int] = None,
                 log_segment_bytes: Optional[builtins.int] = None,
                 log_segment_delete_delay_ms: Optional[builtins.int] = None,
                 max_connections_per_ip: Optional[builtins.int] = None,
                 max_incremental_fetch_session_cache_slots: Optional[builtins.int] = None,
                 message_max_bytes: Optional[builtins.int] = None,
                 min_insync_replicas: Optional[builtins.int] = None,
                 num_partitions: Optional[builtins.int] = None,
                 offsets_retention_minutes: Optional[builtins.int] = None,
                 producer_purgatory_purge_interval_requests: Optional[builtins.int] = None,
                 replica_fetch_max_bytes: Optional[builtins.int] = None,
                 replica_fetch_response_max_bytes: Optional[builtins.int] = None,
                 sasl_oauthbearer_expected_audience: Optional[builtins.str] = None,
                 sasl_oauthbearer_expected_issuer: Optional[builtins.str] = None,
                 sasl_oauthbearer_jwks_endpoint_url: Optional[builtins.str] = None,
                 sasl_oauthbearer_sub_claim_name: Optional[builtins.str] = None,
                 socket_request_max_bytes: Optional[builtins.int] = None,
                 transaction_partition_verification_enable: Optional[builtins.bool] = None,
                 transaction_remove_expired_transaction_cleanup_interval_ms: Optional[builtins.int] = None,
                 transaction_state_log_segment_bytes: Optional[builtins.int] = None):
        """
        :param builtins.bool auto_create_topics_enable: Enable auto-creation of topics. (Default: true).
        :param builtins.str compression_type: Enum: `gzip`, `lz4`, `producer`, `snappy`, `uncompressed`, `zstd`. Specify the final compression type for a given topic. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `uncompressed` which is equivalent to no compression; and `producer` which means retain the original compression codec set by the producer.(Default: producer).
        :param builtins.int connections_max_idle_ms: Idle connections timeout: the server socket processor threads close the connections that idle for longer than this. (Default: 600000 ms (10 minutes)). Example: `540000`.
        :param builtins.int default_replication_factor: Replication factor for auto-created topics (Default: 3).
        :param builtins.int group_initial_rebalance_delay_ms: The amount of time, in milliseconds, the group coordinator will wait for more consumers to join a new group before performing the first rebalance. A longer delay means potentially fewer rebalances, but increases the time until processing begins. The default value for this is 3 seconds. During development and testing it might be desirable to set this to 0 in order to not delay test execution time. (Default: 3000 ms (3 seconds)). Example: `3000`.
        :param builtins.int group_max_session_timeout_ms: The maximum allowed session timeout for registered consumers. Longer timeouts give consumers more time to process messages in between heartbeats at the cost of a longer time to detect failures. Default: 1800000 ms (30 minutes). Example: `1800000`.
        :param builtins.int group_min_session_timeout_ms: The minimum allowed session timeout for registered consumers. Longer timeouts give consumers more time to process messages in between heartbeats at the cost of a longer time to detect failures. (Default: 6000 ms (6 seconds)). Example: `6000`.
        :param builtins.int log_cleaner_delete_retention_ms: How long are delete records retained? (Default: 86400000 (1 day)). Example: `86400000`.
        :param builtins.int log_cleaner_max_compaction_lag_ms: The maximum amount of time message will remain uncompacted. Only applicable for logs that are being compacted. (Default: 9223372036854775807 ms (Long.MAX_VALUE)).
        :param builtins.float log_cleaner_min_cleanable_ratio: Controls log compactor frequency. Larger value means more frequent compactions but also more space wasted for logs. Consider setting log.cleaner.max.compaction.lag.ms to enforce compactions sooner, instead of setting a very high value for this option. (Default: 0.5). Example: `0.5`.
        :param builtins.int log_cleaner_min_compaction_lag_ms: The minimum time a message will remain uncompacted in the log. Only applicable for logs that are being compacted. (Default: 0 ms).
        :param builtins.str log_cleanup_policy: Enum: `compact`, `compact,delete`, `delete`. The default cleanup policy for segments beyond the retention window (Default: delete).
        :param builtins.int log_flush_interval_messages: The number of messages accumulated on a log partition before messages are flushed to disk (Default: 9223372036854775807 (Long.MAX_VALUE)).
        :param builtins.int log_flush_interval_ms: The maximum time in ms that a message in any topic is kept in memory (page-cache) before flushed to disk. If not set, the value in log.flush.scheduler.interval.ms is used (Default: null).
        :param builtins.int log_index_interval_bytes: The interval with which Kafka adds an entry to the offset index (Default: 4096 bytes (4 kibibytes)). Example: `4096`.
        :param builtins.int log_index_size_max_bytes: The maximum size in bytes of the offset index (Default: 10485760 (10 mebibytes)). Example: `10485760`.
        :param builtins.int log_local_retention_bytes: The maximum size of local log segments that can grow for a partition before it gets eligible for deletion. If set to -2, the value of log.retention.bytes is used. The effective value should always be less than or equal to log.retention.bytes value. (Default: -2).
        :param builtins.int log_local_retention_ms: The number of milliseconds to keep the local log segments before it gets eligible for deletion. If set to -2, the value of log.retention.ms is used. The effective value should always be less than or equal to log.retention.ms value. (Default: -2).
        :param builtins.bool log_message_downconversion_enable: This configuration controls whether down-conversion of message formats is enabled to satisfy consume requests. (Default: true).
        :param builtins.int log_message_timestamp_difference_max_ms: The maximum difference allowed between the timestamp when a broker receives a message and the timestamp specified in the message (Default: 9223372036854775807 (Long.MAX_VALUE)).
        :param builtins.str log_message_timestamp_type: Enum: `CreateTime`, `LogAppendTime`. Define whether the timestamp in the message is message create time or log append time. (Default: CreateTime).
        :param builtins.bool log_preallocate: Should pre allocate file when create new segment? (Default: false).
        :param builtins.int log_retention_bytes: The maximum size of the log before deleting messages (Default: -1).
        :param builtins.int log_retention_hours: The number of hours to keep a log file before deleting it (Default: 168 hours (1 week)).
        :param builtins.int log_retention_ms: The number of milliseconds to keep a log file before deleting it (in milliseconds), If not set, the value in log.retention.minutes is used. If set to -1, no time limit is applied. (Default: null, log.retention.hours applies).
        :param builtins.int log_roll_jitter_ms: The maximum jitter to subtract from logRollTimeMillis (in milliseconds). If not set, the value in log.roll.jitter.hours is used (Default: null).
        :param builtins.int log_roll_ms: The maximum time before a new log segment is rolled out (in milliseconds). (Default: null, log.roll.hours applies (Default: 168, 7 days)).
        :param builtins.int log_segment_bytes: The maximum size of a single log file (Default: 1073741824 bytes (1 gibibyte)).
        :param builtins.int log_segment_delete_delay_ms: The amount of time to wait before deleting a file from the filesystem (Default: 60000 ms (1 minute)). Example: `60000`.
        :param builtins.int max_connections_per_ip: The maximum number of connections allowed from each ip address (Default: 2147483647).
        :param builtins.int max_incremental_fetch_session_cache_slots: The maximum number of incremental fetch sessions that the broker will maintain. (Default: 1000). Example: `1000`.
        :param builtins.int message_max_bytes: The maximum size of message that the server can receive. (Default: 1048588 bytes (1 mebibyte + 12 bytes)). Example: `1048588`.
        :param builtins.int min_insync_replicas: When a producer sets acks to `all` (or `-1`), min.insync.replicas specifies the minimum number of replicas that must acknowledge a write for the write to be considered successful. (Default: 1). Example: `1`.
        :param builtins.int num_partitions: Number of partitions for auto-created topics (Default: 1).
        :param builtins.int offsets_retention_minutes: Log retention window in minutes for offsets topic (Default: 10080 minutes (7 days)). Example: `10080`.
        :param builtins.int producer_purgatory_purge_interval_requests: The purge interval (in number of requests) of the producer request purgatory (Default: 1000).
        :param builtins.int replica_fetch_max_bytes: The number of bytes of messages to attempt to fetch for each partition . This is not an absolute maximum, if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that progress can be made. (Default: 1048576 bytes (1 mebibytes)).
        :param builtins.int replica_fetch_response_max_bytes: Maximum bytes expected for the entire fetch response. Records are fetched in batches, and if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that progress can be made. As such, this is not an absolute maximum. (Default: 10485760 bytes (10 mebibytes)).
        :param builtins.str sasl_oauthbearer_expected_audience: The (optional) comma-delimited setting for the broker to use to verify that the JWT was issued for one of the expected audiences. (Default: null).
        :param builtins.str sasl_oauthbearer_expected_issuer: Optional setting for the broker to use to verify that the JWT was created by the expected issuer.(Default: null).
        :param builtins.str sasl_oauthbearer_jwks_endpoint_url: OIDC JWKS endpoint URL. By setting this the SASL SSL OAuth2/OIDC authentication is enabled. See also other options for SASL OAuth2/OIDC. (Default: null).
        :param builtins.str sasl_oauthbearer_sub_claim_name: Name of the scope from which to extract the subject claim from the JWT.(Default: sub).
        :param builtins.int socket_request_max_bytes: The maximum number of bytes in a socket request (Default: 104857600 bytes).
        :param builtins.bool transaction_partition_verification_enable: Enable verification that checks that the partition has been added to the transaction before writing transactional records to the partition. (Default: true).
        :param builtins.int transaction_remove_expired_transaction_cleanup_interval_ms: The interval at which to remove transactions that have expired due to transactional.id.expiration.ms passing (Default: 3600000 ms (1 hour)). Example: `3600000`.
        :param builtins.int transaction_state_log_segment_bytes: The transaction topic segment bytes should be kept relatively small in order to facilitate faster log compaction and cache loads (Default: 104857600 bytes (100 mebibytes)). Example: `104857600`.
        """
        if auto_create_topics_enable is not None:
            pulumi.set(__self__, "auto_create_topics_enable", auto_create_topics_enable)
        if compression_type is not None:
            pulumi.set(__self__, "compression_type", compression_type)
        if connections_max_idle_ms is not None:
            pulumi.set(__self__, "connections_max_idle_ms", connections_max_idle_ms)
        if default_replication_factor is not None:
            pulumi.set(__self__, "default_replication_factor", default_replication_factor)
        if group_initial_rebalance_delay_ms is not None:
            pulumi.set(__self__, "group_initial_rebalance_delay_ms", group_initial_rebalance_delay_ms)
        if group_max_session_timeout_ms is not None:
            pulumi.set(__self__, "group_max_session_timeout_ms", group_max_session_timeout_ms)
        if group_min_session_timeout_ms is not None:
            pulumi.set(__self__, "group_min_session_timeout_ms", group_min_session_timeout_ms)
        if log_cleaner_delete_retention_ms is not None:
            pulumi.set(__self__, "log_cleaner_delete_retention_ms", log_cleaner_delete_retention_ms)
        if log_cleaner_max_compaction_lag_ms is not None:
            pulumi.set(__self__, "log_cleaner_max_compaction_lag_ms", log_cleaner_max_compaction_lag_ms)
        if log_cleaner_min_cleanable_ratio is not None:
            pulumi.set(__self__, "log_cleaner_min_cleanable_ratio", log_cleaner_min_cleanable_ratio)
        if log_cleaner_min_compaction_lag_ms is not None:
            pulumi.set(__self__, "log_cleaner_min_compaction_lag_ms", log_cleaner_min_compaction_lag_ms)
        if log_cleanup_policy is not None:
            pulumi.set(__self__, "log_cleanup_policy", log_cleanup_policy)
        if log_flush_interval_messages is not None:
            pulumi.set(__self__, "log_flush_interval_messages", log_flush_interval_messages)
        if log_flush_interval_ms is not None:
            pulumi.set(__self__, "log_flush_interval_ms", log_flush_interval_ms)
        if log_index_interval_bytes is not None:
            pulumi.set(__self__, "log_index_interval_bytes", log_index_interval_bytes)
        if log_index_size_max_bytes is not None:
            pulumi.set(__self__, "log_index_size_max_bytes", log_index_size_max_bytes)
        if log_local_retention_bytes is not None:
            pulumi.set(__self__, "log_local_retention_bytes", log_local_retention_bytes)
        if log_local_retention_ms is not None:
            pulumi.set(__self__, "log_local_retention_ms", log_local_retention_ms)
        if log_message_downconversion_enable is not None:
            pulumi.set(__self__, "log_message_downconversion_enable", log_message_downconversion_enable)
        if log_message_timestamp_difference_max_ms is not None:
            pulumi.set(__self__, "log_message_timestamp_difference_max_ms", log_message_timestamp_difference_max_ms)
        if log_message_timestamp_type is not None:
            pulumi.set(__self__, "log_message_timestamp_type", log_message_timestamp_type)
        if log_preallocate is not None:
            pulumi.set(__self__, "log_preallocate", log_preallocate)
        if log_retention_bytes is not None:
            pulumi.set(__self__, "log_retention_bytes", log_retention_bytes)
        if log_retention_hours is not None:
            pulumi.set(__self__, "log_retention_hours", log_retention_hours)
        if log_retention_ms is not None:
            pulumi.set(__self__, "log_retention_ms", log_retention_ms)
        if log_roll_jitter_ms is not None:
            pulumi.set(__self__, "log_roll_jitter_ms", log_roll_jitter_ms)
        if log_roll_ms is not None:
            pulumi.set(__self__, "log_roll_ms", log_roll_ms)
        if log_segment_bytes is not None:
            pulumi.set(__self__, "log_segment_bytes", log_segment_bytes)
        if log_segment_delete_delay_ms is not None:
            pulumi.set(__self__, "log_segment_delete_delay_ms", log_segment_delete_delay_ms)
        if max_connections_per_ip is not None:
            pulumi.set(__self__, "max_connections_per_ip", max_connections_per_ip)
        if max_incremental_fetch_session_cache_slots is not None:
            pulumi.set(__self__, "max_incremental_fetch_session_cache_slots", max_incremental_fetch_session_cache_slots)
        if message_max_bytes is not None:
            pulumi.set(__self__, "message_max_bytes", message_max_bytes)
        if min_insync_replicas is not None:
            pulumi.set(__self__, "min_insync_replicas", min_insync_replicas)
        if num_partitions is not None:
            pulumi.set(__self__, "num_partitions", num_partitions)
        if offsets_retention_minutes is not None:
            pulumi.set(__self__, "offsets_retention_minutes", offsets_retention_minutes)
        if producer_purgatory_purge_interval_requests is not None:
            pulumi.set(__self__, "producer_purgatory_purge_interval_requests", producer_purgatory_purge_interval_requests)
        if replica_fetch_max_bytes is not None:
            pulumi.set(__self__, "replica_fetch_max_bytes", replica_fetch_max_bytes)
        if replica_fetch_response_max_bytes is not None:
            pulumi.set(__self__, "replica_fetch_response_max_bytes", replica_fetch_response_max_bytes)
        if sasl_oauthbearer_expected_audience is not None:
            pulumi.set(__self__, "sasl_oauthbearer_expected_audience", sasl_oauthbearer_expected_audience)
        if sasl_oauthbearer_expected_issuer is not None:
            pulumi.set(__self__, "sasl_oauthbearer_expected_issuer", sasl_oauthbearer_expected_issuer)
        if sasl_oauthbearer_jwks_endpoint_url is not None:
            pulumi.set(__self__, "sasl_oauthbearer_jwks_endpoint_url", sasl_oauthbearer_jwks_endpoint_url)
        if sasl_oauthbearer_sub_claim_name is not None:
            pulumi.set(__self__, "sasl_oauthbearer_sub_claim_name", sasl_oauthbearer_sub_claim_name)
        if socket_request_max_bytes is not None:
            pulumi.set(__self__, "socket_request_max_bytes", socket_request_max_bytes)
        if transaction_partition_verification_enable is not None:
            pulumi.set(__self__, "transaction_partition_verification_enable", transaction_partition_verification_enable)
        if transaction_remove_expired_transaction_cleanup_interval_ms is not None:
            pulumi.set(__self__, "transaction_remove_expired_transaction_cleanup_interval_ms", transaction_remove_expired_transaction_cleanup_interval_ms)
        if transaction_state_log_segment_bytes is not None:
            pulumi.set(__self__, "transaction_state_log_segment_bytes", transaction_state_log_segment_bytes)

    @property
    @pulumi.getter(name="autoCreateTopicsEnable")
    def auto_create_topics_enable(self) -> Optional[builtins.bool]:
        """
        Enable auto-creation of topics. (Default: true).
        """
        return pulumi.get(self, "auto_create_topics_enable")

    @property
    @pulumi.getter(name="compressionType")
    def compression_type(self) -> Optional[builtins.str]:
        """
        Enum: `gzip`, `lz4`, `producer`, `snappy`, `uncompressed`, `zstd`. Specify the final compression type for a given topic. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `uncompressed` which is equivalent to no compression; and `producer` which means retain the original compression codec set by the producer.(Default: producer).
        """
        return pulumi.get(self, "compression_type")

    @property
    @pulumi.getter(name="connectionsMaxIdleMs")
    def connections_max_idle_ms(self) -> Optional[builtins.int]:
        """
        Idle connections timeout: the server socket processor threads close the connections that idle for longer than this. (Default: 600000 ms (10 minutes)). Example: `540000`.
        """
        return pulumi.get(self, "connections_max_idle_ms")

    @property
    @pulumi.getter(name="defaultReplicationFactor")
    def default_replication_factor(self) -> Optional[builtins.int]:
        """
        Replication factor for auto-created topics (Default: 3).
        """
        return pulumi.get(self, "default_replication_factor")

    @property
    @pulumi.getter(name="groupInitialRebalanceDelayMs")
    def group_initial_rebalance_delay_ms(self) -> Optional[builtins.int]:
        """
        The amount of time, in milliseconds, the group coordinator will wait for more consumers to join a new group before performing the first rebalance. A longer delay means potentially fewer rebalances, but increases the time until processing begins. The default value for this is 3 seconds. During development and testing it might be desirable to set this to 0 in order to not delay test execution time. (Default: 3000 ms (3 seconds)). Example: `3000`.
        """
        return pulumi.get(self, "group_initial_rebalance_delay_ms")

    @property
    @pulumi.getter(name="groupMaxSessionTimeoutMs")
    def group_max_session_timeout_ms(self) -> Optional[builtins.int]:
        """
        The maximum allowed session timeout for registered consumers. Longer timeouts give consumers more time to process messages in between heartbeats at the cost of a longer time to detect failures. Default: 1800000 ms (30 minutes). Example: `1800000`.
        """
        return pulumi.get(self, "group_max_session_timeout_ms")

    @property
    @pulumi.getter(name="groupMinSessionTimeoutMs")
    def group_min_session_timeout_ms(self) -> Optional[builtins.int]:
        """
        The minimum allowed session timeout for registered consumers. Longer timeouts give consumers more time to process messages in between heartbeats at the cost of a longer time to detect failures. (Default: 6000 ms (6 seconds)). Example: `6000`.
        """
        return pulumi.get(self, "group_min_session_timeout_ms")

    @property
    @pulumi.getter(name="logCleanerDeleteRetentionMs")
    def log_cleaner_delete_retention_ms(self) -> Optional[builtins.int]:
        """
        How long are delete records retained? (Default: 86400000 (1 day)). Example: `86400000`.
        """
        return pulumi.get(self, "log_cleaner_delete_retention_ms")

    @property
    @pulumi.getter(name="logCleanerMaxCompactionLagMs")
    def log_cleaner_max_compaction_lag_ms(self) -> Optional[builtins.int]:
        """
        The maximum amount of time message will remain uncompacted. Only applicable for logs that are being compacted. (Default: 9223372036854775807 ms (Long.MAX_VALUE)).
        """
        return pulumi.get(self, "log_cleaner_max_compaction_lag_ms")

    @property
    @pulumi.getter(name="logCleanerMinCleanableRatio")
    def log_cleaner_min_cleanable_ratio(self) -> Optional[builtins.float]:
        """
        Controls log compactor frequency. Larger value means more frequent compactions but also more space wasted for logs. Consider setting log.cleaner.max.compaction.lag.ms to enforce compactions sooner, instead of setting a very high value for this option. (Default: 0.5). Example: `0.5`.
        """
        return pulumi.get(self, "log_cleaner_min_cleanable_ratio")

    @property
    @pulumi.getter(name="logCleanerMinCompactionLagMs")
    def log_cleaner_min_compaction_lag_ms(self) -> Optional[builtins.int]:
        """
        The minimum time a message will remain uncompacted in the log. Only applicable for logs that are being compacted. (Default: 0 ms).
        """
        return pulumi.get(self, "log_cleaner_min_compaction_lag_ms")

    @property
    @pulumi.getter(name="logCleanupPolicy")
    def log_cleanup_policy(self) -> Optional[builtins.str]:
        """
        Enum: `compact`, `compact,delete`, `delete`. The default cleanup policy for segments beyond the retention window (Default: delete).
        """
        return pulumi.get(self, "log_cleanup_policy")

    @property
    @pulumi.getter(name="logFlushIntervalMessages")
    def log_flush_interval_messages(self) -> Optional[builtins.int]:
        """
        The number of messages accumulated on a log partition before messages are flushed to disk (Default: 9223372036854775807 (Long.MAX_VALUE)).
        """
        return pulumi.get(self, "log_flush_interval_messages")

    @property
    @pulumi.getter(name="logFlushIntervalMs")
    def log_flush_interval_ms(self) -> Optional[builtins.int]:
        """
        The maximum time in ms that a message in any topic is kept in memory (page-cache) before flushed to disk. If not set, the value in log.flush.scheduler.interval.ms is used (Default: null).
        """
        return pulumi.get(self, "log_flush_interval_ms")

    @property
    @pulumi.getter(name="logIndexIntervalBytes")
    def log_index_interval_bytes(self) -> Optional[builtins.int]:
        """
        The interval with which Kafka adds an entry to the offset index (Default: 4096 bytes (4 kibibytes)). Example: `4096`.
        """
        return pulumi.get(self, "log_index_interval_bytes")

    @property
    @pulumi.getter(name="logIndexSizeMaxBytes")
    def log_index_size_max_bytes(self) -> Optional[builtins.int]:
        """
        The maximum size in bytes of the offset index (Default: 10485760 (10 mebibytes)). Example: `10485760`.
        """
        return pulumi.get(self, "log_index_size_max_bytes")

    @property
    @pulumi.getter(name="logLocalRetentionBytes")
    def log_local_retention_bytes(self) -> Optional[builtins.int]:
        """
        The maximum size of local log segments that can grow for a partition before it gets eligible for deletion. If set to -2, the value of log.retention.bytes is used. The effective value should always be less than or equal to log.retention.bytes value. (Default: -2).
        """
        return pulumi.get(self, "log_local_retention_bytes")

    @property
    @pulumi.getter(name="logLocalRetentionMs")
    def log_local_retention_ms(self) -> Optional[builtins.int]:
        """
        The number of milliseconds to keep the local log segments before it gets eligible for deletion. If set to -2, the value of log.retention.ms is used. The effective value should always be less than or equal to log.retention.ms value. (Default: -2).
        """
        return pulumi.get(self, "log_local_retention_ms")

    @property
    @pulumi.getter(name="logMessageDownconversionEnable")
    def log_message_downconversion_enable(self) -> Optional[builtins.bool]:
        """
        This configuration controls whether down-conversion of message formats is enabled to satisfy consume requests. (Default: true).
        """
        return pulumi.get(self, "log_message_downconversion_enable")

    @property
    @pulumi.getter(name="logMessageTimestampDifferenceMaxMs")
    def log_message_timestamp_difference_max_ms(self) -> Optional[builtins.int]:
        """
        The maximum difference allowed between the timestamp when a broker receives a message and the timestamp specified in the message (Default: 9223372036854775807 (Long.MAX_VALUE)).
        """
        return pulumi.get(self, "log_message_timestamp_difference_max_ms")

    @property
    @pulumi.getter(name="logMessageTimestampType")
    def log_message_timestamp_type(self) -> Optional[builtins.str]:
        """
        Enum: `CreateTime`, `LogAppendTime`. Define whether the timestamp in the message is message create time or log append time. (Default: CreateTime).
        """
        return pulumi.get(self, "log_message_timestamp_type")

    @property
    @pulumi.getter(name="logPreallocate")
    def log_preallocate(self) -> Optional[builtins.bool]:
        """
        Should pre allocate file when create new segment? (Default: false).
        """
        return pulumi.get(self, "log_preallocate")

    @property
    @pulumi.getter(name="logRetentionBytes")
    def log_retention_bytes(self) -> Optional[builtins.int]:
        """
        The maximum size of the log before deleting messages (Default: -1).
        """
        return pulumi.get(self, "log_retention_bytes")

    @property
    @pulumi.getter(name="logRetentionHours")
    def log_retention_hours(self) -> Optional[builtins.int]:
        """
        The number of hours to keep a log file before deleting it (Default: 168 hours (1 week)).
        """
        return pulumi.get(self, "log_retention_hours")

    @property
    @pulumi.getter(name="logRetentionMs")
    def log_retention_ms(self) -> Optional[builtins.int]:
        """
        The number of milliseconds to keep a log file before deleting it (in milliseconds), If not set, the value in log.retention.minutes is used. If set to -1, no time limit is applied. (Default: null, log.retention.hours applies).
        """
        return pulumi.get(self, "log_retention_ms")

    @property
    @pulumi.getter(name="logRollJitterMs")
    def log_roll_jitter_ms(self) -> Optional[builtins.int]:
        """
        The maximum jitter to subtract from logRollTimeMillis (in milliseconds). If not set, the value in log.roll.jitter.hours is used (Default: null).
        """
        return pulumi.get(self, "log_roll_jitter_ms")

    @property
    @pulumi.getter(name="logRollMs")
    def log_roll_ms(self) -> Optional[builtins.int]:
        """
        The maximum time before a new log segment is rolled out (in milliseconds). (Default: null, log.roll.hours applies (Default: 168, 7 days)).
        """
        return pulumi.get(self, "log_roll_ms")

    @property
    @pulumi.getter(name="logSegmentBytes")
    def log_segment_bytes(self) -> Optional[builtins.int]:
        """
        The maximum size of a single log file (Default: 1073741824 bytes (1 gibibyte)).
        """
        return pulumi.get(self, "log_segment_bytes")

    @property
    @pulumi.getter(name="logSegmentDeleteDelayMs")
    def log_segment_delete_delay_ms(self) -> Optional[builtins.int]:
        """
        The amount of time to wait before deleting a file from the filesystem (Default: 60000 ms (1 minute)). Example: `60000`.
        """
        return pulumi.get(self, "log_segment_delete_delay_ms")

    @property
    @pulumi.getter(name="maxConnectionsPerIp")
    def max_connections_per_ip(self) -> Optional[builtins.int]:
        """
        The maximum number of connections allowed from each ip address (Default: 2147483647).
        """
        return pulumi.get(self, "max_connections_per_ip")

    @property
    @pulumi.getter(name="maxIncrementalFetchSessionCacheSlots")
    def max_incremental_fetch_session_cache_slots(self) -> Optional[builtins.int]:
        """
        The maximum number of incremental fetch sessions that the broker will maintain. (Default: 1000). Example: `1000`.
        """
        return pulumi.get(self, "max_incremental_fetch_session_cache_slots")

    @property
    @pulumi.getter(name="messageMaxBytes")
    def message_max_bytes(self) -> Optional[builtins.int]:
        """
        The maximum size of message that the server can receive. (Default: 1048588 bytes (1 mebibyte + 12 bytes)). Example: `1048588`.
        """
        return pulumi.get(self, "message_max_bytes")

    @property
    @pulumi.getter(name="minInsyncReplicas")
    def min_insync_replicas(self) -> Optional[builtins.int]:
        """
        When a producer sets acks to `all` (or `-1`), min.insync.replicas specifies the minimum number of replicas that must acknowledge a write for the write to be considered successful. (Default: 1). Example: `1`.
        """
        return pulumi.get(self, "min_insync_replicas")

    @property
    @pulumi.getter(name="numPartitions")
    def num_partitions(self) -> Optional[builtins.int]:
        """
        Number of partitions for auto-created topics (Default: 1).
        """
        return pulumi.get(self, "num_partitions")

    @property
    @pulumi.getter(name="offsetsRetentionMinutes")
    def offsets_retention_minutes(self) -> Optional[builtins.int]:
        """
        Log retention window in minutes for offsets topic (Default: 10080 minutes (7 days)). Example: `10080`.
        """
        return pulumi.get(self, "offsets_retention_minutes")

    @property
    @pulumi.getter(name="producerPurgatoryPurgeIntervalRequests")
    def producer_purgatory_purge_interval_requests(self) -> Optional[builtins.int]:
        """
        The purge interval (in number of requests) of the producer request purgatory (Default: 1000).
        """
        return pulumi.get(self, "producer_purgatory_purge_interval_requests")

    @property
    @pulumi.getter(name="replicaFetchMaxBytes")
    def replica_fetch_max_bytes(self) -> Optional[builtins.int]:
        """
        The number of bytes of messages to attempt to fetch for each partition . This is not an absolute maximum, if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that progress can be made. (Default: 1048576 bytes (1 mebibytes)).
        """
        return pulumi.get(self, "replica_fetch_max_bytes")

    @property
    @pulumi.getter(name="replicaFetchResponseMaxBytes")
    def replica_fetch_response_max_bytes(self) -> Optional[builtins.int]:
        """
        Maximum bytes expected for the entire fetch response. Records are fetched in batches, and if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that progress can be made. As such, this is not an absolute maximum. (Default: 10485760 bytes (10 mebibytes)).
        """
        return pulumi.get(self, "replica_fetch_response_max_bytes")

    @property
    @pulumi.getter(name="saslOauthbearerExpectedAudience")
    def sasl_oauthbearer_expected_audience(self) -> Optional[builtins.str]:
        """
        The (optional) comma-delimited setting for the broker to use to verify that the JWT was issued for one of the expected audiences. (Default: null).
        """
        return pulumi.get(self, "sasl_oauthbearer_expected_audience")

    @property
    @pulumi.getter(name="saslOauthbearerExpectedIssuer")
    def sasl_oauthbearer_expected_issuer(self) -> Optional[builtins.str]:
        """
        Optional setting for the broker to use to verify that the JWT was created by the expected issuer.(Default: null).
        """
        return pulumi.get(self, "sasl_oauthbearer_expected_issuer")

    @property
    @pulumi.getter(name="saslOauthbearerJwksEndpointUrl")
    def sasl_oauthbearer_jwks_endpoint_url(self) -> Optional[builtins.str]:
        """
        OIDC JWKS endpoint URL. By setting this the SASL SSL OAuth2/OIDC authentication is enabled. See also other options for SASL OAuth2/OIDC. (Default: null).
        """
        return pulumi.get(self, "sasl_oauthbearer_jwks_endpoint_url")

    @property
    @pulumi.getter(name="saslOauthbearerSubClaimName")
    def sasl_oauthbearer_sub_claim_name(self) -> Optional[builtins.str]:
        """
        Name of the scope from which to extract the subject claim from the JWT.(Default: sub).
        """
        return pulumi.get(self, "sasl_oauthbearer_sub_claim_name")

    @property
    @pulumi.getter(name="socketRequestMaxBytes")
    def socket_request_max_bytes(self) -> Optional[builtins.int]:
        """
        The maximum number of bytes in a socket request (Default: 104857600 bytes).
        """
        return pulumi.get(self, "socket_request_max_bytes")

    @property
    @pulumi.getter(name="transactionPartitionVerificationEnable")
    def transaction_partition_verification_enable(self) -> Optional[builtins.bool]:
        """
        Enable verification that checks that the partition has been added to the transaction before writing transactional records to the partition. (Default: true).
        """
        return pulumi.get(self, "transaction_partition_verification_enable")

    @property
    @pulumi.getter(name="transactionRemoveExpiredTransactionCleanupIntervalMs")
    def transaction_remove_expired_transaction_cleanup_interval_ms(self) -> Optional[builtins.int]:
        """
        The interval at which to remove transactions that have expired due to transactional.id.expiration.ms passing (Default: 3600000 ms (1 hour)). Example: `3600000`.
        """
        return pulumi.get(self, "transaction_remove_expired_transaction_cleanup_interval_ms")

    @property
    @pulumi.getter(name="transactionStateLogSegmentBytes")
    def transaction_state_log_segment_bytes(self) -> Optional[builtins.int]:
        """
        The transaction topic segment bytes should be kept relatively small in order to facilitate faster log compaction and cache loads (Default: 104857600 bytes (100 mebibytes)). Example: `104857600`.
        """
        return pulumi.get(self, "transaction_state_log_segment_bytes")


@pulumi.output_type
class KafkaKafkaUserConfigKafkaAuthenticationMethods(dict):
    def __init__(__self__, *,
                 certificate: Optional[builtins.bool] = None,
                 sasl: Optional[builtins.bool] = None):
        """
        :param builtins.bool certificate: Enable certificate/SSL authentication. Default: `true`.
        :param builtins.bool sasl: Enable SASL authentication. Default: `false`.
        """
        if certificate is not None:
            pulumi.set(__self__, "certificate", certificate)
        if sasl is not None:
            pulumi.set(__self__, "sasl", sasl)

    @property
    @pulumi.getter
    def certificate(self) -> Optional[builtins.bool]:
        """
        Enable certificate/SSL authentication. Default: `true`.
        """
        return pulumi.get(self, "certificate")

    @property
    @pulumi.getter
    def sasl(self) -> Optional[builtins.bool]:
        """
        Enable SASL authentication. Default: `false`.
        """
        return pulumi.get(self, "sasl")


@pulumi.output_type
class KafkaKafkaUserConfigKafkaConnectConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectorClientConfigOverridePolicy":
            suggest = "connector_client_config_override_policy"
        elif key == "consumerAutoOffsetReset":
            suggest = "consumer_auto_offset_reset"
        elif key == "consumerFetchMaxBytes":
            suggest = "consumer_fetch_max_bytes"
        elif key == "consumerIsolationLevel":
            suggest = "consumer_isolation_level"
        elif key == "consumerMaxPartitionFetchBytes":
            suggest = "consumer_max_partition_fetch_bytes"
        elif key == "consumerMaxPollIntervalMs":
            suggest = "consumer_max_poll_interval_ms"
        elif key == "consumerMaxPollRecords":
            suggest = "consumer_max_poll_records"
        elif key == "offsetFlushIntervalMs":
            suggest = "offset_flush_interval_ms"
        elif key == "offsetFlushTimeoutMs":
            suggest = "offset_flush_timeout_ms"
        elif key == "producerBatchSize":
            suggest = "producer_batch_size"
        elif key == "producerBufferMemory":
            suggest = "producer_buffer_memory"
        elif key == "producerCompressionType":
            suggest = "producer_compression_type"
        elif key == "producerLingerMs":
            suggest = "producer_linger_ms"
        elif key == "producerMaxRequestSize":
            suggest = "producer_max_request_size"
        elif key == "scheduledRebalanceMaxDelayMs":
            suggest = "scheduled_rebalance_max_delay_ms"
        elif key == "sessionTimeoutMs":
            suggest = "session_timeout_ms"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaKafkaUserConfigKafkaConnectConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaKafkaUserConfigKafkaConnectConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaKafkaUserConfigKafkaConnectConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 connector_client_config_override_policy: Optional[builtins.str] = None,
                 consumer_auto_offset_reset: Optional[builtins.str] = None,
                 consumer_fetch_max_bytes: Optional[builtins.int] = None,
                 consumer_isolation_level: Optional[builtins.str] = None,
                 consumer_max_partition_fetch_bytes: Optional[builtins.int] = None,
                 consumer_max_poll_interval_ms: Optional[builtins.int] = None,
                 consumer_max_poll_records: Optional[builtins.int] = None,
                 offset_flush_interval_ms: Optional[builtins.int] = None,
                 offset_flush_timeout_ms: Optional[builtins.int] = None,
                 producer_batch_size: Optional[builtins.int] = None,
                 producer_buffer_memory: Optional[builtins.int] = None,
                 producer_compression_type: Optional[builtins.str] = None,
                 producer_linger_ms: Optional[builtins.int] = None,
                 producer_max_request_size: Optional[builtins.int] = None,
                 scheduled_rebalance_max_delay_ms: Optional[builtins.int] = None,
                 session_timeout_ms: Optional[builtins.int] = None):
        """
        :param builtins.str connector_client_config_override_policy: Enum: `All`, `None`. Defines what client configurations can be overridden by the connector. Default is None.
        :param builtins.str consumer_auto_offset_reset: Enum: `earliest`, `latest`. What to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server. Default is earliest.
        :param builtins.int consumer_fetch_max_bytes: Records are fetched in batches by the consumer, and if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that the consumer can make progress. As such, this is not a absolute maximum. Example: `52428800`.
        :param builtins.str consumer_isolation_level: Enum: `read_committed`, `read_uncommitted`. Transaction read isolation level. read*uncommitted is the default, but read*committed can be used if consume-exactly-once behavior is desired.
        :param builtins.int consumer_max_partition_fetch_bytes: Records are fetched in batches by the consumer.If the first record batch in the first non-empty partition of the fetch is larger than this limit, the batch will still be returned to ensure that the consumer can make progress. Example: `1048576`.
        :param builtins.int consumer_max_poll_interval_ms: The maximum delay in milliseconds between invocations of poll() when using consumer group management (defaults to 300000).
        :param builtins.int consumer_max_poll_records: The maximum number of records returned in a single call to poll() (defaults to 500).
        :param builtins.int offset_flush_interval_ms: The interval at which to try committing offsets for tasks (defaults to 60000).
        :param builtins.int offset_flush_timeout_ms: Maximum number of milliseconds to wait for records to flush and partition offset data to be committed to offset storage before cancelling the process and restoring the offset data to be committed in a future attempt (defaults to 5000).
        :param builtins.int producer_batch_size: This setting gives the upper bound of the batch size to be sent. If there are fewer than this many bytes accumulated for this partition, the producer will `linger` for the linger.ms time waiting for more records to show up. A batch size of zero will disable batching entirely (defaults to 16384).
        :param builtins.int producer_buffer_memory: The total bytes of memory the producer can use to buffer records waiting to be sent to the broker (defaults to 33554432).
        :param builtins.str producer_compression_type: Enum: `gzip`, `lz4`, `none`, `snappy`, `zstd`. Specify the default compression type for producers. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `none` which is the default and equivalent to no compression.
        :param builtins.int producer_linger_ms: This setting gives the upper bound on the delay for batching: once there is batch.size worth of records for a partition it will be sent immediately regardless of this setting, however if there are fewer than this many bytes accumulated for this partition the producer will `linger` for the specified time waiting for more records to show up. Defaults to 0.
        :param builtins.int producer_max_request_size: This setting will limit the number of record batches the producer will send in a single request to avoid sending huge requests. Example: `1048576`.
        :param builtins.int scheduled_rebalance_max_delay_ms: The maximum delay that is scheduled in order to wait for the return of one or more departed workers before rebalancing and reassigning their connectors and tasks to the group. During this period the connectors and tasks of the departed workers remain unassigned. Defaults to 5 minutes.
        :param builtins.int session_timeout_ms: The timeout in milliseconds used to detect failures when using Kafka’s group management facilities (defaults to 10000).
        """
        if connector_client_config_override_policy is not None:
            pulumi.set(__self__, "connector_client_config_override_policy", connector_client_config_override_policy)
        if consumer_auto_offset_reset is not None:
            pulumi.set(__self__, "consumer_auto_offset_reset", consumer_auto_offset_reset)
        if consumer_fetch_max_bytes is not None:
            pulumi.set(__self__, "consumer_fetch_max_bytes", consumer_fetch_max_bytes)
        if consumer_isolation_level is not None:
            pulumi.set(__self__, "consumer_isolation_level", consumer_isolation_level)
        if consumer_max_partition_fetch_bytes is not None:
            pulumi.set(__self__, "consumer_max_partition_fetch_bytes", consumer_max_partition_fetch_bytes)
        if consumer_max_poll_interval_ms is not None:
            pulumi.set(__self__, "consumer_max_poll_interval_ms", consumer_max_poll_interval_ms)
        if consumer_max_poll_records is not None:
            pulumi.set(__self__, "consumer_max_poll_records", consumer_max_poll_records)
        if offset_flush_interval_ms is not None:
            pulumi.set(__self__, "offset_flush_interval_ms", offset_flush_interval_ms)
        if offset_flush_timeout_ms is not None:
            pulumi.set(__self__, "offset_flush_timeout_ms", offset_flush_timeout_ms)
        if producer_batch_size is not None:
            pulumi.set(__self__, "producer_batch_size", producer_batch_size)
        if producer_buffer_memory is not None:
            pulumi.set(__self__, "producer_buffer_memory", producer_buffer_memory)
        if producer_compression_type is not None:
            pulumi.set(__self__, "producer_compression_type", producer_compression_type)
        if producer_linger_ms is not None:
            pulumi.set(__self__, "producer_linger_ms", producer_linger_ms)
        if producer_max_request_size is not None:
            pulumi.set(__self__, "producer_max_request_size", producer_max_request_size)
        if scheduled_rebalance_max_delay_ms is not None:
            pulumi.set(__self__, "scheduled_rebalance_max_delay_ms", scheduled_rebalance_max_delay_ms)
        if session_timeout_ms is not None:
            pulumi.set(__self__, "session_timeout_ms", session_timeout_ms)

    @property
    @pulumi.getter(name="connectorClientConfigOverridePolicy")
    def connector_client_config_override_policy(self) -> Optional[builtins.str]:
        """
        Enum: `All`, `None`. Defines what client configurations can be overridden by the connector. Default is None.
        """
        return pulumi.get(self, "connector_client_config_override_policy")

    @property
    @pulumi.getter(name="consumerAutoOffsetReset")
    def consumer_auto_offset_reset(self) -> Optional[builtins.str]:
        """
        Enum: `earliest`, `latest`. What to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server. Default is earliest.
        """
        return pulumi.get(self, "consumer_auto_offset_reset")

    @property
    @pulumi.getter(name="consumerFetchMaxBytes")
    def consumer_fetch_max_bytes(self) -> Optional[builtins.int]:
        """
        Records are fetched in batches by the consumer, and if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that the consumer can make progress. As such, this is not a absolute maximum. Example: `52428800`.
        """
        return pulumi.get(self, "consumer_fetch_max_bytes")

    @property
    @pulumi.getter(name="consumerIsolationLevel")
    def consumer_isolation_level(self) -> Optional[builtins.str]:
        """
        Enum: `read_committed`, `read_uncommitted`. Transaction read isolation level. read*uncommitted is the default, but read*committed can be used if consume-exactly-once behavior is desired.
        """
        return pulumi.get(self, "consumer_isolation_level")

    @property
    @pulumi.getter(name="consumerMaxPartitionFetchBytes")
    def consumer_max_partition_fetch_bytes(self) -> Optional[builtins.int]:
        """
        Records are fetched in batches by the consumer.If the first record batch in the first non-empty partition of the fetch is larger than this limit, the batch will still be returned to ensure that the consumer can make progress. Example: `1048576`.
        """
        return pulumi.get(self, "consumer_max_partition_fetch_bytes")

    @property
    @pulumi.getter(name="consumerMaxPollIntervalMs")
    def consumer_max_poll_interval_ms(self) -> Optional[builtins.int]:
        """
        The maximum delay in milliseconds between invocations of poll() when using consumer group management (defaults to 300000).
        """
        return pulumi.get(self, "consumer_max_poll_interval_ms")

    @property
    @pulumi.getter(name="consumerMaxPollRecords")
    def consumer_max_poll_records(self) -> Optional[builtins.int]:
        """
        The maximum number of records returned in a single call to poll() (defaults to 500).
        """
        return pulumi.get(self, "consumer_max_poll_records")

    @property
    @pulumi.getter(name="offsetFlushIntervalMs")
    def offset_flush_interval_ms(self) -> Optional[builtins.int]:
        """
        The interval at which to try committing offsets for tasks (defaults to 60000).
        """
        return pulumi.get(self, "offset_flush_interval_ms")

    @property
    @pulumi.getter(name="offsetFlushTimeoutMs")
    def offset_flush_timeout_ms(self) -> Optional[builtins.int]:
        """
        Maximum number of milliseconds to wait for records to flush and partition offset data to be committed to offset storage before cancelling the process and restoring the offset data to be committed in a future attempt (defaults to 5000).
        """
        return pulumi.get(self, "offset_flush_timeout_ms")

    @property
    @pulumi.getter(name="producerBatchSize")
    def producer_batch_size(self) -> Optional[builtins.int]:
        """
        This setting gives the upper bound of the batch size to be sent. If there are fewer than this many bytes accumulated for this partition, the producer will `linger` for the linger.ms time waiting for more records to show up. A batch size of zero will disable batching entirely (defaults to 16384).
        """
        return pulumi.get(self, "producer_batch_size")

    @property
    @pulumi.getter(name="producerBufferMemory")
    def producer_buffer_memory(self) -> Optional[builtins.int]:
        """
        The total bytes of memory the producer can use to buffer records waiting to be sent to the broker (defaults to 33554432).
        """
        return pulumi.get(self, "producer_buffer_memory")

    @property
    @pulumi.getter(name="producerCompressionType")
    def producer_compression_type(self) -> Optional[builtins.str]:
        """
        Enum: `gzip`, `lz4`, `none`, `snappy`, `zstd`. Specify the default compression type for producers. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `none` which is the default and equivalent to no compression.
        """
        return pulumi.get(self, "producer_compression_type")

    @property
    @pulumi.getter(name="producerLingerMs")
    def producer_linger_ms(self) -> Optional[builtins.int]:
        """
        This setting gives the upper bound on the delay for batching: once there is batch.size worth of records for a partition it will be sent immediately regardless of this setting, however if there are fewer than this many bytes accumulated for this partition the producer will `linger` for the specified time waiting for more records to show up. Defaults to 0.
        """
        return pulumi.get(self, "producer_linger_ms")

    @property
    @pulumi.getter(name="producerMaxRequestSize")
    def producer_max_request_size(self) -> Optional[builtins.int]:
        """
        This setting will limit the number of record batches the producer will send in a single request to avoid sending huge requests. Example: `1048576`.
        """
        return pulumi.get(self, "producer_max_request_size")

    @property
    @pulumi.getter(name="scheduledRebalanceMaxDelayMs")
    def scheduled_rebalance_max_delay_ms(self) -> Optional[builtins.int]:
        """
        The maximum delay that is scheduled in order to wait for the return of one or more departed workers before rebalancing and reassigning their connectors and tasks to the group. During this period the connectors and tasks of the departed workers remain unassigned. Defaults to 5 minutes.
        """
        return pulumi.get(self, "scheduled_rebalance_max_delay_ms")

    @property
    @pulumi.getter(name="sessionTimeoutMs")
    def session_timeout_ms(self) -> Optional[builtins.int]:
        """
        The timeout in milliseconds used to detect failures when using Kafka’s group management facilities (defaults to 10000).
        """
        return pulumi.get(self, "session_timeout_ms")


@pulumi.output_type
class KafkaKafkaUserConfigKafkaConnectPluginVersion(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "pluginName":
            suggest = "plugin_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaKafkaUserConfigKafkaConnectPluginVersion. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaKafkaUserConfigKafkaConnectPluginVersion.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaKafkaUserConfigKafkaConnectPluginVersion.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 plugin_name: builtins.str,
                 version: builtins.str):
        """
        :param builtins.str plugin_name: The name of the plugin. Example: `debezium-connector`.
        :param builtins.str version: The version of the plugin. Example: `2.5.0`.
        """
        pulumi.set(__self__, "plugin_name", plugin_name)
        pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter(name="pluginName")
    def plugin_name(self) -> builtins.str:
        """
        The name of the plugin. Example: `debezium-connector`.
        """
        return pulumi.get(self, "plugin_name")

    @property
    @pulumi.getter
    def version(self) -> builtins.str:
        """
        The version of the plugin. Example: `2.5.0`.
        """
        return pulumi.get(self, "version")


@pulumi.output_type
class KafkaKafkaUserConfigKafkaConnectSecretProvider(dict):
    def __init__(__self__, *,
                 name: builtins.str,
                 aws: Optional['outputs.KafkaKafkaUserConfigKafkaConnectSecretProviderAws'] = None,
                 vault: Optional['outputs.KafkaKafkaUserConfigKafkaConnectSecretProviderVault'] = None):
        """
        :param builtins.str name: Name of the secret provider. Used to reference secrets in connector config.
        :param 'KafkaKafkaUserConfigKafkaConnectSecretProviderAwsArgs' aws: AWS secret provider configuration
        :param 'KafkaKafkaUserConfigKafkaConnectSecretProviderVaultArgs' vault: Vault secret provider configuration
        """
        pulumi.set(__self__, "name", name)
        if aws is not None:
            pulumi.set(__self__, "aws", aws)
        if vault is not None:
            pulumi.set(__self__, "vault", vault)

    @property
    @pulumi.getter
    def name(self) -> builtins.str:
        """
        Name of the secret provider. Used to reference secrets in connector config.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def aws(self) -> Optional['outputs.KafkaKafkaUserConfigKafkaConnectSecretProviderAws']:
        """
        AWS secret provider configuration
        """
        return pulumi.get(self, "aws")

    @property
    @pulumi.getter
    def vault(self) -> Optional['outputs.KafkaKafkaUserConfigKafkaConnectSecretProviderVault']:
        """
        Vault secret provider configuration
        """
        return pulumi.get(self, "vault")


@pulumi.output_type
class KafkaKafkaUserConfigKafkaConnectSecretProviderAws(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "authMethod":
            suggest = "auth_method"
        elif key == "accessKey":
            suggest = "access_key"
        elif key == "secretKey":
            suggest = "secret_key"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaKafkaUserConfigKafkaConnectSecretProviderAws. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaKafkaUserConfigKafkaConnectSecretProviderAws.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaKafkaUserConfigKafkaConnectSecretProviderAws.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 auth_method: builtins.str,
                 region: builtins.str,
                 access_key: Optional[builtins.str] = None,
                 secret_key: Optional[builtins.str] = None):
        """
        :param builtins.str auth_method: Enum: `credentials`. Auth method of the vault secret provider.
        :param builtins.str region: Region used to lookup secrets with AWS SecretManager.
        :param builtins.str access_key: Access key used to authenticate with aws.
        :param builtins.str secret_key: Secret key used to authenticate with aws.
        """
        pulumi.set(__self__, "auth_method", auth_method)
        pulumi.set(__self__, "region", region)
        if access_key is not None:
            pulumi.set(__self__, "access_key", access_key)
        if secret_key is not None:
            pulumi.set(__self__, "secret_key", secret_key)

    @property
    @pulumi.getter(name="authMethod")
    def auth_method(self) -> builtins.str:
        """
        Enum: `credentials`. Auth method of the vault secret provider.
        """
        return pulumi.get(self, "auth_method")

    @property
    @pulumi.getter
    def region(self) -> builtins.str:
        """
        Region used to lookup secrets with AWS SecretManager.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="accessKey")
    def access_key(self) -> Optional[builtins.str]:
        """
        Access key used to authenticate with aws.
        """
        return pulumi.get(self, "access_key")

    @property
    @pulumi.getter(name="secretKey")
    def secret_key(self) -> Optional[builtins.str]:
        """
        Secret key used to authenticate with aws.
        """
        return pulumi.get(self, "secret_key")


@pulumi.output_type
class KafkaKafkaUserConfigKafkaConnectSecretProviderVault(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "authMethod":
            suggest = "auth_method"
        elif key == "engineVersion":
            suggest = "engine_version"
        elif key == "prefixPathDepth":
            suggest = "prefix_path_depth"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaKafkaUserConfigKafkaConnectSecretProviderVault. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaKafkaUserConfigKafkaConnectSecretProviderVault.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaKafkaUserConfigKafkaConnectSecretProviderVault.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 address: builtins.str,
                 auth_method: builtins.str,
                 engine_version: Optional[builtins.int] = None,
                 prefix_path_depth: Optional[builtins.int] = None,
                 token: Optional[builtins.str] = None):
        """
        :param builtins.str address: Address of the Vault server.
        :param builtins.str auth_method: Enum: `token`. Auth method of the vault secret provider.
        :param builtins.int engine_version: Enum: `1`, `2`, and newer. KV Secrets Engine version of the Vault server instance.
        :param builtins.int prefix_path_depth: Prefix path depth of the secrets Engine. Default is 1. If the secrets engine path has more than one segment it has to be increased to the number of segments.
        :param builtins.str token: Token used to authenticate with vault and auth method `token`.
        """
        pulumi.set(__self__, "address", address)
        pulumi.set(__self__, "auth_method", auth_method)
        if engine_version is not None:
            pulumi.set(__self__, "engine_version", engine_version)
        if prefix_path_depth is not None:
            pulumi.set(__self__, "prefix_path_depth", prefix_path_depth)
        if token is not None:
            pulumi.set(__self__, "token", token)

    @property
    @pulumi.getter
    def address(self) -> builtins.str:
        """
        Address of the Vault server.
        """
        return pulumi.get(self, "address")

    @property
    @pulumi.getter(name="authMethod")
    def auth_method(self) -> builtins.str:
        """
        Enum: `token`. Auth method of the vault secret provider.
        """
        return pulumi.get(self, "auth_method")

    @property
    @pulumi.getter(name="engineVersion")
    def engine_version(self) -> Optional[builtins.int]:
        """
        Enum: `1`, `2`, and newer. KV Secrets Engine version of the Vault server instance.
        """
        return pulumi.get(self, "engine_version")

    @property
    @pulumi.getter(name="prefixPathDepth")
    def prefix_path_depth(self) -> Optional[builtins.int]:
        """
        Prefix path depth of the secrets Engine. Default is 1. If the secrets engine path has more than one segment it has to be increased to the number of segments.
        """
        return pulumi.get(self, "prefix_path_depth")

    @property
    @pulumi.getter
    def token(self) -> Optional[builtins.str]:
        """
        Token used to authenticate with vault and auth method `token`.
        """
        return pulumi.get(self, "token")


@pulumi.output_type
class KafkaKafkaUserConfigKafkaRestConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "consumerEnableAutoCommit":
            suggest = "consumer_enable_auto_commit"
        elif key == "consumerIdleDisconnectTimeout":
            suggest = "consumer_idle_disconnect_timeout"
        elif key == "consumerRequestMaxBytes":
            suggest = "consumer_request_max_bytes"
        elif key == "consumerRequestTimeoutMs":
            suggest = "consumer_request_timeout_ms"
        elif key == "nameStrategy":
            suggest = "name_strategy"
        elif key == "nameStrategyValidation":
            suggest = "name_strategy_validation"
        elif key == "producerAcks":
            suggest = "producer_acks"
        elif key == "producerCompressionType":
            suggest = "producer_compression_type"
        elif key == "producerLingerMs":
            suggest = "producer_linger_ms"
        elif key == "producerMaxRequestSize":
            suggest = "producer_max_request_size"
        elif key == "simpleconsumerPoolSizeMax":
            suggest = "simpleconsumer_pool_size_max"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaKafkaUserConfigKafkaRestConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaKafkaUserConfigKafkaRestConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaKafkaUserConfigKafkaRestConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 consumer_enable_auto_commit: Optional[builtins.bool] = None,
                 consumer_idle_disconnect_timeout: Optional[builtins.int] = None,
                 consumer_request_max_bytes: Optional[builtins.int] = None,
                 consumer_request_timeout_ms: Optional[builtins.int] = None,
                 name_strategy: Optional[builtins.str] = None,
                 name_strategy_validation: Optional[builtins.bool] = None,
                 producer_acks: Optional[builtins.str] = None,
                 producer_compression_type: Optional[builtins.str] = None,
                 producer_linger_ms: Optional[builtins.int] = None,
                 producer_max_request_size: Optional[builtins.int] = None,
                 simpleconsumer_pool_size_max: Optional[builtins.int] = None):
        """
        :param builtins.bool consumer_enable_auto_commit: If true the consumer's offset will be periodically committed to Kafka in the background. Default: `true`.
        :param builtins.int consumer_idle_disconnect_timeout: Specifies the maximum duration (in seconds) a client can remain idle before it is deleted. If a consumer is inactive, it will exit the consumer group, and its state will be discarded. A value of 0 (default) indicates that the consumer will not be disconnected automatically due to inactivity. Default: `0`.
        :param builtins.int consumer_request_max_bytes: Maximum number of bytes in unencoded message keys and values by a single request. Default: `67108864`.
        :param builtins.int consumer_request_timeout_ms: Enum: `1000`, `15000`, `30000`. The maximum total time to wait for messages for a request if the maximum number of messages has not yet been reached. Default: `1000`.
        :param builtins.str name_strategy: Enum: `record_name`, `topic_name`, `topic_record_name`. Name strategy to use when selecting subject for storing schemas. Default: `topic_name`.
        :param builtins.bool name_strategy_validation: If true, validate that given schema is registered under expected subject name by the used name strategy when producing messages. Default: `true`.
        :param builtins.str producer_acks: Enum: `-1`, `0`, `1`, `all`. The number of acknowledgments the producer requires the leader to have received before considering a request complete. If set to `all` or `-1`, the leader will wait for the full set of in-sync replicas to acknowledge the record. Default: `1`.
        :param builtins.str producer_compression_type: Enum: `gzip`, `lz4`, `none`, `snappy`, `zstd`. Specify the default compression type for producers. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `none` which is the default and equivalent to no compression.
        :param builtins.int producer_linger_ms: Wait for up to the given delay to allow batching records together. Default: `0`.
        :param builtins.int producer_max_request_size: The maximum size of a request in bytes. Note that Kafka broker can also cap the record batch size. Default: `1048576`.
        :param builtins.int simpleconsumer_pool_size_max: Maximum number of SimpleConsumers that can be instantiated per broker. Default: `25`.
        """
        if consumer_enable_auto_commit is not None:
            pulumi.set(__self__, "consumer_enable_auto_commit", consumer_enable_auto_commit)
        if consumer_idle_disconnect_timeout is not None:
            pulumi.set(__self__, "consumer_idle_disconnect_timeout", consumer_idle_disconnect_timeout)
        if consumer_request_max_bytes is not None:
            pulumi.set(__self__, "consumer_request_max_bytes", consumer_request_max_bytes)
        if consumer_request_timeout_ms is not None:
            pulumi.set(__self__, "consumer_request_timeout_ms", consumer_request_timeout_ms)
        if name_strategy is not None:
            pulumi.set(__self__, "name_strategy", name_strategy)
        if name_strategy_validation is not None:
            pulumi.set(__self__, "name_strategy_validation", name_strategy_validation)
        if producer_acks is not None:
            pulumi.set(__self__, "producer_acks", producer_acks)
        if producer_compression_type is not None:
            pulumi.set(__self__, "producer_compression_type", producer_compression_type)
        if producer_linger_ms is not None:
            pulumi.set(__self__, "producer_linger_ms", producer_linger_ms)
        if producer_max_request_size is not None:
            pulumi.set(__self__, "producer_max_request_size", producer_max_request_size)
        if simpleconsumer_pool_size_max is not None:
            pulumi.set(__self__, "simpleconsumer_pool_size_max", simpleconsumer_pool_size_max)

    @property
    @pulumi.getter(name="consumerEnableAutoCommit")
    def consumer_enable_auto_commit(self) -> Optional[builtins.bool]:
        """
        If true the consumer's offset will be periodically committed to Kafka in the background. Default: `true`.
        """
        return pulumi.get(self, "consumer_enable_auto_commit")

    @property
    @pulumi.getter(name="consumerIdleDisconnectTimeout")
    def consumer_idle_disconnect_timeout(self) -> Optional[builtins.int]:
        """
        Specifies the maximum duration (in seconds) a client can remain idle before it is deleted. If a consumer is inactive, it will exit the consumer group, and its state will be discarded. A value of 0 (default) indicates that the consumer will not be disconnected automatically due to inactivity. Default: `0`.
        """
        return pulumi.get(self, "consumer_idle_disconnect_timeout")

    @property
    @pulumi.getter(name="consumerRequestMaxBytes")
    def consumer_request_max_bytes(self) -> Optional[builtins.int]:
        """
        Maximum number of bytes in unencoded message keys and values by a single request. Default: `67108864`.
        """
        return pulumi.get(self, "consumer_request_max_bytes")

    @property
    @pulumi.getter(name="consumerRequestTimeoutMs")
    def consumer_request_timeout_ms(self) -> Optional[builtins.int]:
        """
        Enum: `1000`, `15000`, `30000`. The maximum total time to wait for messages for a request if the maximum number of messages has not yet been reached. Default: `1000`.
        """
        return pulumi.get(self, "consumer_request_timeout_ms")

    @property
    @pulumi.getter(name="nameStrategy")
    def name_strategy(self) -> Optional[builtins.str]:
        """
        Enum: `record_name`, `topic_name`, `topic_record_name`. Name strategy to use when selecting subject for storing schemas. Default: `topic_name`.
        """
        return pulumi.get(self, "name_strategy")

    @property
    @pulumi.getter(name="nameStrategyValidation")
    def name_strategy_validation(self) -> Optional[builtins.bool]:
        """
        If true, validate that given schema is registered under expected subject name by the used name strategy when producing messages. Default: `true`.
        """
        return pulumi.get(self, "name_strategy_validation")

    @property
    @pulumi.getter(name="producerAcks")
    def producer_acks(self) -> Optional[builtins.str]:
        """
        Enum: `-1`, `0`, `1`, `all`. The number of acknowledgments the producer requires the leader to have received before considering a request complete. If set to `all` or `-1`, the leader will wait for the full set of in-sync replicas to acknowledge the record. Default: `1`.
        """
        return pulumi.get(self, "producer_acks")

    @property
    @pulumi.getter(name="producerCompressionType")
    def producer_compression_type(self) -> Optional[builtins.str]:
        """
        Enum: `gzip`, `lz4`, `none`, `snappy`, `zstd`. Specify the default compression type for producers. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `none` which is the default and equivalent to no compression.
        """
        return pulumi.get(self, "producer_compression_type")

    @property
    @pulumi.getter(name="producerLingerMs")
    def producer_linger_ms(self) -> Optional[builtins.int]:
        """
        Wait for up to the given delay to allow batching records together. Default: `0`.
        """
        return pulumi.get(self, "producer_linger_ms")

    @property
    @pulumi.getter(name="producerMaxRequestSize")
    def producer_max_request_size(self) -> Optional[builtins.int]:
        """
        The maximum size of a request in bytes. Note that Kafka broker can also cap the record batch size. Default: `1048576`.
        """
        return pulumi.get(self, "producer_max_request_size")

    @property
    @pulumi.getter(name="simpleconsumerPoolSizeMax")
    def simpleconsumer_pool_size_max(self) -> Optional[builtins.int]:
        """
        Maximum number of SimpleConsumers that can be instantiated per broker. Default: `25`.
        """
        return pulumi.get(self, "simpleconsumer_pool_size_max")


@pulumi.output_type
class KafkaKafkaUserConfigKafkaSaslMechanisms(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "scramSha256":
            suggest = "scram_sha256"
        elif key == "scramSha512":
            suggest = "scram_sha512"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaKafkaUserConfigKafkaSaslMechanisms. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaKafkaUserConfigKafkaSaslMechanisms.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaKafkaUserConfigKafkaSaslMechanisms.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 plain: Optional[builtins.bool] = None,
                 scram_sha256: Optional[builtins.bool] = None,
                 scram_sha512: Optional[builtins.bool] = None):
        """
        :param builtins.bool plain: Enable PLAIN mechanism. Default: `true`.
        :param builtins.bool scram_sha256: Enable SCRAM-SHA-256 mechanism. Default: `true`.
        :param builtins.bool scram_sha512: Enable SCRAM-SHA-512 mechanism. Default: `true`.
        """
        if plain is not None:
            pulumi.set(__self__, "plain", plain)
        if scram_sha256 is not None:
            pulumi.set(__self__, "scram_sha256", scram_sha256)
        if scram_sha512 is not None:
            pulumi.set(__self__, "scram_sha512", scram_sha512)

    @property
    @pulumi.getter
    def plain(self) -> Optional[builtins.bool]:
        """
        Enable PLAIN mechanism. Default: `true`.
        """
        return pulumi.get(self, "plain")

    @property
    @pulumi.getter(name="scramSha256")
    def scram_sha256(self) -> Optional[builtins.bool]:
        """
        Enable SCRAM-SHA-256 mechanism. Default: `true`.
        """
        return pulumi.get(self, "scram_sha256")

    @property
    @pulumi.getter(name="scramSha512")
    def scram_sha512(self) -> Optional[builtins.bool]:
        """
        Enable SCRAM-SHA-512 mechanism. Default: `true`.
        """
        return pulumi.get(self, "scram_sha512")


@pulumi.output_type
class KafkaKafkaUserConfigPrivateAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "kafkaConnect":
            suggest = "kafka_connect"
        elif key == "kafkaRest":
            suggest = "kafka_rest"
        elif key == "schemaRegistry":
            suggest = "schema_registry"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaKafkaUserConfigPrivateAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaKafkaUserConfigPrivateAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaKafkaUserConfigPrivateAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 kafka: Optional[builtins.bool] = None,
                 kafka_connect: Optional[builtins.bool] = None,
                 kafka_rest: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None,
                 schema_registry: Optional[builtins.bool] = None):
        """
        :param builtins.bool kafka: Allow clients to connect to kafka with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool kafka_connect: Allow clients to connect to kafka_connect with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool kafka_rest: Allow clients to connect to kafka_rest with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool schema_registry: Allow clients to connect to schema_registry with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if kafka is not None:
            pulumi.set(__self__, "kafka", kafka)
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)
        if kafka_rest is not None:
            pulumi.set(__self__, "kafka_rest", kafka_rest)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if schema_registry is not None:
            pulumi.set(__self__, "schema_registry", schema_registry)

    @property
    @pulumi.getter
    def kafka(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to kafka with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "kafka")

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to kafka_connect with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "kafka_connect")

    @property
    @pulumi.getter(name="kafkaRest")
    def kafka_rest(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to kafka_rest with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "kafka_rest")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter(name="schemaRegistry")
    def schema_registry(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to schema_registry with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "schema_registry")


@pulumi.output_type
class KafkaKafkaUserConfigPrivatelinkAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "kafkaConnect":
            suggest = "kafka_connect"
        elif key == "kafkaRest":
            suggest = "kafka_rest"
        elif key == "schemaRegistry":
            suggest = "schema_registry"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaKafkaUserConfigPrivatelinkAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaKafkaUserConfigPrivatelinkAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaKafkaUserConfigPrivatelinkAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 jolokia: Optional[builtins.bool] = None,
                 kafka: Optional[builtins.bool] = None,
                 kafka_connect: Optional[builtins.bool] = None,
                 kafka_rest: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None,
                 schema_registry: Optional[builtins.bool] = None):
        """
        :param builtins.bool jolokia: Enable jolokia.
        :param builtins.bool kafka: Enable kafka.
        :param builtins.bool kafka_connect: Enable kafka_connect.
        :param builtins.bool kafka_rest: Enable kafka_rest.
        :param builtins.bool prometheus: Enable prometheus.
        :param builtins.bool schema_registry: Enable schema_registry.
        """
        if jolokia is not None:
            pulumi.set(__self__, "jolokia", jolokia)
        if kafka is not None:
            pulumi.set(__self__, "kafka", kafka)
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)
        if kafka_rest is not None:
            pulumi.set(__self__, "kafka_rest", kafka_rest)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if schema_registry is not None:
            pulumi.set(__self__, "schema_registry", schema_registry)

    @property
    @pulumi.getter
    def jolokia(self) -> Optional[builtins.bool]:
        """
        Enable jolokia.
        """
        return pulumi.get(self, "jolokia")

    @property
    @pulumi.getter
    def kafka(self) -> Optional[builtins.bool]:
        """
        Enable kafka.
        """
        return pulumi.get(self, "kafka")

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional[builtins.bool]:
        """
        Enable kafka_connect.
        """
        return pulumi.get(self, "kafka_connect")

    @property
    @pulumi.getter(name="kafkaRest")
    def kafka_rest(self) -> Optional[builtins.bool]:
        """
        Enable kafka_rest.
        """
        return pulumi.get(self, "kafka_rest")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter(name="schemaRegistry")
    def schema_registry(self) -> Optional[builtins.bool]:
        """
        Enable schema_registry.
        """
        return pulumi.get(self, "schema_registry")


@pulumi.output_type
class KafkaKafkaUserConfigPublicAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "kafkaConnect":
            suggest = "kafka_connect"
        elif key == "kafkaRest":
            suggest = "kafka_rest"
        elif key == "schemaRegistry":
            suggest = "schema_registry"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaKafkaUserConfigPublicAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaKafkaUserConfigPublicAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaKafkaUserConfigPublicAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 kafka: Optional[builtins.bool] = None,
                 kafka_connect: Optional[builtins.bool] = None,
                 kafka_rest: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None,
                 schema_registry: Optional[builtins.bool] = None):
        """
        :param builtins.bool kafka: Allow clients to connect to kafka from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool kafka_connect: Allow clients to connect to kafka_connect from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool kafka_rest: Allow clients to connect to kafka_rest from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool schema_registry: Allow clients to connect to schema_registry from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if kafka is not None:
            pulumi.set(__self__, "kafka", kafka)
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)
        if kafka_rest is not None:
            pulumi.set(__self__, "kafka_rest", kafka_rest)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if schema_registry is not None:
            pulumi.set(__self__, "schema_registry", schema_registry)

    @property
    @pulumi.getter
    def kafka(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to kafka from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "kafka")

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to kafka_connect from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "kafka_connect")

    @property
    @pulumi.getter(name="kafkaRest")
    def kafka_rest(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to kafka_rest from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "kafka_rest")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter(name="schemaRegistry")
    def schema_registry(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to schema_registry from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "schema_registry")


@pulumi.output_type
class KafkaKafkaUserConfigSchemaRegistryConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "leaderEligibility":
            suggest = "leader_eligibility"
        elif key == "retriableErrorsSilenced":
            suggest = "retriable_errors_silenced"
        elif key == "schemaReaderStrictMode":
            suggest = "schema_reader_strict_mode"
        elif key == "topicName":
            suggest = "topic_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaKafkaUserConfigSchemaRegistryConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaKafkaUserConfigSchemaRegistryConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaKafkaUserConfigSchemaRegistryConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 leader_eligibility: Optional[builtins.bool] = None,
                 retriable_errors_silenced: Optional[builtins.bool] = None,
                 schema_reader_strict_mode: Optional[builtins.bool] = None,
                 topic_name: Optional[builtins.str] = None):
        """
        :param builtins.bool leader_eligibility: If true, Karapace / Schema Registry on the service nodes can participate in leader election. It might be needed to disable this when the schemas topic is replicated to a secondary cluster and Karapace / Schema Registry there must not participate in leader election. Defaults to `true`.
        :param builtins.bool retriable_errors_silenced: If enabled, kafka errors which can be retried or custom errors specified for the service will not be raised, instead, a warning log is emitted. This will denoise issue tracking systems, i.e. sentry. Defaults to `true`.
        :param builtins.bool schema_reader_strict_mode: If enabled, causes the Karapace schema-registry service to shutdown when there are invalid schema records in the `_schemas` topic. Defaults to `false`.
        :param builtins.str topic_name: The durable single partition topic that acts as the durable log for the data. This topic must be compacted to avoid losing data due to retention policy. Please note that changing this configuration in an existing Schema Registry / Karapace setup leads to previous schemas being inaccessible, data encoded with them potentially unreadable and schema ID sequence put out of order. It's only possible to do the switch while Schema Registry / Karapace is disabled. Defaults to `_schemas`.
        """
        if leader_eligibility is not None:
            pulumi.set(__self__, "leader_eligibility", leader_eligibility)
        if retriable_errors_silenced is not None:
            pulumi.set(__self__, "retriable_errors_silenced", retriable_errors_silenced)
        if schema_reader_strict_mode is not None:
            pulumi.set(__self__, "schema_reader_strict_mode", schema_reader_strict_mode)
        if topic_name is not None:
            pulumi.set(__self__, "topic_name", topic_name)

    @property
    @pulumi.getter(name="leaderEligibility")
    def leader_eligibility(self) -> Optional[builtins.bool]:
        """
        If true, Karapace / Schema Registry on the service nodes can participate in leader election. It might be needed to disable this when the schemas topic is replicated to a secondary cluster and Karapace / Schema Registry there must not participate in leader election. Defaults to `true`.
        """
        return pulumi.get(self, "leader_eligibility")

    @property
    @pulumi.getter(name="retriableErrorsSilenced")
    def retriable_errors_silenced(self) -> Optional[builtins.bool]:
        """
        If enabled, kafka errors which can be retried or custom errors specified for the service will not be raised, instead, a warning log is emitted. This will denoise issue tracking systems, i.e. sentry. Defaults to `true`.
        """
        return pulumi.get(self, "retriable_errors_silenced")

    @property
    @pulumi.getter(name="schemaReaderStrictMode")
    def schema_reader_strict_mode(self) -> Optional[builtins.bool]:
        """
        If enabled, causes the Karapace schema-registry service to shutdown when there are invalid schema records in the `_schemas` topic. Defaults to `false`.
        """
        return pulumi.get(self, "schema_reader_strict_mode")

    @property
    @pulumi.getter(name="topicName")
    def topic_name(self) -> Optional[builtins.str]:
        """
        The durable single partition topic that acts as the durable log for the data. This topic must be compacted to avoid losing data due to retention policy. Please note that changing this configuration in an existing Schema Registry / Karapace setup leads to previous schemas being inaccessible, data encoded with them potentially unreadable and schema ID sequence put out of order. It's only possible to do the switch while Schema Registry / Karapace is disabled. Defaults to `_schemas`.
        """
        return pulumi.get(self, "topic_name")


@pulumi.output_type
class KafkaKafkaUserConfigSingleZone(dict):
    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None):
        """
        :param builtins.bool enabled: Whether to allocate nodes on the same Availability Zone or spread across zones available. By default service nodes are spread across different AZs. The single AZ support is best-effort and may temporarily allocate nodes in different AZs e.g. in case of capacity limitations in one AZ.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[builtins.bool]:
        """
        Whether to allocate nodes on the same Availability Zone or spread across zones available. By default service nodes are spread across different AZs. The single AZ support is best-effort and may temporarily allocate nodes in different AZs e.g. in case of capacity limitations in one AZ.
        """
        return pulumi.get(self, "enabled")


@pulumi.output_type
class KafkaKafkaUserConfigTieredStorage(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "localCache":
            suggest = "local_cache"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaKafkaUserConfigTieredStorage. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaKafkaUserConfigTieredStorage.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaKafkaUserConfigTieredStorage.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None,
                 local_cache: Optional['outputs.KafkaKafkaUserConfigTieredStorageLocalCache'] = None):
        """
        :param builtins.bool enabled: Whether to enable the tiered storage functionality.
        :param 'KafkaKafkaUserConfigTieredStorageLocalCacheArgs' local_cache: Local cache configuration
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if local_cache is not None:
            pulumi.set(__self__, "local_cache", local_cache)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[builtins.bool]:
        """
        Whether to enable the tiered storage functionality.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="localCache")
    @_utilities.deprecated("""This property is deprecated.""")
    def local_cache(self) -> Optional['outputs.KafkaKafkaUserConfigTieredStorageLocalCache']:
        """
        Local cache configuration
        """
        return pulumi.get(self, "local_cache")


@pulumi.output_type
class KafkaKafkaUserConfigTieredStorageLocalCache(dict):
    def __init__(__self__, *,
                 size: Optional[builtins.int] = None):
        """
        :param builtins.int size: Local cache size in bytes. Example: `1073741824`.
        """
        if size is not None:
            pulumi.set(__self__, "size", size)

    @property
    @pulumi.getter
    @_utilities.deprecated("""This property is deprecated.""")
    def size(self) -> Optional[builtins.int]:
        """
        Local cache size in bytes. Example: `1073741824`.
        """
        return pulumi.get(self, "size")


@pulumi.output_type
class KafkaMirrorMakerComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaMirrorMakerComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaMirrorMakerComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaMirrorMakerComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class KafkaMirrorMakerKafkaMirrormakerUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "additionalBackupRegions":
            suggest = "additional_backup_regions"
        elif key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "kafkaMirrormaker":
            suggest = "kafka_mirrormaker"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "staticIps":
            suggest = "static_ips"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaMirrorMakerKafkaMirrormakerUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaMirrorMakerKafkaMirrormakerUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaMirrorMakerKafkaMirrormakerUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 ip_filter_objects: Optional[Sequence['outputs.KafkaMirrorMakerKafkaMirrormakerUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 kafka_mirrormaker: Optional['outputs.KafkaMirrorMakerKafkaMirrormakerUserConfigKafkaMirrormaker'] = None,
                 service_log: Optional[builtins.bool] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param Sequence['KafkaMirrorMakerKafkaMirrormakerUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'KafkaMirrorMakerKafkaMirrormakerUserConfigKafkaMirrormakerArgs' kafka_mirrormaker: Kafka MirrorMaker configuration values
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if kafka_mirrormaker is not None:
            pulumi.set(__self__, "kafka_mirrormaker", kafka_mirrormaker)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    @_utilities.deprecated("""This property is deprecated.""")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.KafkaMirrorMakerKafkaMirrormakerUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="kafkaMirrormaker")
    def kafka_mirrormaker(self) -> Optional['outputs.KafkaMirrorMakerKafkaMirrormakerUserConfigKafkaMirrormaker']:
        """
        Kafka MirrorMaker configuration values
        """
        return pulumi.get(self, "kafka_mirrormaker")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class KafkaMirrorMakerKafkaMirrormakerUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class KafkaMirrorMakerKafkaMirrormakerUserConfigKafkaMirrormaker(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "adminTimeoutMs":
            suggest = "admin_timeout_ms"
        elif key == "emitCheckpointsEnabled":
            suggest = "emit_checkpoints_enabled"
        elif key == "emitCheckpointsIntervalSeconds":
            suggest = "emit_checkpoints_interval_seconds"
        elif key == "groupsExclude":
            suggest = "groups_exclude"
        elif key == "offsetLagMax":
            suggest = "offset_lag_max"
        elif key == "refreshGroupsEnabled":
            suggest = "refresh_groups_enabled"
        elif key == "refreshGroupsIntervalSeconds":
            suggest = "refresh_groups_interval_seconds"
        elif key == "refreshTopicsEnabled":
            suggest = "refresh_topics_enabled"
        elif key == "refreshTopicsIntervalSeconds":
            suggest = "refresh_topics_interval_seconds"
        elif key == "syncGroupOffsetsEnabled":
            suggest = "sync_group_offsets_enabled"
        elif key == "syncGroupOffsetsIntervalSeconds":
            suggest = "sync_group_offsets_interval_seconds"
        elif key == "syncTopicConfigsEnabled":
            suggest = "sync_topic_configs_enabled"
        elif key == "tasksMaxPerCpu":
            suggest = "tasks_max_per_cpu"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaMirrorMakerKafkaMirrormakerUserConfigKafkaMirrormaker. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaMirrorMakerKafkaMirrormakerUserConfigKafkaMirrormaker.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaMirrorMakerKafkaMirrormakerUserConfigKafkaMirrormaker.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 admin_timeout_ms: Optional[builtins.int] = None,
                 emit_checkpoints_enabled: Optional[builtins.bool] = None,
                 emit_checkpoints_interval_seconds: Optional[builtins.int] = None,
                 groups: Optional[builtins.str] = None,
                 groups_exclude: Optional[builtins.str] = None,
                 offset_lag_max: Optional[builtins.int] = None,
                 refresh_groups_enabled: Optional[builtins.bool] = None,
                 refresh_groups_interval_seconds: Optional[builtins.int] = None,
                 refresh_topics_enabled: Optional[builtins.bool] = None,
                 refresh_topics_interval_seconds: Optional[builtins.int] = None,
                 sync_group_offsets_enabled: Optional[builtins.bool] = None,
                 sync_group_offsets_interval_seconds: Optional[builtins.int] = None,
                 sync_topic_configs_enabled: Optional[builtins.bool] = None,
                 tasks_max_per_cpu: Optional[builtins.int] = None):
        """
        :param builtins.int admin_timeout_ms: Timeout for administrative tasks, e.g. detecting new topics, loading of consumer group and offsets. Defaults to 60000 milliseconds (1 minute).
        :param builtins.bool emit_checkpoints_enabled: Whether to emit consumer group offset checkpoints to target cluster periodically (default: true).
        :param builtins.int emit_checkpoints_interval_seconds: Frequency at which consumer group offset checkpoints are emitted (default: 60, every minute). Example: `60`.
        :param builtins.str groups: Consumer groups to replicate. Supports comma-separated group IDs and regexes. Example: `.*`.
        :param builtins.str groups_exclude: Exclude groups. Supports comma-separated group IDs and regexes. Excludes take precedence over includes. Example: `console-consumer-.*,connect-.*,__.*`.
        :param builtins.int offset_lag_max: How out-of-sync a remote partition can be before it is resynced. Example: `100`.
        :param builtins.bool refresh_groups_enabled: Whether to periodically check for new consumer groups. Defaults to `true`.
        :param builtins.int refresh_groups_interval_seconds: Frequency of consumer group refresh in seconds. Defaults to 600 seconds (10 minutes).
        :param builtins.bool refresh_topics_enabled: Whether to periodically check for new topics and partitions. Defaults to `true`.
        :param builtins.int refresh_topics_interval_seconds: Frequency of topic and partitions refresh in seconds. Defaults to 600 seconds (10 minutes).
        :param builtins.bool sync_group_offsets_enabled: Whether to periodically write the translated offsets of replicated consumer groups (in the source cluster) to _*consumer*offsets topic in target cluster, as long as no active consumers in that group are connected to the target cluster.
        :param builtins.int sync_group_offsets_interval_seconds: Frequency at which consumer group offsets are synced (default: 60, every minute). Example: `60`.
        :param builtins.bool sync_topic_configs_enabled: Whether to periodically configure remote topics to match their corresponding upstream topics.
        :param builtins.int tasks_max_per_cpu: `tasks.max` is set to this multiplied by the number of CPUs in the service. Default: `1`.
        """
        if admin_timeout_ms is not None:
            pulumi.set(__self__, "admin_timeout_ms", admin_timeout_ms)
        if emit_checkpoints_enabled is not None:
            pulumi.set(__self__, "emit_checkpoints_enabled", emit_checkpoints_enabled)
        if emit_checkpoints_interval_seconds is not None:
            pulumi.set(__self__, "emit_checkpoints_interval_seconds", emit_checkpoints_interval_seconds)
        if groups is not None:
            pulumi.set(__self__, "groups", groups)
        if groups_exclude is not None:
            pulumi.set(__self__, "groups_exclude", groups_exclude)
        if offset_lag_max is not None:
            pulumi.set(__self__, "offset_lag_max", offset_lag_max)
        if refresh_groups_enabled is not None:
            pulumi.set(__self__, "refresh_groups_enabled", refresh_groups_enabled)
        if refresh_groups_interval_seconds is not None:
            pulumi.set(__self__, "refresh_groups_interval_seconds", refresh_groups_interval_seconds)
        if refresh_topics_enabled is not None:
            pulumi.set(__self__, "refresh_topics_enabled", refresh_topics_enabled)
        if refresh_topics_interval_seconds is not None:
            pulumi.set(__self__, "refresh_topics_interval_seconds", refresh_topics_interval_seconds)
        if sync_group_offsets_enabled is not None:
            pulumi.set(__self__, "sync_group_offsets_enabled", sync_group_offsets_enabled)
        if sync_group_offsets_interval_seconds is not None:
            pulumi.set(__self__, "sync_group_offsets_interval_seconds", sync_group_offsets_interval_seconds)
        if sync_topic_configs_enabled is not None:
            pulumi.set(__self__, "sync_topic_configs_enabled", sync_topic_configs_enabled)
        if tasks_max_per_cpu is not None:
            pulumi.set(__self__, "tasks_max_per_cpu", tasks_max_per_cpu)

    @property
    @pulumi.getter(name="adminTimeoutMs")
    def admin_timeout_ms(self) -> Optional[builtins.int]:
        """
        Timeout for administrative tasks, e.g. detecting new topics, loading of consumer group and offsets. Defaults to 60000 milliseconds (1 minute).
        """
        return pulumi.get(self, "admin_timeout_ms")

    @property
    @pulumi.getter(name="emitCheckpointsEnabled")
    def emit_checkpoints_enabled(self) -> Optional[builtins.bool]:
        """
        Whether to emit consumer group offset checkpoints to target cluster periodically (default: true).
        """
        return pulumi.get(self, "emit_checkpoints_enabled")

    @property
    @pulumi.getter(name="emitCheckpointsIntervalSeconds")
    def emit_checkpoints_interval_seconds(self) -> Optional[builtins.int]:
        """
        Frequency at which consumer group offset checkpoints are emitted (default: 60, every minute). Example: `60`.
        """
        return pulumi.get(self, "emit_checkpoints_interval_seconds")

    @property
    @pulumi.getter
    def groups(self) -> Optional[builtins.str]:
        """
        Consumer groups to replicate. Supports comma-separated group IDs and regexes. Example: `.*`.
        """
        return pulumi.get(self, "groups")

    @property
    @pulumi.getter(name="groupsExclude")
    def groups_exclude(self) -> Optional[builtins.str]:
        """
        Exclude groups. Supports comma-separated group IDs and regexes. Excludes take precedence over includes. Example: `console-consumer-.*,connect-.*,__.*`.
        """
        return pulumi.get(self, "groups_exclude")

    @property
    @pulumi.getter(name="offsetLagMax")
    def offset_lag_max(self) -> Optional[builtins.int]:
        """
        How out-of-sync a remote partition can be before it is resynced. Example: `100`.
        """
        return pulumi.get(self, "offset_lag_max")

    @property
    @pulumi.getter(name="refreshGroupsEnabled")
    def refresh_groups_enabled(self) -> Optional[builtins.bool]:
        """
        Whether to periodically check for new consumer groups. Defaults to `true`.
        """
        return pulumi.get(self, "refresh_groups_enabled")

    @property
    @pulumi.getter(name="refreshGroupsIntervalSeconds")
    def refresh_groups_interval_seconds(self) -> Optional[builtins.int]:
        """
        Frequency of consumer group refresh in seconds. Defaults to 600 seconds (10 minutes).
        """
        return pulumi.get(self, "refresh_groups_interval_seconds")

    @property
    @pulumi.getter(name="refreshTopicsEnabled")
    def refresh_topics_enabled(self) -> Optional[builtins.bool]:
        """
        Whether to periodically check for new topics and partitions. Defaults to `true`.
        """
        return pulumi.get(self, "refresh_topics_enabled")

    @property
    @pulumi.getter(name="refreshTopicsIntervalSeconds")
    def refresh_topics_interval_seconds(self) -> Optional[builtins.int]:
        """
        Frequency of topic and partitions refresh in seconds. Defaults to 600 seconds (10 minutes).
        """
        return pulumi.get(self, "refresh_topics_interval_seconds")

    @property
    @pulumi.getter(name="syncGroupOffsetsEnabled")
    def sync_group_offsets_enabled(self) -> Optional[builtins.bool]:
        """
        Whether to periodically write the translated offsets of replicated consumer groups (in the source cluster) to _*consumer*offsets topic in target cluster, as long as no active consumers in that group are connected to the target cluster.
        """
        return pulumi.get(self, "sync_group_offsets_enabled")

    @property
    @pulumi.getter(name="syncGroupOffsetsIntervalSeconds")
    def sync_group_offsets_interval_seconds(self) -> Optional[builtins.int]:
        """
        Frequency at which consumer group offsets are synced (default: 60, every minute). Example: `60`.
        """
        return pulumi.get(self, "sync_group_offsets_interval_seconds")

    @property
    @pulumi.getter(name="syncTopicConfigsEnabled")
    def sync_topic_configs_enabled(self) -> Optional[builtins.bool]:
        """
        Whether to periodically configure remote topics to match their corresponding upstream topics.
        """
        return pulumi.get(self, "sync_topic_configs_enabled")

    @property
    @pulumi.getter(name="tasksMaxPerCpu")
    def tasks_max_per_cpu(self) -> Optional[builtins.int]:
        """
        `tasks.max` is set to this multiplied by the number of CPUs in the service. Default: `1`.
        """
        return pulumi.get(self, "tasks_max_per_cpu")


@pulumi.output_type
class KafkaMirrorMakerServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaMirrorMakerServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaMirrorMakerServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaMirrorMakerServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class KafkaMirrorMakerTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class KafkaMirrorMakerTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class KafkaServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class KafkaTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class KafkaTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class KafkaTopicConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "cleanupPolicy":
            suggest = "cleanup_policy"
        elif key == "compressionType":
            suggest = "compression_type"
        elif key == "deleteRetentionMs":
            suggest = "delete_retention_ms"
        elif key == "fileDeleteDelayMs":
            suggest = "file_delete_delay_ms"
        elif key == "flushMessages":
            suggest = "flush_messages"
        elif key == "flushMs":
            suggest = "flush_ms"
        elif key == "indexIntervalBytes":
            suggest = "index_interval_bytes"
        elif key == "localRetentionBytes":
            suggest = "local_retention_bytes"
        elif key == "localRetentionMs":
            suggest = "local_retention_ms"
        elif key == "maxCompactionLagMs":
            suggest = "max_compaction_lag_ms"
        elif key == "maxMessageBytes":
            suggest = "max_message_bytes"
        elif key == "messageDownconversionEnable":
            suggest = "message_downconversion_enable"
        elif key == "messageFormatVersion":
            suggest = "message_format_version"
        elif key == "messageTimestampDifferenceMaxMs":
            suggest = "message_timestamp_difference_max_ms"
        elif key == "messageTimestampType":
            suggest = "message_timestamp_type"
        elif key == "minCleanableDirtyRatio":
            suggest = "min_cleanable_dirty_ratio"
        elif key == "minCompactionLagMs":
            suggest = "min_compaction_lag_ms"
        elif key == "minInsyncReplicas":
            suggest = "min_insync_replicas"
        elif key == "remoteStorageEnable":
            suggest = "remote_storage_enable"
        elif key == "retentionBytes":
            suggest = "retention_bytes"
        elif key == "retentionMs":
            suggest = "retention_ms"
        elif key == "segmentBytes":
            suggest = "segment_bytes"
        elif key == "segmentIndexBytes":
            suggest = "segment_index_bytes"
        elif key == "segmentJitterMs":
            suggest = "segment_jitter_ms"
        elif key == "segmentMs":
            suggest = "segment_ms"
        elif key == "uncleanLeaderElectionEnable":
            suggest = "unclean_leader_election_enable"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in KafkaTopicConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        KafkaTopicConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        KafkaTopicConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 cleanup_policy: Optional[builtins.str] = None,
                 compression_type: Optional[builtins.str] = None,
                 delete_retention_ms: Optional[builtins.str] = None,
                 file_delete_delay_ms: Optional[builtins.str] = None,
                 flush_messages: Optional[builtins.str] = None,
                 flush_ms: Optional[builtins.str] = None,
                 index_interval_bytes: Optional[builtins.str] = None,
                 local_retention_bytes: Optional[builtins.str] = None,
                 local_retention_ms: Optional[builtins.str] = None,
                 max_compaction_lag_ms: Optional[builtins.str] = None,
                 max_message_bytes: Optional[builtins.str] = None,
                 message_downconversion_enable: Optional[builtins.bool] = None,
                 message_format_version: Optional[builtins.str] = None,
                 message_timestamp_difference_max_ms: Optional[builtins.str] = None,
                 message_timestamp_type: Optional[builtins.str] = None,
                 min_cleanable_dirty_ratio: Optional[builtins.float] = None,
                 min_compaction_lag_ms: Optional[builtins.str] = None,
                 min_insync_replicas: Optional[builtins.str] = None,
                 preallocate: Optional[builtins.bool] = None,
                 remote_storage_enable: Optional[builtins.bool] = None,
                 retention_bytes: Optional[builtins.str] = None,
                 retention_ms: Optional[builtins.str] = None,
                 segment_bytes: Optional[builtins.str] = None,
                 segment_index_bytes: Optional[builtins.str] = None,
                 segment_jitter_ms: Optional[builtins.str] = None,
                 segment_ms: Optional[builtins.str] = None,
                 unclean_leader_election_enable: Optional[builtins.bool] = None):
        """
        :param builtins.str cleanup_policy: The retention policy to use on old segments. Possible values include 'delete', 'compact', or a comma-separated list of them. The default policy ('delete') will discard old segments when their retention time or size limit has been reached. The 'compact' setting will enable log compaction on the topic. The possible values are `compact`, `compact,delete` and `delete`.
        :param builtins.str compression_type: Specify the final compression type for a given topic. This configuration accepts the standard compression codecs ('gzip', 'snappy', 'lz4', 'zstd'). It additionally accepts 'uncompressed' which is equivalent to no compression; and 'producer' which means retain the original compression codec set by the producer. The possible values are `gzip`, `lz4`, `producer`, `snappy`, `uncompressed` and `zstd`.
        :param builtins.str delete_retention_ms: The amount of time to retain delete tombstone markers for log compacted topics. This setting also gives a bound on the time in which a consumer must complete a read if they begin from offset 0 to ensure that they get a valid snapshot of the final stage (otherwise delete tombstones may be collected before they complete their scan).
        :param builtins.str file_delete_delay_ms: The time to wait before deleting a file from the filesystem.
        :param builtins.str flush_messages: This setting allows specifying an interval at which we will force an fsync of data written to the log. For example if this was set to 1 we would fsync after every message; if it were 5 we would fsync after every five messages. In general we recommend you not set this and use replication for durability and allow the operating system's background flush capabilities as it is more efficient.
        :param builtins.str flush_ms: This setting allows specifying a time interval at which we will force an fsync of data written to the log. For example if this was set to 1000 we would fsync after 1000 ms had passed. In general we recommend you not set this and use replication for durability and allow the operating system's background flush capabilities as it is more efficient.
        :param builtins.str index_interval_bytes: This setting controls how frequently Kafka adds an index entry to its offset index. The default setting ensures that we index a message roughly every 4096 bytes. More indexing allows reads to jump closer to the exact position in the log but makes the index larger. You probably don't need to change this.
        :param builtins.str local_retention_bytes: This configuration controls the maximum bytes tiered storage will retain segment files locally before it will discard old log segments to free up space. If set to -2, the limit is equal to overall retention time. If set to -1, no limit is applied but it's possible only if overall retention is also -1.
        :param builtins.str local_retention_ms: This configuration controls the maximum time tiered storage will retain segment files locally before it will discard old log segments to free up space. If set to -2, the time limit is equal to overall retention time. If set to -1, no time limit is applied but it's possible only if overall retention is also -1.
        :param builtins.str max_compaction_lag_ms: The maximum time a message will remain ineligible for compaction in the log. Only applicable for logs that are being compacted.
        :param builtins.str max_message_bytes: The largest record batch size allowed by Kafka (after compression if compression is enabled). If this is increased and there are consumers older than 0.10.2, the consumers' fetch size must also be increased so that the they can fetch record batches this large. In the latest message format version, records are always grouped into batches for efficiency. In previous message format versions, uncompressed records are not grouped into batches and this limit only applies to a single record in that case.
        :param builtins.bool message_downconversion_enable: This configuration controls whether down-conversion of message formats is enabled to satisfy consume requests. When set to false, broker will not perform down-conversion for consumers expecting an older message format. The broker responds with UNSUPPORTED_VERSION error for consume requests from such older clients. This configuration does not apply to any message format conversion that might be required for replication to followers.
        :param builtins.str message_format_version: Specify the message format version the broker will use to append messages to the logs. The value should be a valid ApiVersion. Some examples are: 0.8.2, 0.9.0.0, 0.10.0, check ApiVersion for more details. By setting a particular message format version, the user is certifying that all the existing messages on disk are smaller or equal than the specified version. Setting this value incorrectly will cause consumers with older versions to break as they will receive messages with a format that they don't understand. The possible values are `0.10.0`, `0.10.0-IV0`, `0.10.0-IV1`, `0.10.1`, `0.10.1-IV0`, `0.10.1-IV1`, `0.10.1-IV2`, `0.10.2`, `0.10.2-IV0`, `0.11.0`, `0.11.0-IV0`, `0.11.0-IV1`, `0.11.0-IV2`, `0.8.0`, `0.8.1`, `0.8.2`, `0.9.0`, `1.0`, `1.0-IV0`, `1.1`, `1.1-IV0`, `2.0`, `2.0-IV0`, `2.0-IV1`, `2.1`, `2.1-IV0`, `2.1-IV1`, `2.1-IV2`, `2.2`, `2.2-IV0`, `2.2-IV1`, `2.3`, `2.3-IV0`, `2.3-IV1`, `2.4`, `2.4-IV0`, `2.4-IV1`, `2.5`, `2.5-IV0`, `2.6`, `2.6-IV0`, `2.7`, `2.7-IV0`, `2.7-IV1`, `2.7-IV2`, `2.8`, `2.8-IV0`, `2.8-IV1`, `3.0`, `3.0-IV0`, `3.0-IV1`, `3.1`, `3.1-IV0`, `3.2`, `3.2-IV0`, `3.3`, `3.3-IV0`, `3.3-IV1`, `3.3-IV2`, `3.3-IV3`, `3.4`, `3.4-IV0`, `3.5`, `3.5-IV0`, `3.5-IV1`, `3.5-IV2`, `3.6`, `3.6-IV0`, `3.6-IV1`, `3.6-IV2`, `3.7`, `3.7-IV0`, `3.7-IV1`, `3.7-IV2`, `3.7-IV3`, `3.7-IV4`, `3.8`, `3.8-IV0`, `3.9`, `3.9-IV0`, `3.9-IV1`, `4.0`, `4.0-IV0`, `4.1` and `4.1-IV0`.
        :param builtins.str message_timestamp_difference_max_ms: The maximum difference allowed between the timestamp when a broker receives a message and the timestamp specified in the message. If message.timestamp.type=CreateTime, a message will be rejected if the difference in timestamp exceeds this threshold. This configuration is ignored if message.timestamp.type=LogAppendTime.
        :param builtins.str message_timestamp_type: Define whether the timestamp in the message is message create time or log append time. The possible values are `CreateTime` and `LogAppendTime`.
        :param builtins.float min_cleanable_dirty_ratio: This configuration controls how frequently the log compactor will attempt to clean the log (assuming log compaction is enabled). By default we will avoid cleaning a log where more than 50% of the log has been compacted. This ratio bounds the maximum space wasted in the log by duplicates (at 50% at most 50% of the log could be duplicates). A higher ratio will mean fewer, more efficient cleanings but will mean more wasted space in the log. If the max.compaction.lag.ms or the min.compaction.lag.ms configurations are also specified, then the log compactor considers the log to be eligible for compaction as soon as either: (i) the dirty ratio threshold has been met and the log has had dirty (uncompacted) records for at least the min.compaction.lag.ms duration, or (ii) if the log has had dirty (uncompacted) records for at most the max.compaction.lag.ms period.
        :param builtins.str min_compaction_lag_ms: The minimum time a message will remain uncompacted in the log. Only applicable for logs that are being compacted.
        :param builtins.str min_insync_replicas: When a producer sets acks to 'all' (or '-1'), this configuration specifies the minimum number of replicas that must acknowledge a write for the write to be considered successful. If this minimum cannot be met, then the producer will raise an exception (either NotEnoughReplicas or NotEnoughReplicasAfterAppend). When used together, min.insync.replicas and acks allow you to enforce greater durability guarantees. A typical scenario would be to create a topic with a replication factor of 3, set min.insync.replicas to 2, and produce with acks of 'all'. This will ensure that the producer raises an exception if a majority of replicas do not receive a write.
        :param builtins.bool preallocate: True if we should preallocate the file on disk when creating a new log segment.
        :param builtins.bool remote_storage_enable: Indicates whether tiered storage should be enabled.
        :param builtins.str retention_bytes: This configuration controls the maximum size a partition (which consists of log segments) can grow to before we will discard old log segments to free up space if we are using the 'delete' retention policy. By default there is no size limit only a time limit. Since this limit is enforced at the partition level, multiply it by the number of partitions to compute the topic retention in bytes.
        :param builtins.str retention_ms: This configuration controls the maximum time we will retain a log before we will discard old log segments to free up space if we are using the 'delete' retention policy. This represents an SLA on how soon consumers must read their data. If set to -1, no time limit is applied.
        :param builtins.str segment_bytes: This configuration controls the size of the index that maps offsets to file positions. We preallocate this index file and shrink it only after log rolls. You generally should not need to change this setting.
        :param builtins.str segment_index_bytes: This configuration controls the size of the index that maps offsets to file positions. We preallocate this index file and shrink it only after log rolls. You generally should not need to change this setting.
        :param builtins.str segment_jitter_ms: The maximum random jitter subtracted from the scheduled segment roll time to avoid thundering herds of segment rolling
        :param builtins.str segment_ms: This configuration controls the period of time after which Kafka will force the log to roll even if the segment file isn't full to ensure that retention can delete or compact old data. Setting this to a very low value has consequences, and the Aiven management plane ignores values less than 10 seconds.
        :param builtins.bool unclean_leader_election_enable: Indicates whether to enable replicas not in the ISR set to be elected as leader as a last resort, even though doing so may result in data loss.
        """
        if cleanup_policy is not None:
            pulumi.set(__self__, "cleanup_policy", cleanup_policy)
        if compression_type is not None:
            pulumi.set(__self__, "compression_type", compression_type)
        if delete_retention_ms is not None:
            pulumi.set(__self__, "delete_retention_ms", delete_retention_ms)
        if file_delete_delay_ms is not None:
            pulumi.set(__self__, "file_delete_delay_ms", file_delete_delay_ms)
        if flush_messages is not None:
            pulumi.set(__self__, "flush_messages", flush_messages)
        if flush_ms is not None:
            pulumi.set(__self__, "flush_ms", flush_ms)
        if index_interval_bytes is not None:
            pulumi.set(__self__, "index_interval_bytes", index_interval_bytes)
        if local_retention_bytes is not None:
            pulumi.set(__self__, "local_retention_bytes", local_retention_bytes)
        if local_retention_ms is not None:
            pulumi.set(__self__, "local_retention_ms", local_retention_ms)
        if max_compaction_lag_ms is not None:
            pulumi.set(__self__, "max_compaction_lag_ms", max_compaction_lag_ms)
        if max_message_bytes is not None:
            pulumi.set(__self__, "max_message_bytes", max_message_bytes)
        if message_downconversion_enable is not None:
            pulumi.set(__self__, "message_downconversion_enable", message_downconversion_enable)
        if message_format_version is not None:
            pulumi.set(__self__, "message_format_version", message_format_version)
        if message_timestamp_difference_max_ms is not None:
            pulumi.set(__self__, "message_timestamp_difference_max_ms", message_timestamp_difference_max_ms)
        if message_timestamp_type is not None:
            pulumi.set(__self__, "message_timestamp_type", message_timestamp_type)
        if min_cleanable_dirty_ratio is not None:
            pulumi.set(__self__, "min_cleanable_dirty_ratio", min_cleanable_dirty_ratio)
        if min_compaction_lag_ms is not None:
            pulumi.set(__self__, "min_compaction_lag_ms", min_compaction_lag_ms)
        if min_insync_replicas is not None:
            pulumi.set(__self__, "min_insync_replicas", min_insync_replicas)
        if preallocate is not None:
            pulumi.set(__self__, "preallocate", preallocate)
        if remote_storage_enable is not None:
            pulumi.set(__self__, "remote_storage_enable", remote_storage_enable)
        if retention_bytes is not None:
            pulumi.set(__self__, "retention_bytes", retention_bytes)
        if retention_ms is not None:
            pulumi.set(__self__, "retention_ms", retention_ms)
        if segment_bytes is not None:
            pulumi.set(__self__, "segment_bytes", segment_bytes)
        if segment_index_bytes is not None:
            pulumi.set(__self__, "segment_index_bytes", segment_index_bytes)
        if segment_jitter_ms is not None:
            pulumi.set(__self__, "segment_jitter_ms", segment_jitter_ms)
        if segment_ms is not None:
            pulumi.set(__self__, "segment_ms", segment_ms)
        if unclean_leader_election_enable is not None:
            pulumi.set(__self__, "unclean_leader_election_enable", unclean_leader_election_enable)

    @property
    @pulumi.getter(name="cleanupPolicy")
    def cleanup_policy(self) -> Optional[builtins.str]:
        """
        The retention policy to use on old segments. Possible values include 'delete', 'compact', or a comma-separated list of them. The default policy ('delete') will discard old segments when their retention time or size limit has been reached. The 'compact' setting will enable log compaction on the topic. The possible values are `compact`, `compact,delete` and `delete`.
        """
        return pulumi.get(self, "cleanup_policy")

    @property
    @pulumi.getter(name="compressionType")
    def compression_type(self) -> Optional[builtins.str]:
        """
        Specify the final compression type for a given topic. This configuration accepts the standard compression codecs ('gzip', 'snappy', 'lz4', 'zstd'). It additionally accepts 'uncompressed' which is equivalent to no compression; and 'producer' which means retain the original compression codec set by the producer. The possible values are `gzip`, `lz4`, `producer`, `snappy`, `uncompressed` and `zstd`.
        """
        return pulumi.get(self, "compression_type")

    @property
    @pulumi.getter(name="deleteRetentionMs")
    def delete_retention_ms(self) -> Optional[builtins.str]:
        """
        The amount of time to retain delete tombstone markers for log compacted topics. This setting also gives a bound on the time in which a consumer must complete a read if they begin from offset 0 to ensure that they get a valid snapshot of the final stage (otherwise delete tombstones may be collected before they complete their scan).
        """
        return pulumi.get(self, "delete_retention_ms")

    @property
    @pulumi.getter(name="fileDeleteDelayMs")
    def file_delete_delay_ms(self) -> Optional[builtins.str]:
        """
        The time to wait before deleting a file from the filesystem.
        """
        return pulumi.get(self, "file_delete_delay_ms")

    @property
    @pulumi.getter(name="flushMessages")
    def flush_messages(self) -> Optional[builtins.str]:
        """
        This setting allows specifying an interval at which we will force an fsync of data written to the log. For example if this was set to 1 we would fsync after every message; if it were 5 we would fsync after every five messages. In general we recommend you not set this and use replication for durability and allow the operating system's background flush capabilities as it is more efficient.
        """
        return pulumi.get(self, "flush_messages")

    @property
    @pulumi.getter(name="flushMs")
    def flush_ms(self) -> Optional[builtins.str]:
        """
        This setting allows specifying a time interval at which we will force an fsync of data written to the log. For example if this was set to 1000 we would fsync after 1000 ms had passed. In general we recommend you not set this and use replication for durability and allow the operating system's background flush capabilities as it is more efficient.
        """
        return pulumi.get(self, "flush_ms")

    @property
    @pulumi.getter(name="indexIntervalBytes")
    def index_interval_bytes(self) -> Optional[builtins.str]:
        """
        This setting controls how frequently Kafka adds an index entry to its offset index. The default setting ensures that we index a message roughly every 4096 bytes. More indexing allows reads to jump closer to the exact position in the log but makes the index larger. You probably don't need to change this.
        """
        return pulumi.get(self, "index_interval_bytes")

    @property
    @pulumi.getter(name="localRetentionBytes")
    def local_retention_bytes(self) -> Optional[builtins.str]:
        """
        This configuration controls the maximum bytes tiered storage will retain segment files locally before it will discard old log segments to free up space. If set to -2, the limit is equal to overall retention time. If set to -1, no limit is applied but it's possible only if overall retention is also -1.
        """
        return pulumi.get(self, "local_retention_bytes")

    @property
    @pulumi.getter(name="localRetentionMs")
    def local_retention_ms(self) -> Optional[builtins.str]:
        """
        This configuration controls the maximum time tiered storage will retain segment files locally before it will discard old log segments to free up space. If set to -2, the time limit is equal to overall retention time. If set to -1, no time limit is applied but it's possible only if overall retention is also -1.
        """
        return pulumi.get(self, "local_retention_ms")

    @property
    @pulumi.getter(name="maxCompactionLagMs")
    def max_compaction_lag_ms(self) -> Optional[builtins.str]:
        """
        The maximum time a message will remain ineligible for compaction in the log. Only applicable for logs that are being compacted.
        """
        return pulumi.get(self, "max_compaction_lag_ms")

    @property
    @pulumi.getter(name="maxMessageBytes")
    def max_message_bytes(self) -> Optional[builtins.str]:
        """
        The largest record batch size allowed by Kafka (after compression if compression is enabled). If this is increased and there are consumers older than 0.10.2, the consumers' fetch size must also be increased so that the they can fetch record batches this large. In the latest message format version, records are always grouped into batches for efficiency. In previous message format versions, uncompressed records are not grouped into batches and this limit only applies to a single record in that case.
        """
        return pulumi.get(self, "max_message_bytes")

    @property
    @pulumi.getter(name="messageDownconversionEnable")
    def message_downconversion_enable(self) -> Optional[builtins.bool]:
        """
        This configuration controls whether down-conversion of message formats is enabled to satisfy consume requests. When set to false, broker will not perform down-conversion for consumers expecting an older message format. The broker responds with UNSUPPORTED_VERSION error for consume requests from such older clients. This configuration does not apply to any message format conversion that might be required for replication to followers.
        """
        return pulumi.get(self, "message_downconversion_enable")

    @property
    @pulumi.getter(name="messageFormatVersion")
    def message_format_version(self) -> Optional[builtins.str]:
        """
        Specify the message format version the broker will use to append messages to the logs. The value should be a valid ApiVersion. Some examples are: 0.8.2, 0.9.0.0, 0.10.0, check ApiVersion for more details. By setting a particular message format version, the user is certifying that all the existing messages on disk are smaller or equal than the specified version. Setting this value incorrectly will cause consumers with older versions to break as they will receive messages with a format that they don't understand. The possible values are `0.10.0`, `0.10.0-IV0`, `0.10.0-IV1`, `0.10.1`, `0.10.1-IV0`, `0.10.1-IV1`, `0.10.1-IV2`, `0.10.2`, `0.10.2-IV0`, `0.11.0`, `0.11.0-IV0`, `0.11.0-IV1`, `0.11.0-IV2`, `0.8.0`, `0.8.1`, `0.8.2`, `0.9.0`, `1.0`, `1.0-IV0`, `1.1`, `1.1-IV0`, `2.0`, `2.0-IV0`, `2.0-IV1`, `2.1`, `2.1-IV0`, `2.1-IV1`, `2.1-IV2`, `2.2`, `2.2-IV0`, `2.2-IV1`, `2.3`, `2.3-IV0`, `2.3-IV1`, `2.4`, `2.4-IV0`, `2.4-IV1`, `2.5`, `2.5-IV0`, `2.6`, `2.6-IV0`, `2.7`, `2.7-IV0`, `2.7-IV1`, `2.7-IV2`, `2.8`, `2.8-IV0`, `2.8-IV1`, `3.0`, `3.0-IV0`, `3.0-IV1`, `3.1`, `3.1-IV0`, `3.2`, `3.2-IV0`, `3.3`, `3.3-IV0`, `3.3-IV1`, `3.3-IV2`, `3.3-IV3`, `3.4`, `3.4-IV0`, `3.5`, `3.5-IV0`, `3.5-IV1`, `3.5-IV2`, `3.6`, `3.6-IV0`, `3.6-IV1`, `3.6-IV2`, `3.7`, `3.7-IV0`, `3.7-IV1`, `3.7-IV2`, `3.7-IV3`, `3.7-IV4`, `3.8`, `3.8-IV0`, `3.9`, `3.9-IV0`, `3.9-IV1`, `4.0`, `4.0-IV0`, `4.1` and `4.1-IV0`.
        """
        return pulumi.get(self, "message_format_version")

    @property
    @pulumi.getter(name="messageTimestampDifferenceMaxMs")
    def message_timestamp_difference_max_ms(self) -> Optional[builtins.str]:
        """
        The maximum difference allowed between the timestamp when a broker receives a message and the timestamp specified in the message. If message.timestamp.type=CreateTime, a message will be rejected if the difference in timestamp exceeds this threshold. This configuration is ignored if message.timestamp.type=LogAppendTime.
        """
        return pulumi.get(self, "message_timestamp_difference_max_ms")

    @property
    @pulumi.getter(name="messageTimestampType")
    def message_timestamp_type(self) -> Optional[builtins.str]:
        """
        Define whether the timestamp in the message is message create time or log append time. The possible values are `CreateTime` and `LogAppendTime`.
        """
        return pulumi.get(self, "message_timestamp_type")

    @property
    @pulumi.getter(name="minCleanableDirtyRatio")
    def min_cleanable_dirty_ratio(self) -> Optional[builtins.float]:
        """
        This configuration controls how frequently the log compactor will attempt to clean the log (assuming log compaction is enabled). By default we will avoid cleaning a log where more than 50% of the log has been compacted. This ratio bounds the maximum space wasted in the log by duplicates (at 50% at most 50% of the log could be duplicates). A higher ratio will mean fewer, more efficient cleanings but will mean more wasted space in the log. If the max.compaction.lag.ms or the min.compaction.lag.ms configurations are also specified, then the log compactor considers the log to be eligible for compaction as soon as either: (i) the dirty ratio threshold has been met and the log has had dirty (uncompacted) records for at least the min.compaction.lag.ms duration, or (ii) if the log has had dirty (uncompacted) records for at most the max.compaction.lag.ms period.
        """
        return pulumi.get(self, "min_cleanable_dirty_ratio")

    @property
    @pulumi.getter(name="minCompactionLagMs")
    def min_compaction_lag_ms(self) -> Optional[builtins.str]:
        """
        The minimum time a message will remain uncompacted in the log. Only applicable for logs that are being compacted.
        """
        return pulumi.get(self, "min_compaction_lag_ms")

    @property
    @pulumi.getter(name="minInsyncReplicas")
    def min_insync_replicas(self) -> Optional[builtins.str]:
        """
        When a producer sets acks to 'all' (or '-1'), this configuration specifies the minimum number of replicas that must acknowledge a write for the write to be considered successful. If this minimum cannot be met, then the producer will raise an exception (either NotEnoughReplicas or NotEnoughReplicasAfterAppend). When used together, min.insync.replicas and acks allow you to enforce greater durability guarantees. A typical scenario would be to create a topic with a replication factor of 3, set min.insync.replicas to 2, and produce with acks of 'all'. This will ensure that the producer raises an exception if a majority of replicas do not receive a write.
        """
        return pulumi.get(self, "min_insync_replicas")

    @property
    @pulumi.getter
    def preallocate(self) -> Optional[builtins.bool]:
        """
        True if we should preallocate the file on disk when creating a new log segment.
        """
        return pulumi.get(self, "preallocate")

    @property
    @pulumi.getter(name="remoteStorageEnable")
    def remote_storage_enable(self) -> Optional[builtins.bool]:
        """
        Indicates whether tiered storage should be enabled.
        """
        return pulumi.get(self, "remote_storage_enable")

    @property
    @pulumi.getter(name="retentionBytes")
    def retention_bytes(self) -> Optional[builtins.str]:
        """
        This configuration controls the maximum size a partition (which consists of log segments) can grow to before we will discard old log segments to free up space if we are using the 'delete' retention policy. By default there is no size limit only a time limit. Since this limit is enforced at the partition level, multiply it by the number of partitions to compute the topic retention in bytes.
        """
        return pulumi.get(self, "retention_bytes")

    @property
    @pulumi.getter(name="retentionMs")
    def retention_ms(self) -> Optional[builtins.str]:
        """
        This configuration controls the maximum time we will retain a log before we will discard old log segments to free up space if we are using the 'delete' retention policy. This represents an SLA on how soon consumers must read their data. If set to -1, no time limit is applied.
        """
        return pulumi.get(self, "retention_ms")

    @property
    @pulumi.getter(name="segmentBytes")
    def segment_bytes(self) -> Optional[builtins.str]:
        """
        This configuration controls the size of the index that maps offsets to file positions. We preallocate this index file and shrink it only after log rolls. You generally should not need to change this setting.
        """
        return pulumi.get(self, "segment_bytes")

    @property
    @pulumi.getter(name="segmentIndexBytes")
    def segment_index_bytes(self) -> Optional[builtins.str]:
        """
        This configuration controls the size of the index that maps offsets to file positions. We preallocate this index file and shrink it only after log rolls. You generally should not need to change this setting.
        """
        return pulumi.get(self, "segment_index_bytes")

    @property
    @pulumi.getter(name="segmentJitterMs")
    def segment_jitter_ms(self) -> Optional[builtins.str]:
        """
        The maximum random jitter subtracted from the scheduled segment roll time to avoid thundering herds of segment rolling
        """
        return pulumi.get(self, "segment_jitter_ms")

    @property
    @pulumi.getter(name="segmentMs")
    def segment_ms(self) -> Optional[builtins.str]:
        """
        This configuration controls the period of time after which Kafka will force the log to roll even if the segment file isn't full to ensure that retention can delete or compact old data. Setting this to a very low value has consequences, and the Aiven management plane ignores values less than 10 seconds.
        """
        return pulumi.get(self, "segment_ms")

    @property
    @pulumi.getter(name="uncleanLeaderElectionEnable")
    def unclean_leader_election_enable(self) -> Optional[builtins.bool]:
        """
        Indicates whether to enable replicas not in the ISR set to be elected as leader as a last resort, even though doing so may result in data loss.
        """
        return pulumi.get(self, "unclean_leader_election_enable")


@pulumi.output_type
class KafkaTopicTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: Optional[builtins.str] = None):
        """
        :param builtins.str key: Tag key. Maximum length: `64`.
        :param builtins.str value: Tag value. Maximum length: `256`.
        """
        pulumi.set(__self__, "key", key)
        if value is not None:
            pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Tag key. Maximum length: `64`.
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> Optional[builtins.str]:
        """
        Tag value. Maximum length: `256`.
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class M3AggregatorComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in M3AggregatorComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        M3AggregatorComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        M3AggregatorComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class M3AggregatorM3aggregator(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "aggregatorHttpUri":
            suggest = "aggregator_http_uri"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in M3AggregatorM3aggregator. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        M3AggregatorM3aggregator.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        M3AggregatorM3aggregator.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 aggregator_http_uri: Optional[builtins.str] = None,
                 uris: Optional[Sequence[builtins.str]] = None):
        """
        :param builtins.str aggregator_http_uri: M3 Aggregator HTTP URI.
        :param Sequence[builtins.str] uris: M3 Aggregator server URIs.
        """
        if aggregator_http_uri is not None:
            pulumi.set(__self__, "aggregator_http_uri", aggregator_http_uri)
        if uris is not None:
            pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter(name="aggregatorHttpUri")
    def aggregator_http_uri(self) -> Optional[builtins.str]:
        """
        M3 Aggregator HTTP URI.
        """
        return pulumi.get(self, "aggregator_http_uri")

    @property
    @pulumi.getter
    def uris(self) -> Optional[Sequence[builtins.str]]:
        """
        M3 Aggregator server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class M3AggregatorM3aggregatorUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "customDomain":
            suggest = "custom_domain"
        elif key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "m3Version":
            suggest = "m3_version"
        elif key == "m3aggregatorVersion":
            suggest = "m3aggregator_version"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "staticIps":
            suggest = "static_ips"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in M3AggregatorM3aggregatorUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        M3AggregatorM3aggregatorUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        M3AggregatorM3aggregatorUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 custom_domain: Optional[builtins.str] = None,
                 ip_filter_objects: Optional[Sequence['outputs.M3AggregatorM3aggregatorUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 m3_version: Optional[builtins.str] = None,
                 m3aggregator_version: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str custom_domain: Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        :param Sequence['M3AggregatorM3aggregatorUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param builtins.str m3_version: Enum: `1.1`, `1.2`, `1.5`, and newer. M3 major version (deprecated, use m3aggregator_version).
        :param builtins.str m3aggregator_version: Enum: `1.1`, `1.2`, `1.5`, and newer. M3 major version (the minimum compatible version).
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if custom_domain is not None:
            pulumi.set(__self__, "custom_domain", custom_domain)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if m3_version is not None:
            pulumi.set(__self__, "m3_version", m3_version)
        if m3aggregator_version is not None:
            pulumi.set(__self__, "m3aggregator_version", m3aggregator_version)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="customDomain")
    def custom_domain(self) -> Optional[builtins.str]:
        """
        Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        """
        return pulumi.get(self, "custom_domain")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.M3AggregatorM3aggregatorUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="m3Version")
    def m3_version(self) -> Optional[builtins.str]:
        """
        Enum: `1.1`, `1.2`, `1.5`, and newer. M3 major version (deprecated, use m3aggregator_version).
        """
        return pulumi.get(self, "m3_version")

    @property
    @pulumi.getter(name="m3aggregatorVersion")
    def m3aggregator_version(self) -> Optional[builtins.str]:
        """
        Enum: `1.1`, `1.2`, `1.5`, and newer. M3 major version (the minimum compatible version).
        """
        return pulumi.get(self, "m3aggregator_version")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class M3AggregatorM3aggregatorUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class M3AggregatorServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in M3AggregatorServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        M3AggregatorServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        M3AggregatorServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class M3AggregatorTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class M3AggregatorTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class M3DbComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in M3DbComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        M3DbComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        M3DbComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class M3DbM3db(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "httpClusterUri":
            suggest = "http_cluster_uri"
        elif key == "httpNodeUri":
            suggest = "http_node_uri"
        elif key == "influxdbUri":
            suggest = "influxdb_uri"
        elif key == "prometheusRemoteReadUri":
            suggest = "prometheus_remote_read_uri"
        elif key == "prometheusRemoteWriteUri":
            suggest = "prometheus_remote_write_uri"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in M3DbM3db. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        M3DbM3db.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        M3DbM3db.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 http_cluster_uri: Optional[builtins.str] = None,
                 http_node_uri: Optional[builtins.str] = None,
                 influxdb_uri: Optional[builtins.str] = None,
                 prometheus_remote_read_uri: Optional[builtins.str] = None,
                 prometheus_remote_write_uri: Optional[builtins.str] = None,
                 uris: Optional[Sequence[builtins.str]] = None):
        """
        :param builtins.str http_cluster_uri: M3DB cluster URI.
        :param builtins.str http_node_uri: M3DB node URI.
        :param builtins.str influxdb_uri: InfluxDB URI.
        :param builtins.str prometheus_remote_read_uri: Prometheus remote read URI.
        :param builtins.str prometheus_remote_write_uri: Prometheus remote write URI.
        :param Sequence[builtins.str] uris: M3DB server URIs.
        """
        if http_cluster_uri is not None:
            pulumi.set(__self__, "http_cluster_uri", http_cluster_uri)
        if http_node_uri is not None:
            pulumi.set(__self__, "http_node_uri", http_node_uri)
        if influxdb_uri is not None:
            pulumi.set(__self__, "influxdb_uri", influxdb_uri)
        if prometheus_remote_read_uri is not None:
            pulumi.set(__self__, "prometheus_remote_read_uri", prometheus_remote_read_uri)
        if prometheus_remote_write_uri is not None:
            pulumi.set(__self__, "prometheus_remote_write_uri", prometheus_remote_write_uri)
        if uris is not None:
            pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter(name="httpClusterUri")
    def http_cluster_uri(self) -> Optional[builtins.str]:
        """
        M3DB cluster URI.
        """
        return pulumi.get(self, "http_cluster_uri")

    @property
    @pulumi.getter(name="httpNodeUri")
    def http_node_uri(self) -> Optional[builtins.str]:
        """
        M3DB node URI.
        """
        return pulumi.get(self, "http_node_uri")

    @property
    @pulumi.getter(name="influxdbUri")
    def influxdb_uri(self) -> Optional[builtins.str]:
        """
        InfluxDB URI.
        """
        return pulumi.get(self, "influxdb_uri")

    @property
    @pulumi.getter(name="prometheusRemoteReadUri")
    def prometheus_remote_read_uri(self) -> Optional[builtins.str]:
        """
        Prometheus remote read URI.
        """
        return pulumi.get(self, "prometheus_remote_read_uri")

    @property
    @pulumi.getter(name="prometheusRemoteWriteUri")
    def prometheus_remote_write_uri(self) -> Optional[builtins.str]:
        """
        Prometheus remote write URI.
        """
        return pulumi.get(self, "prometheus_remote_write_uri")

    @property
    @pulumi.getter
    def uris(self) -> Optional[Sequence[builtins.str]]:
        """
        M3DB server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class M3DbM3dbUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "additionalBackupRegions":
            suggest = "additional_backup_regions"
        elif key == "customDomain":
            suggest = "custom_domain"
        elif key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "m3Version":
            suggest = "m3_version"
        elif key == "m3coordinatorEnableGraphiteCarbonIngest":
            suggest = "m3coordinator_enable_graphite_carbon_ingest"
        elif key == "m3dbVersion":
            suggest = "m3db_version"
        elif key == "privateAccess":
            suggest = "private_access"
        elif key == "projectToForkFrom":
            suggest = "project_to_fork_from"
        elif key == "publicAccess":
            suggest = "public_access"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "serviceToForkFrom":
            suggest = "service_to_fork_from"
        elif key == "staticIps":
            suggest = "static_ips"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in M3DbM3dbUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        M3DbM3dbUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        M3DbM3dbUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 custom_domain: Optional[builtins.str] = None,
                 ip_filter_objects: Optional[Sequence['outputs.M3DbM3dbUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 limits: Optional['outputs.M3DbM3dbUserConfigLimits'] = None,
                 m3: Optional['outputs.M3DbM3dbUserConfigM3'] = None,
                 m3_version: Optional[builtins.str] = None,
                 m3coordinator_enable_graphite_carbon_ingest: Optional[builtins.bool] = None,
                 m3db_version: Optional[builtins.str] = None,
                 namespaces: Optional[Sequence['outputs.M3DbM3dbUserConfigNamespace']] = None,
                 private_access: Optional['outputs.M3DbM3dbUserConfigPrivateAccess'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.M3DbM3dbUserConfigPublicAccess'] = None,
                 rules: Optional['outputs.M3DbM3dbUserConfigRules'] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.str custom_domain: Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        :param Sequence['M3DbM3dbUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'M3DbM3dbUserConfigLimitsArgs' limits: M3 limits
        :param 'M3DbM3dbUserConfigM3Args' m3: M3 specific configuration options
        :param builtins.str m3_version: Enum: `1.1`, `1.2`, `1.5`, and newer. M3 major version (deprecated, use m3db_version).
        :param builtins.bool m3coordinator_enable_graphite_carbon_ingest: Enables access to Graphite Carbon plaintext metrics ingestion. It can be enabled only for services inside VPCs. The metrics are written to aggregated namespaces only.
        :param builtins.str m3db_version: Enum: `1.1`, `1.2`, `1.5`, and newer. M3 major version (the minimum compatible version).
        :param Sequence['M3DbM3dbUserConfigNamespaceArgs'] namespaces: List of M3 namespaces
        :param 'M3DbM3dbUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'M3DbM3dbUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param 'M3DbM3dbUserConfigRulesArgs' rules: M3 rules
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if custom_domain is not None:
            pulumi.set(__self__, "custom_domain", custom_domain)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if limits is not None:
            pulumi.set(__self__, "limits", limits)
        if m3 is not None:
            pulumi.set(__self__, "m3", m3)
        if m3_version is not None:
            pulumi.set(__self__, "m3_version", m3_version)
        if m3coordinator_enable_graphite_carbon_ingest is not None:
            pulumi.set(__self__, "m3coordinator_enable_graphite_carbon_ingest", m3coordinator_enable_graphite_carbon_ingest)
        if m3db_version is not None:
            pulumi.set(__self__, "m3db_version", m3db_version)
        if namespaces is not None:
            pulumi.set(__self__, "namespaces", namespaces)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if rules is not None:
            pulumi.set(__self__, "rules", rules)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="customDomain")
    def custom_domain(self) -> Optional[builtins.str]:
        """
        Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        """
        return pulumi.get(self, "custom_domain")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.M3DbM3dbUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter
    def limits(self) -> Optional['outputs.M3DbM3dbUserConfigLimits']:
        """
        M3 limits
        """
        return pulumi.get(self, "limits")

    @property
    @pulumi.getter
    def m3(self) -> Optional['outputs.M3DbM3dbUserConfigM3']:
        """
        M3 specific configuration options
        """
        return pulumi.get(self, "m3")

    @property
    @pulumi.getter(name="m3Version")
    def m3_version(self) -> Optional[builtins.str]:
        """
        Enum: `1.1`, `1.2`, `1.5`, and newer. M3 major version (deprecated, use m3db_version).
        """
        return pulumi.get(self, "m3_version")

    @property
    @pulumi.getter(name="m3coordinatorEnableGraphiteCarbonIngest")
    def m3coordinator_enable_graphite_carbon_ingest(self) -> Optional[builtins.bool]:
        """
        Enables access to Graphite Carbon plaintext metrics ingestion. It can be enabled only for services inside VPCs. The metrics are written to aggregated namespaces only.
        """
        return pulumi.get(self, "m3coordinator_enable_graphite_carbon_ingest")

    @property
    @pulumi.getter(name="m3dbVersion")
    def m3db_version(self) -> Optional[builtins.str]:
        """
        Enum: `1.1`, `1.2`, `1.5`, and newer. M3 major version (the minimum compatible version).
        """
        return pulumi.get(self, "m3db_version")

    @property
    @pulumi.getter
    def namespaces(self) -> Optional[Sequence['outputs.M3DbM3dbUserConfigNamespace']]:
        """
        List of M3 namespaces
        """
        return pulumi.get(self, "namespaces")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.M3DbM3dbUserConfigPrivateAccess']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.M3DbM3dbUserConfigPublicAccess']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter
    def rules(self) -> Optional['outputs.M3DbM3dbUserConfigRules']:
        """
        M3 rules
        """
        return pulumi.get(self, "rules")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class M3DbM3dbUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class M3DbM3dbUserConfigLimits(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "maxRecentlyQueriedSeriesBlocks":
            suggest = "max_recently_queried_series_blocks"
        elif key == "maxRecentlyQueriedSeriesDiskBytesRead":
            suggest = "max_recently_queried_series_disk_bytes_read"
        elif key == "maxRecentlyQueriedSeriesLookback":
            suggest = "max_recently_queried_series_lookback"
        elif key == "queryDocs":
            suggest = "query_docs"
        elif key == "queryRequireExhaustive":
            suggest = "query_require_exhaustive"
        elif key == "querySeries":
            suggest = "query_series"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in M3DbM3dbUserConfigLimits. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        M3DbM3dbUserConfigLimits.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        M3DbM3dbUserConfigLimits.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 max_recently_queried_series_blocks: Optional[builtins.int] = None,
                 max_recently_queried_series_disk_bytes_read: Optional[builtins.int] = None,
                 max_recently_queried_series_lookback: Optional[builtins.str] = None,
                 query_docs: Optional[builtins.int] = None,
                 query_require_exhaustive: Optional[builtins.bool] = None,
                 query_series: Optional[builtins.int] = None):
        """
        :param builtins.int max_recently_queried_series_blocks: The maximum number of blocks that can be read in a given lookback period. Example: `20000`.
        :param builtins.int max_recently_queried_series_disk_bytes_read: The maximum number of disk bytes that can be read in a given lookback period. Example: `104857600`.
        :param builtins.str max_recently_queried_series_lookback: The lookback period for `max_recently_queried_series_blocks` and `max_recently_queried_series_disk_bytes_read`. Example: `15s`.
        :param builtins.int query_docs: The maximum number of docs fetched in single query. Example: `100000`.
        :param builtins.bool query_require_exhaustive: When query limits are exceeded, whether to return error or return partial results.
        :param builtins.int query_series: The maximum number of series fetched in single query. Example: `100000`.
        """
        if max_recently_queried_series_blocks is not None:
            pulumi.set(__self__, "max_recently_queried_series_blocks", max_recently_queried_series_blocks)
        if max_recently_queried_series_disk_bytes_read is not None:
            pulumi.set(__self__, "max_recently_queried_series_disk_bytes_read", max_recently_queried_series_disk_bytes_read)
        if max_recently_queried_series_lookback is not None:
            pulumi.set(__self__, "max_recently_queried_series_lookback", max_recently_queried_series_lookback)
        if query_docs is not None:
            pulumi.set(__self__, "query_docs", query_docs)
        if query_require_exhaustive is not None:
            pulumi.set(__self__, "query_require_exhaustive", query_require_exhaustive)
        if query_series is not None:
            pulumi.set(__self__, "query_series", query_series)

    @property
    @pulumi.getter(name="maxRecentlyQueriedSeriesBlocks")
    def max_recently_queried_series_blocks(self) -> Optional[builtins.int]:
        """
        The maximum number of blocks that can be read in a given lookback period. Example: `20000`.
        """
        return pulumi.get(self, "max_recently_queried_series_blocks")

    @property
    @pulumi.getter(name="maxRecentlyQueriedSeriesDiskBytesRead")
    def max_recently_queried_series_disk_bytes_read(self) -> Optional[builtins.int]:
        """
        The maximum number of disk bytes that can be read in a given lookback period. Example: `104857600`.
        """
        return pulumi.get(self, "max_recently_queried_series_disk_bytes_read")

    @property
    @pulumi.getter(name="maxRecentlyQueriedSeriesLookback")
    def max_recently_queried_series_lookback(self) -> Optional[builtins.str]:
        """
        The lookback period for `max_recently_queried_series_blocks` and `max_recently_queried_series_disk_bytes_read`. Example: `15s`.
        """
        return pulumi.get(self, "max_recently_queried_series_lookback")

    @property
    @pulumi.getter(name="queryDocs")
    def query_docs(self) -> Optional[builtins.int]:
        """
        The maximum number of docs fetched in single query. Example: `100000`.
        """
        return pulumi.get(self, "query_docs")

    @property
    @pulumi.getter(name="queryRequireExhaustive")
    def query_require_exhaustive(self) -> Optional[builtins.bool]:
        """
        When query limits are exceeded, whether to return error or return partial results.
        """
        return pulumi.get(self, "query_require_exhaustive")

    @property
    @pulumi.getter(name="querySeries")
    def query_series(self) -> Optional[builtins.int]:
        """
        The maximum number of series fetched in single query. Example: `100000`.
        """
        return pulumi.get(self, "query_series")


@pulumi.output_type
class M3DbM3dbUserConfigM3(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "tagOptions":
            suggest = "tag_options"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in M3DbM3dbUserConfigM3. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        M3DbM3dbUserConfigM3.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        M3DbM3dbUserConfigM3.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 tag_options: Optional['outputs.M3DbM3dbUserConfigM3TagOptions'] = None):
        """
        :param 'M3DbM3dbUserConfigM3TagOptionsArgs' tag_options: M3 Tag Options
        """
        if tag_options is not None:
            pulumi.set(__self__, "tag_options", tag_options)

    @property
    @pulumi.getter(name="tagOptions")
    def tag_options(self) -> Optional['outputs.M3DbM3dbUserConfigM3TagOptions']:
        """
        M3 Tag Options
        """
        return pulumi.get(self, "tag_options")


@pulumi.output_type
class M3DbM3dbUserConfigM3TagOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "allowTagNameDuplicates":
            suggest = "allow_tag_name_duplicates"
        elif key == "allowTagValueEmpty":
            suggest = "allow_tag_value_empty"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in M3DbM3dbUserConfigM3TagOptions. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        M3DbM3dbUserConfigM3TagOptions.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        M3DbM3dbUserConfigM3TagOptions.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 allow_tag_name_duplicates: Optional[builtins.bool] = None,
                 allow_tag_value_empty: Optional[builtins.bool] = None):
        """
        :param builtins.bool allow_tag_name_duplicates: Allows for duplicate tags to appear on series (not allowed by default).
        :param builtins.bool allow_tag_value_empty: Allows for empty tags to appear on series (not allowed by default).
        """
        if allow_tag_name_duplicates is not None:
            pulumi.set(__self__, "allow_tag_name_duplicates", allow_tag_name_duplicates)
        if allow_tag_value_empty is not None:
            pulumi.set(__self__, "allow_tag_value_empty", allow_tag_value_empty)

    @property
    @pulumi.getter(name="allowTagNameDuplicates")
    def allow_tag_name_duplicates(self) -> Optional[builtins.bool]:
        """
        Allows for duplicate tags to appear on series (not allowed by default).
        """
        return pulumi.get(self, "allow_tag_name_duplicates")

    @property
    @pulumi.getter(name="allowTagValueEmpty")
    def allow_tag_value_empty(self) -> Optional[builtins.bool]:
        """
        Allows for empty tags to appear on series (not allowed by default).
        """
        return pulumi.get(self, "allow_tag_value_empty")


@pulumi.output_type
class M3DbM3dbUserConfigNamespace(dict):
    def __init__(__self__, *,
                 name: builtins.str,
                 type: builtins.str,
                 options: Optional['outputs.M3DbM3dbUserConfigNamespaceOptions'] = None,
                 resolution: Optional[builtins.str] = None):
        """
        :param builtins.str name: The name of the namespace. Example: `default`.
        :param builtins.str type: Enum: `aggregated`, `unaggregated`. The type of aggregation (aggregated/unaggregated).
        :param 'M3DbM3dbUserConfigNamespaceOptionsArgs' options: Namespace options
        :param builtins.str resolution: The resolution for an aggregated namespace. Example: `30s`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "type", type)
        if options is not None:
            pulumi.set(__self__, "options", options)
        if resolution is not None:
            pulumi.set(__self__, "resolution", resolution)

    @property
    @pulumi.getter
    def name(self) -> builtins.str:
        """
        The name of the namespace. Example: `default`.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def type(self) -> builtins.str:
        """
        Enum: `aggregated`, `unaggregated`. The type of aggregation (aggregated/unaggregated).
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter
    def options(self) -> Optional['outputs.M3DbM3dbUserConfigNamespaceOptions']:
        """
        Namespace options
        """
        return pulumi.get(self, "options")

    @property
    @pulumi.getter
    def resolution(self) -> Optional[builtins.str]:
        """
        The resolution for an aggregated namespace. Example: `30s`.
        """
        return pulumi.get(self, "resolution")


@pulumi.output_type
class M3DbM3dbUserConfigNamespaceOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "retentionOptions":
            suggest = "retention_options"
        elif key == "snapshotEnabled":
            suggest = "snapshot_enabled"
        elif key == "writesToCommitlog":
            suggest = "writes_to_commitlog"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in M3DbM3dbUserConfigNamespaceOptions. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        M3DbM3dbUserConfigNamespaceOptions.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        M3DbM3dbUserConfigNamespaceOptions.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 retention_options: 'outputs.M3DbM3dbUserConfigNamespaceOptionsRetentionOptions',
                 snapshot_enabled: Optional[builtins.bool] = None,
                 writes_to_commitlog: Optional[builtins.bool] = None):
        """
        :param 'M3DbM3dbUserConfigNamespaceOptionsRetentionOptionsArgs' retention_options: Retention options
        :param builtins.bool snapshot_enabled: Controls whether M3DB will create snapshot files for this namespace.
        :param builtins.bool writes_to_commitlog: Controls whether M3DB will include writes to this namespace in the commitlog.
        """
        pulumi.set(__self__, "retention_options", retention_options)
        if snapshot_enabled is not None:
            pulumi.set(__self__, "snapshot_enabled", snapshot_enabled)
        if writes_to_commitlog is not None:
            pulumi.set(__self__, "writes_to_commitlog", writes_to_commitlog)

    @property
    @pulumi.getter(name="retentionOptions")
    def retention_options(self) -> 'outputs.M3DbM3dbUserConfigNamespaceOptionsRetentionOptions':
        """
        Retention options
        """
        return pulumi.get(self, "retention_options")

    @property
    @pulumi.getter(name="snapshotEnabled")
    def snapshot_enabled(self) -> Optional[builtins.bool]:
        """
        Controls whether M3DB will create snapshot files for this namespace.
        """
        return pulumi.get(self, "snapshot_enabled")

    @property
    @pulumi.getter(name="writesToCommitlog")
    def writes_to_commitlog(self) -> Optional[builtins.bool]:
        """
        Controls whether M3DB will include writes to this namespace in the commitlog.
        """
        return pulumi.get(self, "writes_to_commitlog")


@pulumi.output_type
class M3DbM3dbUserConfigNamespaceOptionsRetentionOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "blockDataExpiryDuration":
            suggest = "block_data_expiry_duration"
        elif key == "blocksizeDuration":
            suggest = "blocksize_duration"
        elif key == "bufferFutureDuration":
            suggest = "buffer_future_duration"
        elif key == "bufferPastDuration":
            suggest = "buffer_past_duration"
        elif key == "retentionPeriodDuration":
            suggest = "retention_period_duration"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in M3DbM3dbUserConfigNamespaceOptionsRetentionOptions. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        M3DbM3dbUserConfigNamespaceOptionsRetentionOptions.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        M3DbM3dbUserConfigNamespaceOptionsRetentionOptions.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 block_data_expiry_duration: Optional[builtins.str] = None,
                 blocksize_duration: Optional[builtins.str] = None,
                 buffer_future_duration: Optional[builtins.str] = None,
                 buffer_past_duration: Optional[builtins.str] = None,
                 retention_period_duration: Optional[builtins.str] = None):
        """
        :param builtins.str block_data_expiry_duration: Controls how long we wait before expiring stale data. Example: `5m`.
        :param builtins.str blocksize_duration: Controls how long to keep a block in memory before flushing to a fileset on disk. Example: `2h`.
        :param builtins.str buffer_future_duration: Controls how far into the future writes to the namespace will be accepted. Example: `10m`.
        :param builtins.str buffer_past_duration: Controls how far into the past writes to the namespace will be accepted. Example: `10m`.
        :param builtins.str retention_period_duration: Controls the duration of time that M3DB will retain data for the namespace. Example: `48h`.
        """
        if block_data_expiry_duration is not None:
            pulumi.set(__self__, "block_data_expiry_duration", block_data_expiry_duration)
        if blocksize_duration is not None:
            pulumi.set(__self__, "blocksize_duration", blocksize_duration)
        if buffer_future_duration is not None:
            pulumi.set(__self__, "buffer_future_duration", buffer_future_duration)
        if buffer_past_duration is not None:
            pulumi.set(__self__, "buffer_past_duration", buffer_past_duration)
        if retention_period_duration is not None:
            pulumi.set(__self__, "retention_period_duration", retention_period_duration)

    @property
    @pulumi.getter(name="blockDataExpiryDuration")
    def block_data_expiry_duration(self) -> Optional[builtins.str]:
        """
        Controls how long we wait before expiring stale data. Example: `5m`.
        """
        return pulumi.get(self, "block_data_expiry_duration")

    @property
    @pulumi.getter(name="blocksizeDuration")
    def blocksize_duration(self) -> Optional[builtins.str]:
        """
        Controls how long to keep a block in memory before flushing to a fileset on disk. Example: `2h`.
        """
        return pulumi.get(self, "blocksize_duration")

    @property
    @pulumi.getter(name="bufferFutureDuration")
    def buffer_future_duration(self) -> Optional[builtins.str]:
        """
        Controls how far into the future writes to the namespace will be accepted. Example: `10m`.
        """
        return pulumi.get(self, "buffer_future_duration")

    @property
    @pulumi.getter(name="bufferPastDuration")
    def buffer_past_duration(self) -> Optional[builtins.str]:
        """
        Controls how far into the past writes to the namespace will be accepted. Example: `10m`.
        """
        return pulumi.get(self, "buffer_past_duration")

    @property
    @pulumi.getter(name="retentionPeriodDuration")
    def retention_period_duration(self) -> Optional[builtins.str]:
        """
        Controls the duration of time that M3DB will retain data for the namespace. Example: `48h`.
        """
        return pulumi.get(self, "retention_period_duration")


@pulumi.output_type
class M3DbM3dbUserConfigPrivateAccess(dict):
    def __init__(__self__, *,
                 m3coordinator: Optional[builtins.bool] = None):
        """
        :param builtins.bool m3coordinator: Allow clients to connect to m3coordinator with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if m3coordinator is not None:
            pulumi.set(__self__, "m3coordinator", m3coordinator)

    @property
    @pulumi.getter
    def m3coordinator(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to m3coordinator with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "m3coordinator")


@pulumi.output_type
class M3DbM3dbUserConfigPublicAccess(dict):
    def __init__(__self__, *,
                 m3coordinator: Optional[builtins.bool] = None):
        """
        :param builtins.bool m3coordinator: Allow clients to connect to m3coordinator from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if m3coordinator is not None:
            pulumi.set(__self__, "m3coordinator", m3coordinator)

    @property
    @pulumi.getter
    def m3coordinator(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to m3coordinator from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "m3coordinator")


@pulumi.output_type
class M3DbM3dbUserConfigRules(dict):
    def __init__(__self__, *,
                 mappings: Optional[Sequence['outputs.M3DbM3dbUserConfigRulesMapping']] = None):
        """
        :param Sequence['M3DbM3dbUserConfigRulesMappingArgs'] mappings: List of M3 mapping rules
        """
        if mappings is not None:
            pulumi.set(__self__, "mappings", mappings)

    @property
    @pulumi.getter
    def mappings(self) -> Optional[Sequence['outputs.M3DbM3dbUserConfigRulesMapping']]:
        """
        List of M3 mapping rules
        """
        return pulumi.get(self, "mappings")


@pulumi.output_type
class M3DbM3dbUserConfigRulesMapping(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "namespacesObjects":
            suggest = "namespaces_objects"
        elif key == "namespacesStrings":
            suggest = "namespaces_strings"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in M3DbM3dbUserConfigRulesMapping. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        M3DbM3dbUserConfigRulesMapping.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        M3DbM3dbUserConfigRulesMapping.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 filter: builtins.str,
                 aggregations: Optional[Sequence[builtins.str]] = None,
                 drop: Optional[builtins.bool] = None,
                 name: Optional[builtins.str] = None,
                 namespaces: Optional[Sequence[builtins.str]] = None,
                 namespaces_objects: Optional[Sequence['outputs.M3DbM3dbUserConfigRulesMappingNamespacesObject']] = None,
                 namespaces_strings: Optional[Sequence[builtins.str]] = None,
                 tags: Optional[Sequence['outputs.M3DbM3dbUserConfigRulesMappingTag']] = None):
        """
        :param builtins.str filter: Matching metric names with wildcards (using **name**:wildcard) or matching tags and their (optionally wildcarded) values. For value, ! can be used at start of value for negation, and multiple filters can be supplied using space as separator. Example: `__name__:disk_* host:important-42 mount:!*/sda`.
        :param Sequence[builtins.str] aggregations: List of aggregations to be applied.
        :param builtins.bool drop: Only store the derived metric (as specified in the roll-up rules), if any.
        :param builtins.str name: The (optional) name of the rule. Example: `important disk metrics`.
        :param Sequence[builtins.str] namespaces: This rule will be used to store the metrics in the given namespace(s). If a namespace is target of rules, the global default aggregation will be automatically disabled. Note that specifying filters that match no namespaces whatsoever will be returned as an error. Filter the namespace by glob (=wildcards).
        :param Sequence['M3DbM3dbUserConfigRulesMappingNamespacesObjectArgs'] namespaces_objects: This rule will be used to store the metrics in the given namespace(s). If a namespace is target of rules, the global default aggregation will be automatically disabled. Note that specifying filters that match no namespaces whatsoever will be returned as an error. Filter the namespace by exact match of retention period and resolution
        :param Sequence[builtins.str] namespaces_strings: This rule will be used to store the metrics in the given namespace(s). If a namespace is target of rules, the global default aggregation will be automatically disabled. Note that specifying filters that match no namespaces whatsoever will be returned as an error. Filter the namespace by glob (=wildcards).
        :param Sequence['M3DbM3dbUserConfigRulesMappingTagArgs'] tags: List of tags to be appended to matching metrics
        """
        pulumi.set(__self__, "filter", filter)
        if aggregations is not None:
            pulumi.set(__self__, "aggregations", aggregations)
        if drop is not None:
            pulumi.set(__self__, "drop", drop)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if namespaces is not None:
            pulumi.set(__self__, "namespaces", namespaces)
        if namespaces_objects is not None:
            pulumi.set(__self__, "namespaces_objects", namespaces_objects)
        if namespaces_strings is not None:
            pulumi.set(__self__, "namespaces_strings", namespaces_strings)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)

    @property
    @pulumi.getter
    def filter(self) -> builtins.str:
        """
        Matching metric names with wildcards (using **name**:wildcard) or matching tags and their (optionally wildcarded) values. For value, ! can be used at start of value for negation, and multiple filters can be supplied using space as separator. Example: `__name__:disk_* host:important-42 mount:!*/sda`.
        """
        return pulumi.get(self, "filter")

    @property
    @pulumi.getter
    def aggregations(self) -> Optional[Sequence[builtins.str]]:
        """
        List of aggregations to be applied.
        """
        return pulumi.get(self, "aggregations")

    @property
    @pulumi.getter
    def drop(self) -> Optional[builtins.bool]:
        """
        Only store the derived metric (as specified in the roll-up rules), if any.
        """
        return pulumi.get(self, "drop")

    @property
    @pulumi.getter
    def name(self) -> Optional[builtins.str]:
        """
        The (optional) name of the rule. Example: `important disk metrics`.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    @_utilities.deprecated("""Deprecated. Use `namespaces_string` instead.""")
    def namespaces(self) -> Optional[Sequence[builtins.str]]:
        """
        This rule will be used to store the metrics in the given namespace(s). If a namespace is target of rules, the global default aggregation will be automatically disabled. Note that specifying filters that match no namespaces whatsoever will be returned as an error. Filter the namespace by glob (=wildcards).
        """
        return pulumi.get(self, "namespaces")

    @property
    @pulumi.getter(name="namespacesObjects")
    def namespaces_objects(self) -> Optional[Sequence['outputs.M3DbM3dbUserConfigRulesMappingNamespacesObject']]:
        """
        This rule will be used to store the metrics in the given namespace(s). If a namespace is target of rules, the global default aggregation will be automatically disabled. Note that specifying filters that match no namespaces whatsoever will be returned as an error. Filter the namespace by exact match of retention period and resolution
        """
        return pulumi.get(self, "namespaces_objects")

    @property
    @pulumi.getter(name="namespacesStrings")
    def namespaces_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        This rule will be used to store the metrics in the given namespace(s). If a namespace is target of rules, the global default aggregation will be automatically disabled. Note that specifying filters that match no namespaces whatsoever will be returned as an error. Filter the namespace by glob (=wildcards).
        """
        return pulumi.get(self, "namespaces_strings")

    @property
    @pulumi.getter
    def tags(self) -> Optional[Sequence['outputs.M3DbM3dbUserConfigRulesMappingTag']]:
        """
        List of tags to be appended to matching metrics
        """
        return pulumi.get(self, "tags")


@pulumi.output_type
class M3DbM3dbUserConfigRulesMappingNamespacesObject(dict):
    def __init__(__self__, *,
                 resolution: builtins.str,
                 retention: Optional[builtins.str] = None):
        """
        :param builtins.str resolution: The resolution for the matching namespace. Example: `30s`.
        :param builtins.str retention: The retention period of the matching namespace. Example: `48h`.
        """
        pulumi.set(__self__, "resolution", resolution)
        if retention is not None:
            pulumi.set(__self__, "retention", retention)

    @property
    @pulumi.getter
    def resolution(self) -> builtins.str:
        """
        The resolution for the matching namespace. Example: `30s`.
        """
        return pulumi.get(self, "resolution")

    @property
    @pulumi.getter
    def retention(self) -> Optional[builtins.str]:
        """
        The retention period of the matching namespace. Example: `48h`.
        """
        return pulumi.get(self, "retention")


@pulumi.output_type
class M3DbM3dbUserConfigRulesMappingTag(dict):
    def __init__(__self__, *,
                 name: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str name: Name of the tag. Example: `my_tag`.
        :param builtins.str value: Value of the tag. Example: `my_value`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def name(self) -> builtins.str:
        """
        Name of the tag. Example: `my_tag`.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Value of the tag. Example: `my_value`.
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class M3DbServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in M3DbServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        M3DbServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        M3DbServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class M3DbTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class M3DbTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class MySqlComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in MySqlComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        MySqlComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        MySqlComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class MySqlMysql(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "replicaUri":
            suggest = "replica_uri"
        elif key == "standbyUris":
            suggest = "standby_uris"
        elif key == "syncingUris":
            suggest = "syncing_uris"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in MySqlMysql. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        MySqlMysql.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        MySqlMysql.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 params: Optional[Sequence['outputs.MySqlMysqlParam']] = None,
                 replica_uri: Optional[builtins.str] = None,
                 standby_uris: Optional[Sequence[builtins.str]] = None,
                 syncing_uris: Optional[Sequence[builtins.str]] = None,
                 uris: Optional[Sequence[builtins.str]] = None):
        """
        :param Sequence['MySqlMysqlParamArgs'] params: MySQL connection parameters.
        :param builtins.str replica_uri: MySQL replica URI for services with a replica.
        :param Sequence[builtins.str] standby_uris: MySQL standby connection URIs.
        :param Sequence[builtins.str] syncing_uris: MySQL syncing connection URIs.
        :param Sequence[builtins.str] uris: MySQL connection URIs.
        """
        if params is not None:
            pulumi.set(__self__, "params", params)
        if replica_uri is not None:
            pulumi.set(__self__, "replica_uri", replica_uri)
        if standby_uris is not None:
            pulumi.set(__self__, "standby_uris", standby_uris)
        if syncing_uris is not None:
            pulumi.set(__self__, "syncing_uris", syncing_uris)
        if uris is not None:
            pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter
    def params(self) -> Optional[Sequence['outputs.MySqlMysqlParam']]:
        """
        MySQL connection parameters.
        """
        return pulumi.get(self, "params")

    @property
    @pulumi.getter(name="replicaUri")
    def replica_uri(self) -> Optional[builtins.str]:
        """
        MySQL replica URI for services with a replica.
        """
        return pulumi.get(self, "replica_uri")

    @property
    @pulumi.getter(name="standbyUris")
    def standby_uris(self) -> Optional[Sequence[builtins.str]]:
        """
        MySQL standby connection URIs.
        """
        return pulumi.get(self, "standby_uris")

    @property
    @pulumi.getter(name="syncingUris")
    def syncing_uris(self) -> Optional[Sequence[builtins.str]]:
        """
        MySQL syncing connection URIs.
        """
        return pulumi.get(self, "syncing_uris")

    @property
    @pulumi.getter
    def uris(self) -> Optional[Sequence[builtins.str]]:
        """
        MySQL connection URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class MySqlMysqlParam(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "databaseName":
            suggest = "database_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in MySqlMysqlParam. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        MySqlMysqlParam.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        MySqlMysqlParam.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 database_name: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 sslmode: Optional[builtins.str] = None,
                 user: Optional[builtins.str] = None):
        """
        :param builtins.str database_name: Thr name of the primary MySQL database.
        :param builtins.str host: MySQL host IP or name.
        :param builtins.str password: The password for the admin service user.
        :param builtins.int port: MySQL port.
        :param builtins.str sslmode: MySQL SSL mode setting. Always set to "require".
        :param builtins.str user: The username for the admin service user.
        """
        if database_name is not None:
            pulumi.set(__self__, "database_name", database_name)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if sslmode is not None:
            pulumi.set(__self__, "sslmode", sslmode)
        if user is not None:
            pulumi.set(__self__, "user", user)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> Optional[builtins.str]:
        """
        Thr name of the primary MySQL database.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        MySQL host IP or name.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        The password for the admin service user.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        MySQL port.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def sslmode(self) -> Optional[builtins.str]:
        """
        MySQL SSL mode setting. Always set to "require".
        """
        return pulumi.get(self, "sslmode")

    @property
    @pulumi.getter
    def user(self) -> Optional[builtins.str]:
        """
        The username for the admin service user.
        """
        return pulumi.get(self, "user")


@pulumi.output_type
class MySqlMysqlUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "additionalBackupRegions":
            suggest = "additional_backup_regions"
        elif key == "adminPassword":
            suggest = "admin_password"
        elif key == "adminUsername":
            suggest = "admin_username"
        elif key == "backupHour":
            suggest = "backup_hour"
        elif key == "backupMinute":
            suggest = "backup_minute"
        elif key == "binlogRetentionPeriod":
            suggest = "binlog_retention_period"
        elif key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "mysqlVersion":
            suggest = "mysql_version"
        elif key == "privateAccess":
            suggest = "private_access"
        elif key == "privatelinkAccess":
            suggest = "privatelink_access"
        elif key == "projectToForkFrom":
            suggest = "project_to_fork_from"
        elif key == "publicAccess":
            suggest = "public_access"
        elif key == "recoveryTargetTime":
            suggest = "recovery_target_time"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "serviceToForkFrom":
            suggest = "service_to_fork_from"
        elif key == "staticIps":
            suggest = "static_ips"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in MySqlMysqlUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        MySqlMysqlUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        MySqlMysqlUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 admin_password: Optional[builtins.str] = None,
                 admin_username: Optional[builtins.str] = None,
                 backup_hour: Optional[builtins.int] = None,
                 backup_minute: Optional[builtins.int] = None,
                 binlog_retention_period: Optional[builtins.int] = None,
                 ip_filter_objects: Optional[Sequence['outputs.MySqlMysqlUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 migration: Optional['outputs.MySqlMysqlUserConfigMigration'] = None,
                 mysql: Optional['outputs.MySqlMysqlUserConfigMysql'] = None,
                 mysql_version: Optional[builtins.str] = None,
                 private_access: Optional['outputs.MySqlMysqlUserConfigPrivateAccess'] = None,
                 privatelink_access: Optional['outputs.MySqlMysqlUserConfigPrivatelinkAccess'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.MySqlMysqlUserConfigPublicAccess'] = None,
                 recovery_target_time: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.str admin_password: Custom password for admin user. Defaults to random string. This must be set only when a new service is being created.
        :param builtins.str admin_username: Custom username for admin user. This must be set only when a new service is being created. Example: `avnadmin`.
        :param builtins.int backup_hour: The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        :param builtins.int backup_minute: The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        :param builtins.int binlog_retention_period: The minimum amount of time in seconds to keep binlog entries before deletion. This may be extended for services that require binlog entries for longer than the default for example if using the MySQL Debezium Kafka connector. Example: `600`.
        :param Sequence['MySqlMysqlUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'MySqlMysqlUserConfigMigrationArgs' migration: Migrate data from existing server
        :param 'MySqlMysqlUserConfigMysqlArgs' mysql: mysql.conf configuration values
        :param builtins.str mysql_version: Enum: `8`, and newer. MySQL major version.
        :param 'MySqlMysqlUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'MySqlMysqlUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'MySqlMysqlUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_target_time: Recovery target time when forking a service. This has effect only when a new service is being created. Example: `2019-01-01 23:34:45`.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if admin_password is not None:
            pulumi.set(__self__, "admin_password", admin_password)
        if admin_username is not None:
            pulumi.set(__self__, "admin_username", admin_username)
        if backup_hour is not None:
            pulumi.set(__self__, "backup_hour", backup_hour)
        if backup_minute is not None:
            pulumi.set(__self__, "backup_minute", backup_minute)
        if binlog_retention_period is not None:
            pulumi.set(__self__, "binlog_retention_period", binlog_retention_period)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if migration is not None:
            pulumi.set(__self__, "migration", migration)
        if mysql is not None:
            pulumi.set(__self__, "mysql", mysql)
        if mysql_version is not None:
            pulumi.set(__self__, "mysql_version", mysql_version)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_target_time is not None:
            pulumi.set(__self__, "recovery_target_time", recovery_target_time)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="adminPassword")
    def admin_password(self) -> Optional[builtins.str]:
        """
        Custom password for admin user. Defaults to random string. This must be set only when a new service is being created.
        """
        return pulumi.get(self, "admin_password")

    @property
    @pulumi.getter(name="adminUsername")
    def admin_username(self) -> Optional[builtins.str]:
        """
        Custom username for admin user. This must be set only when a new service is being created. Example: `avnadmin`.
        """
        return pulumi.get(self, "admin_username")

    @property
    @pulumi.getter(name="backupHour")
    def backup_hour(self) -> Optional[builtins.int]:
        """
        The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        """
        return pulumi.get(self, "backup_hour")

    @property
    @pulumi.getter(name="backupMinute")
    def backup_minute(self) -> Optional[builtins.int]:
        """
        The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        """
        return pulumi.get(self, "backup_minute")

    @property
    @pulumi.getter(name="binlogRetentionPeriod")
    def binlog_retention_period(self) -> Optional[builtins.int]:
        """
        The minimum amount of time in seconds to keep binlog entries before deletion. This may be extended for services that require binlog entries for longer than the default for example if using the MySQL Debezium Kafka connector. Example: `600`.
        """
        return pulumi.get(self, "binlog_retention_period")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.MySqlMysqlUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter
    def migration(self) -> Optional['outputs.MySqlMysqlUserConfigMigration']:
        """
        Migrate data from existing server
        """
        return pulumi.get(self, "migration")

    @property
    @pulumi.getter
    def mysql(self) -> Optional['outputs.MySqlMysqlUserConfigMysql']:
        """
        mysql.conf configuration values
        """
        return pulumi.get(self, "mysql")

    @property
    @pulumi.getter(name="mysqlVersion")
    def mysql_version(self) -> Optional[builtins.str]:
        """
        Enum: `8`, and newer. MySQL major version.
        """
        return pulumi.get(self, "mysql_version")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.MySqlMysqlUserConfigPrivateAccess']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.MySqlMysqlUserConfigPrivatelinkAccess']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.MySqlMysqlUserConfigPublicAccess']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryTargetTime")
    def recovery_target_time(self) -> Optional[builtins.str]:
        """
        Recovery target time when forking a service. This has effect only when a new service is being created. Example: `2019-01-01 23:34:45`.
        """
        return pulumi.get(self, "recovery_target_time")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class MySqlMysqlUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class MySqlMysqlUserConfigMigration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "ignoreDbs":
            suggest = "ignore_dbs"
        elif key == "ignoreRoles":
            suggest = "ignore_roles"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in MySqlMysqlUserConfigMigration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        MySqlMysqlUserConfigMigration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        MySqlMysqlUserConfigMigration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 host: builtins.str,
                 port: builtins.int,
                 dbname: Optional[builtins.str] = None,
                 ignore_dbs: Optional[builtins.str] = None,
                 ignore_roles: Optional[builtins.str] = None,
                 method: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 username: Optional[builtins.str] = None):
        """
        :param builtins.str host: Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        :param builtins.int port: Port number of the server where to migrate data from. Example: `1234`.
        :param builtins.str dbname: Database name for bootstrapping the initial connection. Example: `defaultdb`.
        :param builtins.str ignore_dbs: Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        :param builtins.str ignore_roles: Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        :param builtins.str method: Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        :param builtins.str password: Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        :param builtins.bool ssl: The server where to migrate data from is secured with SSL. Default: `true`.
        :param builtins.str username: User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "port", port)
        if dbname is not None:
            pulumi.set(__self__, "dbname", dbname)
        if ignore_dbs is not None:
            pulumi.set(__self__, "ignore_dbs", ignore_dbs)
        if ignore_roles is not None:
            pulumi.set(__self__, "ignore_roles", ignore_roles)
        if method is not None:
            pulumi.set(__self__, "method", method)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number of the server where to migrate data from. Example: `1234`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def dbname(self) -> Optional[builtins.str]:
        """
        Database name for bootstrapping the initial connection. Example: `defaultdb`.
        """
        return pulumi.get(self, "dbname")

    @property
    @pulumi.getter(name="ignoreDbs")
    def ignore_dbs(self) -> Optional[builtins.str]:
        """
        Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        """
        return pulumi.get(self, "ignore_dbs")

    @property
    @pulumi.getter(name="ignoreRoles")
    def ignore_roles(self) -> Optional[builtins.str]:
        """
        Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        """
        return pulumi.get(self, "ignore_roles")

    @property
    @pulumi.getter
    def method(self) -> Optional[builtins.str]:
        """
        Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        """
        return pulumi.get(self, "method")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        The server where to migrate data from is secured with SSL. Default: `true`.
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def username(self) -> Optional[builtins.str]:
        """
        User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class MySqlMysqlUserConfigMysql(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectTimeout":
            suggest = "connect_timeout"
        elif key == "defaultTimeZone":
            suggest = "default_time_zone"
        elif key == "groupConcatMaxLen":
            suggest = "group_concat_max_len"
        elif key == "informationSchemaStatsExpiry":
            suggest = "information_schema_stats_expiry"
        elif key == "innodbChangeBufferMaxSize":
            suggest = "innodb_change_buffer_max_size"
        elif key == "innodbFlushNeighbors":
            suggest = "innodb_flush_neighbors"
        elif key == "innodbFtMinTokenSize":
            suggest = "innodb_ft_min_token_size"
        elif key == "innodbFtServerStopwordTable":
            suggest = "innodb_ft_server_stopword_table"
        elif key == "innodbLockWaitTimeout":
            suggest = "innodb_lock_wait_timeout"
        elif key == "innodbLogBufferSize":
            suggest = "innodb_log_buffer_size"
        elif key == "innodbOnlineAlterLogMaxSize":
            suggest = "innodb_online_alter_log_max_size"
        elif key == "innodbPrintAllDeadlocks":
            suggest = "innodb_print_all_deadlocks"
        elif key == "innodbReadIoThreads":
            suggest = "innodb_read_io_threads"
        elif key == "innodbRollbackOnTimeout":
            suggest = "innodb_rollback_on_timeout"
        elif key == "innodbThreadConcurrency":
            suggest = "innodb_thread_concurrency"
        elif key == "innodbWriteIoThreads":
            suggest = "innodb_write_io_threads"
        elif key == "interactiveTimeout":
            suggest = "interactive_timeout"
        elif key == "internalTmpMemStorageEngine":
            suggest = "internal_tmp_mem_storage_engine"
        elif key == "logOutput":
            suggest = "log_output"
        elif key == "longQueryTime":
            suggest = "long_query_time"
        elif key == "maxAllowedPacket":
            suggest = "max_allowed_packet"
        elif key == "maxHeapTableSize":
            suggest = "max_heap_table_size"
        elif key == "netBufferLength":
            suggest = "net_buffer_length"
        elif key == "netReadTimeout":
            suggest = "net_read_timeout"
        elif key == "netWriteTimeout":
            suggest = "net_write_timeout"
        elif key == "slowQueryLog":
            suggest = "slow_query_log"
        elif key == "sortBufferSize":
            suggest = "sort_buffer_size"
        elif key == "sqlMode":
            suggest = "sql_mode"
        elif key == "sqlRequirePrimaryKey":
            suggest = "sql_require_primary_key"
        elif key == "tmpTableSize":
            suggest = "tmp_table_size"
        elif key == "waitTimeout":
            suggest = "wait_timeout"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in MySqlMysqlUserConfigMysql. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        MySqlMysqlUserConfigMysql.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        MySqlMysqlUserConfigMysql.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 connect_timeout: Optional[builtins.int] = None,
                 default_time_zone: Optional[builtins.str] = None,
                 group_concat_max_len: Optional[builtins.int] = None,
                 information_schema_stats_expiry: Optional[builtins.int] = None,
                 innodb_change_buffer_max_size: Optional[builtins.int] = None,
                 innodb_flush_neighbors: Optional[builtins.int] = None,
                 innodb_ft_min_token_size: Optional[builtins.int] = None,
                 innodb_ft_server_stopword_table: Optional[builtins.str] = None,
                 innodb_lock_wait_timeout: Optional[builtins.int] = None,
                 innodb_log_buffer_size: Optional[builtins.int] = None,
                 innodb_online_alter_log_max_size: Optional[builtins.int] = None,
                 innodb_print_all_deadlocks: Optional[builtins.bool] = None,
                 innodb_read_io_threads: Optional[builtins.int] = None,
                 innodb_rollback_on_timeout: Optional[builtins.bool] = None,
                 innodb_thread_concurrency: Optional[builtins.int] = None,
                 innodb_write_io_threads: Optional[builtins.int] = None,
                 interactive_timeout: Optional[builtins.int] = None,
                 internal_tmp_mem_storage_engine: Optional[builtins.str] = None,
                 log_output: Optional[builtins.str] = None,
                 long_query_time: Optional[builtins.float] = None,
                 max_allowed_packet: Optional[builtins.int] = None,
                 max_heap_table_size: Optional[builtins.int] = None,
                 net_buffer_length: Optional[builtins.int] = None,
                 net_read_timeout: Optional[builtins.int] = None,
                 net_write_timeout: Optional[builtins.int] = None,
                 slow_query_log: Optional[builtins.bool] = None,
                 sort_buffer_size: Optional[builtins.int] = None,
                 sql_mode: Optional[builtins.str] = None,
                 sql_require_primary_key: Optional[builtins.bool] = None,
                 tmp_table_size: Optional[builtins.int] = None,
                 wait_timeout: Optional[builtins.int] = None):
        """
        :param builtins.int connect_timeout: The number of seconds that the mysqld server waits for a connect packet before responding with Bad handshake. Example: `10`.
        :param builtins.str default_time_zone: Default server time zone as an offset from UTC (from -12:00 to +12:00), a time zone name, or `SYSTEM` to use the MySQL server default. Example: `+03:00`.
        :param builtins.int group_concat_max_len: The maximum permitted result length in bytes for the GROUP_CONCAT() function. Example: `1024`.
        :param builtins.int information_schema_stats_expiry: The time, in seconds, before cached statistics expire. Example: `86400`.
        :param builtins.int innodb_change_buffer_max_size: Maximum size for the InnoDB change buffer, as a percentage of the total size of the buffer pool. Default is 25. Example: `30`.
        :param builtins.int innodb_flush_neighbors: Specifies whether flushing a page from the InnoDB buffer pool also flushes other dirty pages in the same extent (default is 1): 0 - dirty pages in the same extent are not flushed, 1 - flush contiguous dirty pages in the same extent, 2 - flush dirty pages in the same extent. Example: `0`.
        :param builtins.int innodb_ft_min_token_size: Minimum length of words that are stored in an InnoDB FULLTEXT index. Changing this parameter will lead to a restart of the MySQL service. Example: `3`.
        :param builtins.str innodb_ft_server_stopword_table: This option is used to specify your own InnoDB FULLTEXT index stopword list for all InnoDB tables. Example: `db_name/table_name`.
        :param builtins.int innodb_lock_wait_timeout: The length of time in seconds an InnoDB transaction waits for a row lock before giving up. Default is 120. Example: `50`.
        :param builtins.int innodb_log_buffer_size: The size in bytes of the buffer that InnoDB uses to write to the log files on disk. Example: `16777216`.
        :param builtins.int innodb_online_alter_log_max_size: The upper limit in bytes on the size of the temporary log files used during online DDL operations for InnoDB tables. Example: `134217728`.
        :param builtins.bool innodb_print_all_deadlocks: When enabled, information about all deadlocks in InnoDB user transactions is recorded in the error log. Disabled by default.
        :param builtins.int innodb_read_io_threads: The number of I/O threads for read operations in InnoDB. Default is 4. Changing this parameter will lead to a restart of the MySQL service. Example: `10`.
        :param builtins.bool innodb_rollback_on_timeout: When enabled a transaction timeout causes InnoDB to abort and roll back the entire transaction. Changing this parameter will lead to a restart of the MySQL service.
        :param builtins.int innodb_thread_concurrency: Defines the maximum number of threads permitted inside of InnoDB. Default is 0 (infinite concurrency - no limit). Example: `10`.
        :param builtins.int innodb_write_io_threads: The number of I/O threads for write operations in InnoDB. Default is 4. Changing this parameter will lead to a restart of the MySQL service. Example: `10`.
        :param builtins.int interactive_timeout: The number of seconds the server waits for activity on an interactive connection before closing it. Example: `3600`.
        :param builtins.str internal_tmp_mem_storage_engine: Enum: `MEMORY`, `TempTable`. The storage engine for in-memory internal temporary tables.
        :param builtins.str log_output: Enum: `INSIGHTS`, `INSIGHTS,TABLE`, `NONE`, `TABLE`. The slow log output destination when slow*query*log is ON. To enable MySQL AI Insights, choose INSIGHTS. To use MySQL AI Insights and the mysql.slow*log table at the same time, choose INSIGHTS,TABLE. To only use the mysql.slow*log table, choose TABLE. To silence slow logs, choose NONE.
        :param builtins.float long_query_time: The slow*query*logs work as SQL statements that take more than long*query*time seconds to execute. Example: `10.0`.
        :param builtins.int max_allowed_packet: Size of the largest message in bytes that can be received by the server. Default is 67108864 (64M). Example: `67108864`.
        :param builtins.int max_heap_table_size: Limits the size of internal in-memory tables. Also set tmp*table*size. Default is 16777216 (16M). Example: `16777216`.
        :param builtins.int net_buffer_length: Start sizes of connection buffer and result buffer. Default is 16384 (16K). Changing this parameter will lead to a restart of the MySQL service. Example: `16384`.
        :param builtins.int net_read_timeout: The number of seconds to wait for more data from a connection before aborting the read. Example: `30`.
        :param builtins.int net_write_timeout: The number of seconds to wait for a block to be written to a connection before aborting the write. Example: `30`.
        :param builtins.bool slow_query_log: Slow query log enables capturing of slow queries. Setting slow*query*log to false also truncates the mysql.slow_log table.
        :param builtins.int sort_buffer_size: Sort buffer size in bytes for ORDER BY optimization. Default is 262144 (256K). Example: `262144`.
        :param builtins.str sql_mode: Global SQL mode. Set to empty to use MySQL server defaults. When creating a new service and not setting this field Aiven default SQL mode (strict, SQL standard compliant) will be assigned. Example: `ANSI,TRADITIONAL`.
        :param builtins.bool sql_require_primary_key: Require primary key to be defined for new tables or old tables modified with ALTER TABLE and fail if missing. It is recommended to always have primary keys because various functionality may break if any large table is missing them.
        :param builtins.int tmp_table_size: Limits the size of internal in-memory tables. Also set max*heap*table_size. Default is 16777216 (16M). Example: `16777216`.
        :param builtins.int wait_timeout: The number of seconds the server waits for activity on a noninteractive connection before closing it. Example: `28800`.
        """
        if connect_timeout is not None:
            pulumi.set(__self__, "connect_timeout", connect_timeout)
        if default_time_zone is not None:
            pulumi.set(__self__, "default_time_zone", default_time_zone)
        if group_concat_max_len is not None:
            pulumi.set(__self__, "group_concat_max_len", group_concat_max_len)
        if information_schema_stats_expiry is not None:
            pulumi.set(__self__, "information_schema_stats_expiry", information_schema_stats_expiry)
        if innodb_change_buffer_max_size is not None:
            pulumi.set(__self__, "innodb_change_buffer_max_size", innodb_change_buffer_max_size)
        if innodb_flush_neighbors is not None:
            pulumi.set(__self__, "innodb_flush_neighbors", innodb_flush_neighbors)
        if innodb_ft_min_token_size is not None:
            pulumi.set(__self__, "innodb_ft_min_token_size", innodb_ft_min_token_size)
        if innodb_ft_server_stopword_table is not None:
            pulumi.set(__self__, "innodb_ft_server_stopword_table", innodb_ft_server_stopword_table)
        if innodb_lock_wait_timeout is not None:
            pulumi.set(__self__, "innodb_lock_wait_timeout", innodb_lock_wait_timeout)
        if innodb_log_buffer_size is not None:
            pulumi.set(__self__, "innodb_log_buffer_size", innodb_log_buffer_size)
        if innodb_online_alter_log_max_size is not None:
            pulumi.set(__self__, "innodb_online_alter_log_max_size", innodb_online_alter_log_max_size)
        if innodb_print_all_deadlocks is not None:
            pulumi.set(__self__, "innodb_print_all_deadlocks", innodb_print_all_deadlocks)
        if innodb_read_io_threads is not None:
            pulumi.set(__self__, "innodb_read_io_threads", innodb_read_io_threads)
        if innodb_rollback_on_timeout is not None:
            pulumi.set(__self__, "innodb_rollback_on_timeout", innodb_rollback_on_timeout)
        if innodb_thread_concurrency is not None:
            pulumi.set(__self__, "innodb_thread_concurrency", innodb_thread_concurrency)
        if innodb_write_io_threads is not None:
            pulumi.set(__self__, "innodb_write_io_threads", innodb_write_io_threads)
        if interactive_timeout is not None:
            pulumi.set(__self__, "interactive_timeout", interactive_timeout)
        if internal_tmp_mem_storage_engine is not None:
            pulumi.set(__self__, "internal_tmp_mem_storage_engine", internal_tmp_mem_storage_engine)
        if log_output is not None:
            pulumi.set(__self__, "log_output", log_output)
        if long_query_time is not None:
            pulumi.set(__self__, "long_query_time", long_query_time)
        if max_allowed_packet is not None:
            pulumi.set(__self__, "max_allowed_packet", max_allowed_packet)
        if max_heap_table_size is not None:
            pulumi.set(__self__, "max_heap_table_size", max_heap_table_size)
        if net_buffer_length is not None:
            pulumi.set(__self__, "net_buffer_length", net_buffer_length)
        if net_read_timeout is not None:
            pulumi.set(__self__, "net_read_timeout", net_read_timeout)
        if net_write_timeout is not None:
            pulumi.set(__self__, "net_write_timeout", net_write_timeout)
        if slow_query_log is not None:
            pulumi.set(__self__, "slow_query_log", slow_query_log)
        if sort_buffer_size is not None:
            pulumi.set(__self__, "sort_buffer_size", sort_buffer_size)
        if sql_mode is not None:
            pulumi.set(__self__, "sql_mode", sql_mode)
        if sql_require_primary_key is not None:
            pulumi.set(__self__, "sql_require_primary_key", sql_require_primary_key)
        if tmp_table_size is not None:
            pulumi.set(__self__, "tmp_table_size", tmp_table_size)
        if wait_timeout is not None:
            pulumi.set(__self__, "wait_timeout", wait_timeout)

    @property
    @pulumi.getter(name="connectTimeout")
    def connect_timeout(self) -> Optional[builtins.int]:
        """
        The number of seconds that the mysqld server waits for a connect packet before responding with Bad handshake. Example: `10`.
        """
        return pulumi.get(self, "connect_timeout")

    @property
    @pulumi.getter(name="defaultTimeZone")
    def default_time_zone(self) -> Optional[builtins.str]:
        """
        Default server time zone as an offset from UTC (from -12:00 to +12:00), a time zone name, or `SYSTEM` to use the MySQL server default. Example: `+03:00`.
        """
        return pulumi.get(self, "default_time_zone")

    @property
    @pulumi.getter(name="groupConcatMaxLen")
    def group_concat_max_len(self) -> Optional[builtins.int]:
        """
        The maximum permitted result length in bytes for the GROUP_CONCAT() function. Example: `1024`.
        """
        return pulumi.get(self, "group_concat_max_len")

    @property
    @pulumi.getter(name="informationSchemaStatsExpiry")
    def information_schema_stats_expiry(self) -> Optional[builtins.int]:
        """
        The time, in seconds, before cached statistics expire. Example: `86400`.
        """
        return pulumi.get(self, "information_schema_stats_expiry")

    @property
    @pulumi.getter(name="innodbChangeBufferMaxSize")
    def innodb_change_buffer_max_size(self) -> Optional[builtins.int]:
        """
        Maximum size for the InnoDB change buffer, as a percentage of the total size of the buffer pool. Default is 25. Example: `30`.
        """
        return pulumi.get(self, "innodb_change_buffer_max_size")

    @property
    @pulumi.getter(name="innodbFlushNeighbors")
    def innodb_flush_neighbors(self) -> Optional[builtins.int]:
        """
        Specifies whether flushing a page from the InnoDB buffer pool also flushes other dirty pages in the same extent (default is 1): 0 - dirty pages in the same extent are not flushed, 1 - flush contiguous dirty pages in the same extent, 2 - flush dirty pages in the same extent. Example: `0`.
        """
        return pulumi.get(self, "innodb_flush_neighbors")

    @property
    @pulumi.getter(name="innodbFtMinTokenSize")
    def innodb_ft_min_token_size(self) -> Optional[builtins.int]:
        """
        Minimum length of words that are stored in an InnoDB FULLTEXT index. Changing this parameter will lead to a restart of the MySQL service. Example: `3`.
        """
        return pulumi.get(self, "innodb_ft_min_token_size")

    @property
    @pulumi.getter(name="innodbFtServerStopwordTable")
    def innodb_ft_server_stopword_table(self) -> Optional[builtins.str]:
        """
        This option is used to specify your own InnoDB FULLTEXT index stopword list for all InnoDB tables. Example: `db_name/table_name`.
        """
        return pulumi.get(self, "innodb_ft_server_stopword_table")

    @property
    @pulumi.getter(name="innodbLockWaitTimeout")
    def innodb_lock_wait_timeout(self) -> Optional[builtins.int]:
        """
        The length of time in seconds an InnoDB transaction waits for a row lock before giving up. Default is 120. Example: `50`.
        """
        return pulumi.get(self, "innodb_lock_wait_timeout")

    @property
    @pulumi.getter(name="innodbLogBufferSize")
    def innodb_log_buffer_size(self) -> Optional[builtins.int]:
        """
        The size in bytes of the buffer that InnoDB uses to write to the log files on disk. Example: `16777216`.
        """
        return pulumi.get(self, "innodb_log_buffer_size")

    @property
    @pulumi.getter(name="innodbOnlineAlterLogMaxSize")
    def innodb_online_alter_log_max_size(self) -> Optional[builtins.int]:
        """
        The upper limit in bytes on the size of the temporary log files used during online DDL operations for InnoDB tables. Example: `134217728`.
        """
        return pulumi.get(self, "innodb_online_alter_log_max_size")

    @property
    @pulumi.getter(name="innodbPrintAllDeadlocks")
    def innodb_print_all_deadlocks(self) -> Optional[builtins.bool]:
        """
        When enabled, information about all deadlocks in InnoDB user transactions is recorded in the error log. Disabled by default.
        """
        return pulumi.get(self, "innodb_print_all_deadlocks")

    @property
    @pulumi.getter(name="innodbReadIoThreads")
    def innodb_read_io_threads(self) -> Optional[builtins.int]:
        """
        The number of I/O threads for read operations in InnoDB. Default is 4. Changing this parameter will lead to a restart of the MySQL service. Example: `10`.
        """
        return pulumi.get(self, "innodb_read_io_threads")

    @property
    @pulumi.getter(name="innodbRollbackOnTimeout")
    def innodb_rollback_on_timeout(self) -> Optional[builtins.bool]:
        """
        When enabled a transaction timeout causes InnoDB to abort and roll back the entire transaction. Changing this parameter will lead to a restart of the MySQL service.
        """
        return pulumi.get(self, "innodb_rollback_on_timeout")

    @property
    @pulumi.getter(name="innodbThreadConcurrency")
    def innodb_thread_concurrency(self) -> Optional[builtins.int]:
        """
        Defines the maximum number of threads permitted inside of InnoDB. Default is 0 (infinite concurrency - no limit). Example: `10`.
        """
        return pulumi.get(self, "innodb_thread_concurrency")

    @property
    @pulumi.getter(name="innodbWriteIoThreads")
    def innodb_write_io_threads(self) -> Optional[builtins.int]:
        """
        The number of I/O threads for write operations in InnoDB. Default is 4. Changing this parameter will lead to a restart of the MySQL service. Example: `10`.
        """
        return pulumi.get(self, "innodb_write_io_threads")

    @property
    @pulumi.getter(name="interactiveTimeout")
    def interactive_timeout(self) -> Optional[builtins.int]:
        """
        The number of seconds the server waits for activity on an interactive connection before closing it. Example: `3600`.
        """
        return pulumi.get(self, "interactive_timeout")

    @property
    @pulumi.getter(name="internalTmpMemStorageEngine")
    def internal_tmp_mem_storage_engine(self) -> Optional[builtins.str]:
        """
        Enum: `MEMORY`, `TempTable`. The storage engine for in-memory internal temporary tables.
        """
        return pulumi.get(self, "internal_tmp_mem_storage_engine")

    @property
    @pulumi.getter(name="logOutput")
    def log_output(self) -> Optional[builtins.str]:
        """
        Enum: `INSIGHTS`, `INSIGHTS,TABLE`, `NONE`, `TABLE`. The slow log output destination when slow*query*log is ON. To enable MySQL AI Insights, choose INSIGHTS. To use MySQL AI Insights and the mysql.slow*log table at the same time, choose INSIGHTS,TABLE. To only use the mysql.slow*log table, choose TABLE. To silence slow logs, choose NONE.
        """
        return pulumi.get(self, "log_output")

    @property
    @pulumi.getter(name="longQueryTime")
    def long_query_time(self) -> Optional[builtins.float]:
        """
        The slow*query*logs work as SQL statements that take more than long*query*time seconds to execute. Example: `10.0`.
        """
        return pulumi.get(self, "long_query_time")

    @property
    @pulumi.getter(name="maxAllowedPacket")
    def max_allowed_packet(self) -> Optional[builtins.int]:
        """
        Size of the largest message in bytes that can be received by the server. Default is 67108864 (64M). Example: `67108864`.
        """
        return pulumi.get(self, "max_allowed_packet")

    @property
    @pulumi.getter(name="maxHeapTableSize")
    def max_heap_table_size(self) -> Optional[builtins.int]:
        """
        Limits the size of internal in-memory tables. Also set tmp*table*size. Default is 16777216 (16M). Example: `16777216`.
        """
        return pulumi.get(self, "max_heap_table_size")

    @property
    @pulumi.getter(name="netBufferLength")
    def net_buffer_length(self) -> Optional[builtins.int]:
        """
        Start sizes of connection buffer and result buffer. Default is 16384 (16K). Changing this parameter will lead to a restart of the MySQL service. Example: `16384`.
        """
        return pulumi.get(self, "net_buffer_length")

    @property
    @pulumi.getter(name="netReadTimeout")
    def net_read_timeout(self) -> Optional[builtins.int]:
        """
        The number of seconds to wait for more data from a connection before aborting the read. Example: `30`.
        """
        return pulumi.get(self, "net_read_timeout")

    @property
    @pulumi.getter(name="netWriteTimeout")
    def net_write_timeout(self) -> Optional[builtins.int]:
        """
        The number of seconds to wait for a block to be written to a connection before aborting the write. Example: `30`.
        """
        return pulumi.get(self, "net_write_timeout")

    @property
    @pulumi.getter(name="slowQueryLog")
    def slow_query_log(self) -> Optional[builtins.bool]:
        """
        Slow query log enables capturing of slow queries. Setting slow*query*log to false also truncates the mysql.slow_log table.
        """
        return pulumi.get(self, "slow_query_log")

    @property
    @pulumi.getter(name="sortBufferSize")
    def sort_buffer_size(self) -> Optional[builtins.int]:
        """
        Sort buffer size in bytes for ORDER BY optimization. Default is 262144 (256K). Example: `262144`.
        """
        return pulumi.get(self, "sort_buffer_size")

    @property
    @pulumi.getter(name="sqlMode")
    def sql_mode(self) -> Optional[builtins.str]:
        """
        Global SQL mode. Set to empty to use MySQL server defaults. When creating a new service and not setting this field Aiven default SQL mode (strict, SQL standard compliant) will be assigned. Example: `ANSI,TRADITIONAL`.
        """
        return pulumi.get(self, "sql_mode")

    @property
    @pulumi.getter(name="sqlRequirePrimaryKey")
    def sql_require_primary_key(self) -> Optional[builtins.bool]:
        """
        Require primary key to be defined for new tables or old tables modified with ALTER TABLE and fail if missing. It is recommended to always have primary keys because various functionality may break if any large table is missing them.
        """
        return pulumi.get(self, "sql_require_primary_key")

    @property
    @pulumi.getter(name="tmpTableSize")
    def tmp_table_size(self) -> Optional[builtins.int]:
        """
        Limits the size of internal in-memory tables. Also set max*heap*table_size. Default is 16777216 (16M). Example: `16777216`.
        """
        return pulumi.get(self, "tmp_table_size")

    @property
    @pulumi.getter(name="waitTimeout")
    def wait_timeout(self) -> Optional[builtins.int]:
        """
        The number of seconds the server waits for activity on a noninteractive connection before closing it. Example: `28800`.
        """
        return pulumi.get(self, "wait_timeout")


@pulumi.output_type
class MySqlMysqlUserConfigPrivateAccess(dict):
    def __init__(__self__, *,
                 mysql: Optional[builtins.bool] = None,
                 mysqlx: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool mysql: Allow clients to connect to mysql with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool mysqlx: Allow clients to connect to mysqlx with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if mysql is not None:
            pulumi.set(__self__, "mysql", mysql)
        if mysqlx is not None:
            pulumi.set(__self__, "mysqlx", mysqlx)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def mysql(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to mysql with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "mysql")

    @property
    @pulumi.getter
    def mysqlx(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to mysqlx with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "mysqlx")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class MySqlMysqlUserConfigPrivatelinkAccess(dict):
    def __init__(__self__, *,
                 mysql: Optional[builtins.bool] = None,
                 mysqlx: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool mysql: Enable mysql.
        :param builtins.bool mysqlx: Enable mysqlx.
        :param builtins.bool prometheus: Enable prometheus.
        """
        if mysql is not None:
            pulumi.set(__self__, "mysql", mysql)
        if mysqlx is not None:
            pulumi.set(__self__, "mysqlx", mysqlx)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def mysql(self) -> Optional[builtins.bool]:
        """
        Enable mysql.
        """
        return pulumi.get(self, "mysql")

    @property
    @pulumi.getter
    def mysqlx(self) -> Optional[builtins.bool]:
        """
        Enable mysqlx.
        """
        return pulumi.get(self, "mysqlx")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class MySqlMysqlUserConfigPublicAccess(dict):
    def __init__(__self__, *,
                 mysql: Optional[builtins.bool] = None,
                 mysqlx: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool mysql: Allow clients to connect to mysql from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool mysqlx: Allow clients to connect to mysqlx from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if mysql is not None:
            pulumi.set(__self__, "mysql", mysql)
        if mysqlx is not None:
            pulumi.set(__self__, "mysqlx", mysqlx)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def mysql(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to mysql from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "mysql")

    @property
    @pulumi.getter
    def mysqlx(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to mysqlx from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "mysqlx")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class MySqlServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in MySqlServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        MySqlServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        MySqlServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration. The possible value is `read_replica`.
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration. The possible value is `read_replica`.
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class MySqlTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class MySqlTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class OpenSearchComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class OpenSearchOpensearch(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "kibanaUri":
            suggest = "kibana_uri"
        elif key == "opensearchDashboardsUri":
            suggest = "opensearch_dashboards_uri"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearch. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearch.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearch.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 kibana_uri: Optional[builtins.str] = None,
                 opensearch_dashboards_uri: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 uris: Optional[Sequence[builtins.str]] = None,
                 username: Optional[builtins.str] = None):
        """
        :param builtins.str kibana_uri: URI for Kibana dashboard frontend.
        :param builtins.str opensearch_dashboards_uri: URI for OpenSearch dashboard frontend.
        :param builtins.str password: OpenSearch password.
        :param Sequence[builtins.str] uris: OpenSearch server URIs.
        :param builtins.str username: OpenSearch username.
        """
        if kibana_uri is not None:
            pulumi.set(__self__, "kibana_uri", kibana_uri)
        if opensearch_dashboards_uri is not None:
            pulumi.set(__self__, "opensearch_dashboards_uri", opensearch_dashboards_uri)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if uris is not None:
            pulumi.set(__self__, "uris", uris)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="kibanaUri")
    @_utilities.deprecated("""This field was added by mistake and has never worked. It will be removed in future versions.""")
    def kibana_uri(self) -> Optional[builtins.str]:
        """
        URI for Kibana dashboard frontend.
        """
        return pulumi.get(self, "kibana_uri")

    @property
    @pulumi.getter(name="opensearchDashboardsUri")
    def opensearch_dashboards_uri(self) -> Optional[builtins.str]:
        """
        URI for OpenSearch dashboard frontend.
        """
        return pulumi.get(self, "opensearch_dashboards_uri")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        OpenSearch password.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def uris(self) -> Optional[Sequence[builtins.str]]:
        """
        OpenSearch server URIs.
        """
        return pulumi.get(self, "uris")

    @property
    @pulumi.getter
    def username(self) -> Optional[builtins.str]:
        """
        OpenSearch username.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class OpenSearchOpensearchUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "additionalBackupRegions":
            suggest = "additional_backup_regions"
        elif key == "azureMigration":
            suggest = "azure_migration"
        elif key == "customDomain":
            suggest = "custom_domain"
        elif key == "disableReplicationFactorAdjustment":
            suggest = "disable_replication_factor_adjustment"
        elif key == "gcsMigration":
            suggest = "gcs_migration"
        elif key == "indexPatterns":
            suggest = "index_patterns"
        elif key == "indexRollup":
            suggest = "index_rollup"
        elif key == "indexTemplate":
            suggest = "index_template"
        elif key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "keepIndexRefreshInterval":
            suggest = "keep_index_refresh_interval"
        elif key == "maxIndexCount":
            suggest = "max_index_count"
        elif key == "opensearchDashboards":
            suggest = "opensearch_dashboards"
        elif key == "opensearchVersion":
            suggest = "opensearch_version"
        elif key == "privateAccess":
            suggest = "private_access"
        elif key == "privatelinkAccess":
            suggest = "privatelink_access"
        elif key == "projectToForkFrom":
            suggest = "project_to_fork_from"
        elif key == "publicAccess":
            suggest = "public_access"
        elif key == "recoveryBasebackupName":
            suggest = "recovery_basebackup_name"
        elif key == "s3Migration":
            suggest = "s3_migration"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "serviceToForkFrom":
            suggest = "service_to_fork_from"
        elif key == "staticIps":
            suggest = "static_ips"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 azure_migration: Optional['outputs.OpenSearchOpensearchUserConfigAzureMigration'] = None,
                 custom_domain: Optional[builtins.str] = None,
                 disable_replication_factor_adjustment: Optional[builtins.bool] = None,
                 gcs_migration: Optional['outputs.OpenSearchOpensearchUserConfigGcsMigration'] = None,
                 index_patterns: Optional[Sequence['outputs.OpenSearchOpensearchUserConfigIndexPattern']] = None,
                 index_rollup: Optional['outputs.OpenSearchOpensearchUserConfigIndexRollup'] = None,
                 index_template: Optional['outputs.OpenSearchOpensearchUserConfigIndexTemplate'] = None,
                 ip_filter_objects: Optional[Sequence['outputs.OpenSearchOpensearchUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 keep_index_refresh_interval: Optional[builtins.bool] = None,
                 max_index_count: Optional[builtins.int] = None,
                 openid: Optional['outputs.OpenSearchOpensearchUserConfigOpenid'] = None,
                 opensearch: Optional['outputs.OpenSearchOpensearchUserConfigOpensearch'] = None,
                 opensearch_dashboards: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchDashboards'] = None,
                 opensearch_version: Optional[builtins.str] = None,
                 private_access: Optional['outputs.OpenSearchOpensearchUserConfigPrivateAccess'] = None,
                 privatelink_access: Optional['outputs.OpenSearchOpensearchUserConfigPrivatelinkAccess'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.OpenSearchOpensearchUserConfigPublicAccess'] = None,
                 recovery_basebackup_name: Optional[builtins.str] = None,
                 s3_migration: Optional['outputs.OpenSearchOpensearchUserConfigS3Migration'] = None,
                 saml: Optional['outputs.OpenSearchOpensearchUserConfigSaml'] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param 'OpenSearchOpensearchUserConfigAzureMigrationArgs' azure_migration: Azure migration settings
        :param builtins.str custom_domain: Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        :param builtins.bool disable_replication_factor_adjustment: Disable automatic replication factor adjustment for multi-node services. By default, Aiven ensures all indexes are replicated at least to two nodes. Note: Due to potential data loss in case of losing a service node, this setting can not be activated unless specifically allowed for the project.
        :param 'OpenSearchOpensearchUserConfigGcsMigrationArgs' gcs_migration: Google Cloud Storage migration settings
        :param Sequence['OpenSearchOpensearchUserConfigIndexPatternArgs'] index_patterns: Index patterns
        :param 'OpenSearchOpensearchUserConfigIndexRollupArgs' index_rollup: Index rollup settings
        :param 'OpenSearchOpensearchUserConfigIndexTemplateArgs' index_template: Template settings for all new indexes
        :param Sequence['OpenSearchOpensearchUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param builtins.bool keep_index_refresh_interval: Aiven automation resets index.refresh_interval to default value for every index to be sure that indices are always visible to search. If it doesn't fit your case, you can disable this by setting up this flag to true.
        :param builtins.int max_index_count: Use index_patterns instead. Default: `0`.
        :param 'OpenSearchOpensearchUserConfigOpenidArgs' openid: OpenSearch OpenID Connect Configuration
        :param 'OpenSearchOpensearchUserConfigOpensearchArgs' opensearch: OpenSearch settings
        :param 'OpenSearchOpensearchUserConfigOpensearchDashboardsArgs' opensearch_dashboards: OpenSearch Dashboards settings
        :param builtins.str opensearch_version: Enum: `1`, `2`, and newer. OpenSearch major version.
        :param 'OpenSearchOpensearchUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'OpenSearchOpensearchUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'OpenSearchOpensearchUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_basebackup_name: Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        :param 'OpenSearchOpensearchUserConfigS3MigrationArgs' s3_migration: AWS S3 / AWS S3 compatible migration settings
        :param 'OpenSearchOpensearchUserConfigSamlArgs' saml: OpenSearch SAML configuration
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if azure_migration is not None:
            pulumi.set(__self__, "azure_migration", azure_migration)
        if custom_domain is not None:
            pulumi.set(__self__, "custom_domain", custom_domain)
        if disable_replication_factor_adjustment is not None:
            pulumi.set(__self__, "disable_replication_factor_adjustment", disable_replication_factor_adjustment)
        if gcs_migration is not None:
            pulumi.set(__self__, "gcs_migration", gcs_migration)
        if index_patterns is not None:
            pulumi.set(__self__, "index_patterns", index_patterns)
        if index_rollup is not None:
            pulumi.set(__self__, "index_rollup", index_rollup)
        if index_template is not None:
            pulumi.set(__self__, "index_template", index_template)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if keep_index_refresh_interval is not None:
            pulumi.set(__self__, "keep_index_refresh_interval", keep_index_refresh_interval)
        if max_index_count is not None:
            pulumi.set(__self__, "max_index_count", max_index_count)
        if openid is not None:
            pulumi.set(__self__, "openid", openid)
        if opensearch is not None:
            pulumi.set(__self__, "opensearch", opensearch)
        if opensearch_dashboards is not None:
            pulumi.set(__self__, "opensearch_dashboards", opensearch_dashboards)
        if opensearch_version is not None:
            pulumi.set(__self__, "opensearch_version", opensearch_version)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_basebackup_name is not None:
            pulumi.set(__self__, "recovery_basebackup_name", recovery_basebackup_name)
        if s3_migration is not None:
            pulumi.set(__self__, "s3_migration", s3_migration)
        if saml is not None:
            pulumi.set(__self__, "saml", saml)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="azureMigration")
    def azure_migration(self) -> Optional['outputs.OpenSearchOpensearchUserConfigAzureMigration']:
        """
        Azure migration settings
        """
        return pulumi.get(self, "azure_migration")

    @property
    @pulumi.getter(name="customDomain")
    def custom_domain(self) -> Optional[builtins.str]:
        """
        Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        """
        return pulumi.get(self, "custom_domain")

    @property
    @pulumi.getter(name="disableReplicationFactorAdjustment")
    def disable_replication_factor_adjustment(self) -> Optional[builtins.bool]:
        """
        Disable automatic replication factor adjustment for multi-node services. By default, Aiven ensures all indexes are replicated at least to two nodes. Note: Due to potential data loss in case of losing a service node, this setting can not be activated unless specifically allowed for the project.
        """
        return pulumi.get(self, "disable_replication_factor_adjustment")

    @property
    @pulumi.getter(name="gcsMigration")
    def gcs_migration(self) -> Optional['outputs.OpenSearchOpensearchUserConfigGcsMigration']:
        """
        Google Cloud Storage migration settings
        """
        return pulumi.get(self, "gcs_migration")

    @property
    @pulumi.getter(name="indexPatterns")
    def index_patterns(self) -> Optional[Sequence['outputs.OpenSearchOpensearchUserConfigIndexPattern']]:
        """
        Index patterns
        """
        return pulumi.get(self, "index_patterns")

    @property
    @pulumi.getter(name="indexRollup")
    def index_rollup(self) -> Optional['outputs.OpenSearchOpensearchUserConfigIndexRollup']:
        """
        Index rollup settings
        """
        return pulumi.get(self, "index_rollup")

    @property
    @pulumi.getter(name="indexTemplate")
    def index_template(self) -> Optional['outputs.OpenSearchOpensearchUserConfigIndexTemplate']:
        """
        Template settings for all new indexes
        """
        return pulumi.get(self, "index_template")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.OpenSearchOpensearchUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="keepIndexRefreshInterval")
    def keep_index_refresh_interval(self) -> Optional[builtins.bool]:
        """
        Aiven automation resets index.refresh_interval to default value for every index to be sure that indices are always visible to search. If it doesn't fit your case, you can disable this by setting up this flag to true.
        """
        return pulumi.get(self, "keep_index_refresh_interval")

    @property
    @pulumi.getter(name="maxIndexCount")
    def max_index_count(self) -> Optional[builtins.int]:
        """
        Use index_patterns instead. Default: `0`.
        """
        return pulumi.get(self, "max_index_count")

    @property
    @pulumi.getter
    def openid(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpenid']:
        """
        OpenSearch OpenID Connect Configuration
        """
        return pulumi.get(self, "openid")

    @property
    @pulumi.getter
    def opensearch(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearch']:
        """
        OpenSearch settings
        """
        return pulumi.get(self, "opensearch")

    @property
    @pulumi.getter(name="opensearchDashboards")
    def opensearch_dashboards(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchDashboards']:
        """
        OpenSearch Dashboards settings
        """
        return pulumi.get(self, "opensearch_dashboards")

    @property
    @pulumi.getter(name="opensearchVersion")
    def opensearch_version(self) -> Optional[builtins.str]:
        """
        Enum: `1`, `2`, and newer. OpenSearch major version.
        """
        return pulumi.get(self, "opensearch_version")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.OpenSearchOpensearchUserConfigPrivateAccess']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.OpenSearchOpensearchUserConfigPrivatelinkAccess']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.OpenSearchOpensearchUserConfigPublicAccess']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryBasebackupName")
    def recovery_basebackup_name(self) -> Optional[builtins.str]:
        """
        Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        """
        return pulumi.get(self, "recovery_basebackup_name")

    @property
    @pulumi.getter(name="s3Migration")
    def s3_migration(self) -> Optional['outputs.OpenSearchOpensearchUserConfigS3Migration']:
        """
        AWS S3 / AWS S3 compatible migration settings
        """
        return pulumi.get(self, "s3_migration")

    @property
    @pulumi.getter
    def saml(self) -> Optional['outputs.OpenSearchOpensearchUserConfigSaml']:
        """
        OpenSearch SAML configuration
        """
        return pulumi.get(self, "saml")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class OpenSearchOpensearchUserConfigAzureMigration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "basePath":
            suggest = "base_path"
        elif key == "snapshotName":
            suggest = "snapshot_name"
        elif key == "chunkSize":
            suggest = "chunk_size"
        elif key == "endpointSuffix":
            suggest = "endpoint_suffix"
        elif key == "includeAliases":
            suggest = "include_aliases"
        elif key == "restoreGlobalState":
            suggest = "restore_global_state"
        elif key == "sasToken":
            suggest = "sas_token"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigAzureMigration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigAzureMigration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigAzureMigration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 account: builtins.str,
                 base_path: builtins.str,
                 container: builtins.str,
                 indices: builtins.str,
                 snapshot_name: builtins.str,
                 chunk_size: Optional[builtins.str] = None,
                 compress: Optional[builtins.bool] = None,
                 endpoint_suffix: Optional[builtins.str] = None,
                 include_aliases: Optional[builtins.bool] = None,
                 key: Optional[builtins.str] = None,
                 readonly: Optional[builtins.bool] = None,
                 restore_global_state: Optional[builtins.bool] = None,
                 sas_token: Optional[builtins.str] = None):
        """
        :param builtins.str account: Account name.
        :param builtins.str base_path: The path to the repository data within its container. The value of this setting should not start or end with a /.
        :param builtins.str container: Azure container name.
        :param builtins.str indices: A comma-delimited list of indices to restore from the snapshot. Multi-index syntax is supported. Example: `metrics*,logs*,data-20240823`.
        :param builtins.str snapshot_name: The snapshot name to restore from.
        :param builtins.str chunk_size: Big files can be broken down into chunks during snapshotting if needed. Should be the same as for the 3rd party repository.
        :param builtins.bool compress: When set to true metadata files are stored in compressed format.
        :param builtins.str endpoint_suffix: Defines the DNS suffix for Azure Storage endpoints.
        :param builtins.bool include_aliases: Whether to restore aliases alongside their associated indexes. Default is true.
        :param builtins.str key: Azure account secret key. One of key or sas_token should be specified.
        :param builtins.bool readonly: Whether the repository is read-only. Default: `true`.
        :param builtins.bool restore_global_state: If true, restore the cluster state. Defaults to false.
        :param builtins.str sas_token: A shared access signatures (SAS) token. One of key or sas_token should be specified.
        """
        pulumi.set(__self__, "account", account)
        pulumi.set(__self__, "base_path", base_path)
        pulumi.set(__self__, "container", container)
        pulumi.set(__self__, "indices", indices)
        pulumi.set(__self__, "snapshot_name", snapshot_name)
        if chunk_size is not None:
            pulumi.set(__self__, "chunk_size", chunk_size)
        if compress is not None:
            pulumi.set(__self__, "compress", compress)
        if endpoint_suffix is not None:
            pulumi.set(__self__, "endpoint_suffix", endpoint_suffix)
        if include_aliases is not None:
            pulumi.set(__self__, "include_aliases", include_aliases)
        if key is not None:
            pulumi.set(__self__, "key", key)
        if readonly is not None:
            pulumi.set(__self__, "readonly", readonly)
        if restore_global_state is not None:
            pulumi.set(__self__, "restore_global_state", restore_global_state)
        if sas_token is not None:
            pulumi.set(__self__, "sas_token", sas_token)

    @property
    @pulumi.getter
    def account(self) -> builtins.str:
        """
        Account name.
        """
        return pulumi.get(self, "account")

    @property
    @pulumi.getter(name="basePath")
    def base_path(self) -> builtins.str:
        """
        The path to the repository data within its container. The value of this setting should not start or end with a /.
        """
        return pulumi.get(self, "base_path")

    @property
    @pulumi.getter
    def container(self) -> builtins.str:
        """
        Azure container name.
        """
        return pulumi.get(self, "container")

    @property
    @pulumi.getter
    def indices(self) -> builtins.str:
        """
        A comma-delimited list of indices to restore from the snapshot. Multi-index syntax is supported. Example: `metrics*,logs*,data-20240823`.
        """
        return pulumi.get(self, "indices")

    @property
    @pulumi.getter(name="snapshotName")
    def snapshot_name(self) -> builtins.str:
        """
        The snapshot name to restore from.
        """
        return pulumi.get(self, "snapshot_name")

    @property
    @pulumi.getter(name="chunkSize")
    def chunk_size(self) -> Optional[builtins.str]:
        """
        Big files can be broken down into chunks during snapshotting if needed. Should be the same as for the 3rd party repository.
        """
        return pulumi.get(self, "chunk_size")

    @property
    @pulumi.getter
    def compress(self) -> Optional[builtins.bool]:
        """
        When set to true metadata files are stored in compressed format.
        """
        return pulumi.get(self, "compress")

    @property
    @pulumi.getter(name="endpointSuffix")
    def endpoint_suffix(self) -> Optional[builtins.str]:
        """
        Defines the DNS suffix for Azure Storage endpoints.
        """
        return pulumi.get(self, "endpoint_suffix")

    @property
    @pulumi.getter(name="includeAliases")
    def include_aliases(self) -> Optional[builtins.bool]:
        """
        Whether to restore aliases alongside their associated indexes. Default is true.
        """
        return pulumi.get(self, "include_aliases")

    @property
    @pulumi.getter
    def key(self) -> Optional[builtins.str]:
        """
        Azure account secret key. One of key or sas_token should be specified.
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def readonly(self) -> Optional[builtins.bool]:
        """
        Whether the repository is read-only. Default: `true`.
        """
        return pulumi.get(self, "readonly")

    @property
    @pulumi.getter(name="restoreGlobalState")
    def restore_global_state(self) -> Optional[builtins.bool]:
        """
        If true, restore the cluster state. Defaults to false.
        """
        return pulumi.get(self, "restore_global_state")

    @property
    @pulumi.getter(name="sasToken")
    def sas_token(self) -> Optional[builtins.str]:
        """
        A shared access signatures (SAS) token. One of key or sas_token should be specified.
        """
        return pulumi.get(self, "sas_token")


@pulumi.output_type
class OpenSearchOpensearchUserConfigGcsMigration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "basePath":
            suggest = "base_path"
        elif key == "snapshotName":
            suggest = "snapshot_name"
        elif key == "chunkSize":
            suggest = "chunk_size"
        elif key == "includeAliases":
            suggest = "include_aliases"
        elif key == "restoreGlobalState":
            suggest = "restore_global_state"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigGcsMigration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigGcsMigration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigGcsMigration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 base_path: builtins.str,
                 bucket: builtins.str,
                 credentials: builtins.str,
                 indices: builtins.str,
                 snapshot_name: builtins.str,
                 chunk_size: Optional[builtins.str] = None,
                 compress: Optional[builtins.bool] = None,
                 include_aliases: Optional[builtins.bool] = None,
                 readonly: Optional[builtins.bool] = None,
                 restore_global_state: Optional[builtins.bool] = None):
        """
        :param builtins.str base_path: The path to the repository data within its container. The value of this setting should not start or end with a /.
        :param builtins.str bucket: The path to the repository data within its container.
        :param builtins.str credentials: Google Cloud Storage credentials file content.
        :param builtins.str indices: A comma-delimited list of indices to restore from the snapshot. Multi-index syntax is supported. Example: `metrics*,logs*,data-20240823`.
        :param builtins.str snapshot_name: The snapshot name to restore from.
        :param builtins.str chunk_size: Big files can be broken down into chunks during snapshotting if needed. Should be the same as for the 3rd party repository.
        :param builtins.bool compress: When set to true metadata files are stored in compressed format.
        :param builtins.bool include_aliases: Whether to restore aliases alongside their associated indexes. Default is true.
        :param builtins.bool readonly: Whether the repository is read-only. Default: `true`.
        :param builtins.bool restore_global_state: If true, restore the cluster state. Defaults to false.
        """
        pulumi.set(__self__, "base_path", base_path)
        pulumi.set(__self__, "bucket", bucket)
        pulumi.set(__self__, "credentials", credentials)
        pulumi.set(__self__, "indices", indices)
        pulumi.set(__self__, "snapshot_name", snapshot_name)
        if chunk_size is not None:
            pulumi.set(__self__, "chunk_size", chunk_size)
        if compress is not None:
            pulumi.set(__self__, "compress", compress)
        if include_aliases is not None:
            pulumi.set(__self__, "include_aliases", include_aliases)
        if readonly is not None:
            pulumi.set(__self__, "readonly", readonly)
        if restore_global_state is not None:
            pulumi.set(__self__, "restore_global_state", restore_global_state)

    @property
    @pulumi.getter(name="basePath")
    def base_path(self) -> builtins.str:
        """
        The path to the repository data within its container. The value of this setting should not start or end with a /.
        """
        return pulumi.get(self, "base_path")

    @property
    @pulumi.getter
    def bucket(self) -> builtins.str:
        """
        The path to the repository data within its container.
        """
        return pulumi.get(self, "bucket")

    @property
    @pulumi.getter
    def credentials(self) -> builtins.str:
        """
        Google Cloud Storage credentials file content.
        """
        return pulumi.get(self, "credentials")

    @property
    @pulumi.getter
    def indices(self) -> builtins.str:
        """
        A comma-delimited list of indices to restore from the snapshot. Multi-index syntax is supported. Example: `metrics*,logs*,data-20240823`.
        """
        return pulumi.get(self, "indices")

    @property
    @pulumi.getter(name="snapshotName")
    def snapshot_name(self) -> builtins.str:
        """
        The snapshot name to restore from.
        """
        return pulumi.get(self, "snapshot_name")

    @property
    @pulumi.getter(name="chunkSize")
    def chunk_size(self) -> Optional[builtins.str]:
        """
        Big files can be broken down into chunks during snapshotting if needed. Should be the same as for the 3rd party repository.
        """
        return pulumi.get(self, "chunk_size")

    @property
    @pulumi.getter
    def compress(self) -> Optional[builtins.bool]:
        """
        When set to true metadata files are stored in compressed format.
        """
        return pulumi.get(self, "compress")

    @property
    @pulumi.getter(name="includeAliases")
    def include_aliases(self) -> Optional[builtins.bool]:
        """
        Whether to restore aliases alongside their associated indexes. Default is true.
        """
        return pulumi.get(self, "include_aliases")

    @property
    @pulumi.getter
    def readonly(self) -> Optional[builtins.bool]:
        """
        Whether the repository is read-only. Default: `true`.
        """
        return pulumi.get(self, "readonly")

    @property
    @pulumi.getter(name="restoreGlobalState")
    def restore_global_state(self) -> Optional[builtins.bool]:
        """
        If true, restore the cluster state. Defaults to false.
        """
        return pulumi.get(self, "restore_global_state")


@pulumi.output_type
class OpenSearchOpensearchUserConfigIndexPattern(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "maxIndexCount":
            suggest = "max_index_count"
        elif key == "sortingAlgorithm":
            suggest = "sorting_algorithm"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigIndexPattern. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigIndexPattern.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigIndexPattern.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 max_index_count: builtins.int,
                 pattern: builtins.str,
                 sorting_algorithm: Optional[builtins.str] = None):
        """
        :param builtins.int max_index_count: Maximum number of indexes to keep. Example: `3`.
        :param builtins.str pattern: fnmatch pattern. Example: `logs_*_foo_*`.
        :param builtins.str sorting_algorithm: Enum: `alphabetical`, `creation_date`. Deletion sorting algorithm. Default: `creation_date`.
        """
        pulumi.set(__self__, "max_index_count", max_index_count)
        pulumi.set(__self__, "pattern", pattern)
        if sorting_algorithm is not None:
            pulumi.set(__self__, "sorting_algorithm", sorting_algorithm)

    @property
    @pulumi.getter(name="maxIndexCount")
    def max_index_count(self) -> builtins.int:
        """
        Maximum number of indexes to keep. Example: `3`.
        """
        return pulumi.get(self, "max_index_count")

    @property
    @pulumi.getter
    def pattern(self) -> builtins.str:
        """
        fnmatch pattern. Example: `logs_*_foo_*`.
        """
        return pulumi.get(self, "pattern")

    @property
    @pulumi.getter(name="sortingAlgorithm")
    def sorting_algorithm(self) -> Optional[builtins.str]:
        """
        Enum: `alphabetical`, `creation_date`. Deletion sorting algorithm. Default: `creation_date`.
        """
        return pulumi.get(self, "sorting_algorithm")


@pulumi.output_type
class OpenSearchOpensearchUserConfigIndexRollup(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "rollupDashboardsEnabled":
            suggest = "rollup_dashboards_enabled"
        elif key == "rollupEnabled":
            suggest = "rollup_enabled"
        elif key == "rollupSearchBackoffCount":
            suggest = "rollup_search_backoff_count"
        elif key == "rollupSearchBackoffMillis":
            suggest = "rollup_search_backoff_millis"
        elif key == "rollupSearchSearchAllJobs":
            suggest = "rollup_search_search_all_jobs"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigIndexRollup. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigIndexRollup.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigIndexRollup.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 rollup_dashboards_enabled: Optional[builtins.bool] = None,
                 rollup_enabled: Optional[builtins.bool] = None,
                 rollup_search_backoff_count: Optional[builtins.int] = None,
                 rollup_search_backoff_millis: Optional[builtins.int] = None,
                 rollup_search_search_all_jobs: Optional[builtins.bool] = None):
        """
        :param builtins.bool rollup_dashboards_enabled: Whether rollups are enabled in OpenSearch Dashboards. Defaults to true.
        :param builtins.bool rollup_enabled: Whether the rollup plugin is enabled. Defaults to true.
        :param builtins.int rollup_search_backoff_count: How many retries the plugin should attempt for failed rollup jobs. Defaults to 5.
        :param builtins.int rollup_search_backoff_millis: The backoff time between retries for failed rollup jobs. Defaults to 1000ms.
        :param builtins.bool rollup_search_search_all_jobs: Whether OpenSearch should return all jobs that match all specified search terms. If disabled, OpenSearch returns just one, as opposed to all, of the jobs that matches the search terms. Defaults to false.
        """
        if rollup_dashboards_enabled is not None:
            pulumi.set(__self__, "rollup_dashboards_enabled", rollup_dashboards_enabled)
        if rollup_enabled is not None:
            pulumi.set(__self__, "rollup_enabled", rollup_enabled)
        if rollup_search_backoff_count is not None:
            pulumi.set(__self__, "rollup_search_backoff_count", rollup_search_backoff_count)
        if rollup_search_backoff_millis is not None:
            pulumi.set(__self__, "rollup_search_backoff_millis", rollup_search_backoff_millis)
        if rollup_search_search_all_jobs is not None:
            pulumi.set(__self__, "rollup_search_search_all_jobs", rollup_search_search_all_jobs)

    @property
    @pulumi.getter(name="rollupDashboardsEnabled")
    def rollup_dashboards_enabled(self) -> Optional[builtins.bool]:
        """
        Whether rollups are enabled in OpenSearch Dashboards. Defaults to true.
        """
        return pulumi.get(self, "rollup_dashboards_enabled")

    @property
    @pulumi.getter(name="rollupEnabled")
    def rollup_enabled(self) -> Optional[builtins.bool]:
        """
        Whether the rollup plugin is enabled. Defaults to true.
        """
        return pulumi.get(self, "rollup_enabled")

    @property
    @pulumi.getter(name="rollupSearchBackoffCount")
    def rollup_search_backoff_count(self) -> Optional[builtins.int]:
        """
        How many retries the plugin should attempt for failed rollup jobs. Defaults to 5.
        """
        return pulumi.get(self, "rollup_search_backoff_count")

    @property
    @pulumi.getter(name="rollupSearchBackoffMillis")
    def rollup_search_backoff_millis(self) -> Optional[builtins.int]:
        """
        The backoff time between retries for failed rollup jobs. Defaults to 1000ms.
        """
        return pulumi.get(self, "rollup_search_backoff_millis")

    @property
    @pulumi.getter(name="rollupSearchSearchAllJobs")
    def rollup_search_search_all_jobs(self) -> Optional[builtins.bool]:
        """
        Whether OpenSearch should return all jobs that match all specified search terms. If disabled, OpenSearch returns just one, as opposed to all, of the jobs that matches the search terms. Defaults to false.
        """
        return pulumi.get(self, "rollup_search_search_all_jobs")


@pulumi.output_type
class OpenSearchOpensearchUserConfigIndexTemplate(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "mappingNestedObjectsLimit":
            suggest = "mapping_nested_objects_limit"
        elif key == "numberOfReplicas":
            suggest = "number_of_replicas"
        elif key == "numberOfShards":
            suggest = "number_of_shards"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigIndexTemplate. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigIndexTemplate.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigIndexTemplate.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 mapping_nested_objects_limit: Optional[builtins.int] = None,
                 number_of_replicas: Optional[builtins.int] = None,
                 number_of_shards: Optional[builtins.int] = None):
        """
        :param builtins.int mapping_nested_objects_limit: The maximum number of nested JSON objects that a single document can contain across all nested types. This limit helps to prevent out of memory errors when a document contains too many nested objects. Default is 10000. Example: `10000`.
        :param builtins.int number_of_replicas: The number of replicas each primary shard has. Example: `1`.
        :param builtins.int number_of_shards: The number of primary shards that an index should have. Example: `1`.
        """
        if mapping_nested_objects_limit is not None:
            pulumi.set(__self__, "mapping_nested_objects_limit", mapping_nested_objects_limit)
        if number_of_replicas is not None:
            pulumi.set(__self__, "number_of_replicas", number_of_replicas)
        if number_of_shards is not None:
            pulumi.set(__self__, "number_of_shards", number_of_shards)

    @property
    @pulumi.getter(name="mappingNestedObjectsLimit")
    def mapping_nested_objects_limit(self) -> Optional[builtins.int]:
        """
        The maximum number of nested JSON objects that a single document can contain across all nested types. This limit helps to prevent out of memory errors when a document contains too many nested objects. Default is 10000. Example: `10000`.
        """
        return pulumi.get(self, "mapping_nested_objects_limit")

    @property
    @pulumi.getter(name="numberOfReplicas")
    def number_of_replicas(self) -> Optional[builtins.int]:
        """
        The number of replicas each primary shard has. Example: `1`.
        """
        return pulumi.get(self, "number_of_replicas")

    @property
    @pulumi.getter(name="numberOfShards")
    def number_of_shards(self) -> Optional[builtins.int]:
        """
        The number of primary shards that an index should have. Example: `1`.
        """
        return pulumi.get(self, "number_of_shards")


@pulumi.output_type
class OpenSearchOpensearchUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpenid(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"
        elif key == "connectUrl":
            suggest = "connect_url"
        elif key == "jwtHeader":
            suggest = "jwt_header"
        elif key == "jwtUrlParameter":
            suggest = "jwt_url_parameter"
        elif key == "refreshRateLimitCount":
            suggest = "refresh_rate_limit_count"
        elif key == "refreshRateLimitTimeWindowMs":
            suggest = "refresh_rate_limit_time_window_ms"
        elif key == "rolesKey":
            suggest = "roles_key"
        elif key == "subjectKey":
            suggest = "subject_key"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpenid. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpenid.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpenid.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 client_id: builtins.str,
                 client_secret: builtins.str,
                 connect_url: builtins.str,
                 enabled: builtins.bool,
                 header: Optional[builtins.str] = None,
                 jwt_header: Optional[builtins.str] = None,
                 jwt_url_parameter: Optional[builtins.str] = None,
                 refresh_rate_limit_count: Optional[builtins.int] = None,
                 refresh_rate_limit_time_window_ms: Optional[builtins.int] = None,
                 roles_key: Optional[builtins.str] = None,
                 scope: Optional[builtins.str] = None,
                 subject_key: Optional[builtins.str] = None):
        """
        :param builtins.str client_id: The ID of the OpenID Connect client configured in your IdP. Required.
        :param builtins.str client_secret: The client secret of the OpenID Connect client configured in your IdP. Required.
        :param builtins.str connect_url: The URL of your IdP where the Security plugin can find the OpenID Connect metadata/configuration settings. Example: `https://test-account.okta.com/app/exk491jujcVc83LEX697/sso/saml/metadata`.
        :param builtins.bool enabled: Enables or disables OpenID Connect authentication for OpenSearch. When enabled, users can authenticate using OpenID Connect with an Identity Provider. Default: `true`.
        :param builtins.str header: HTTP header name of the JWT token. Optional. Default is Authorization. Default: `Authorization`.
        :param builtins.str jwt_header: The HTTP header that stores the token. Typically the Authorization header with the Bearer schema: Authorization: Bearer \\n\\n. Optional. Default is Authorization. Example: `preferred_username`.
        :param builtins.str jwt_url_parameter: If the token is not transmitted in the HTTP header, but as an URL parameter, define the name of the parameter here. Optional. Example: `preferred_username`.
        :param builtins.int refresh_rate_limit_count: The maximum number of unknown key IDs in the time frame. Default is 10. Optional. Default: `10`.
        :param builtins.int refresh_rate_limit_time_window_ms: The time frame to use when checking the maximum number of unknown key IDs, in milliseconds. Optional.Default is 10000 (10 seconds). Default: `10000`.
        :param builtins.str roles_key: The key in the JSON payload that stores the user’s roles. The value of this key must be a comma-separated list of roles. Required only if you want to use roles in the JWT. Example: `roles`.
        :param builtins.str scope: The scope of the identity token issued by the IdP. Optional. Default is openid profile email address phone.
        :param builtins.str subject_key: The key in the JSON payload that stores the user’s name. If not defined, the subject registered claim is used. Most IdP providers use the preferred_username claim. Optional. Example: `preferred_username`.
        """
        pulumi.set(__self__, "client_id", client_id)
        pulumi.set(__self__, "client_secret", client_secret)
        pulumi.set(__self__, "connect_url", connect_url)
        pulumi.set(__self__, "enabled", enabled)
        if header is not None:
            pulumi.set(__self__, "header", header)
        if jwt_header is not None:
            pulumi.set(__self__, "jwt_header", jwt_header)
        if jwt_url_parameter is not None:
            pulumi.set(__self__, "jwt_url_parameter", jwt_url_parameter)
        if refresh_rate_limit_count is not None:
            pulumi.set(__self__, "refresh_rate_limit_count", refresh_rate_limit_count)
        if refresh_rate_limit_time_window_ms is not None:
            pulumi.set(__self__, "refresh_rate_limit_time_window_ms", refresh_rate_limit_time_window_ms)
        if roles_key is not None:
            pulumi.set(__self__, "roles_key", roles_key)
        if scope is not None:
            pulumi.set(__self__, "scope", scope)
        if subject_key is not None:
            pulumi.set(__self__, "subject_key", subject_key)

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> builtins.str:
        """
        The ID of the OpenID Connect client configured in your IdP. Required.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> builtins.str:
        """
        The client secret of the OpenID Connect client configured in your IdP. Required.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter(name="connectUrl")
    def connect_url(self) -> builtins.str:
        """
        The URL of your IdP where the Security plugin can find the OpenID Connect metadata/configuration settings. Example: `https://test-account.okta.com/app/exk491jujcVc83LEX697/sso/saml/metadata`.
        """
        return pulumi.get(self, "connect_url")

    @property
    @pulumi.getter
    def enabled(self) -> builtins.bool:
        """
        Enables or disables OpenID Connect authentication for OpenSearch. When enabled, users can authenticate using OpenID Connect with an Identity Provider. Default: `true`.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter
    def header(self) -> Optional[builtins.str]:
        """
        HTTP header name of the JWT token. Optional. Default is Authorization. Default: `Authorization`.
        """
        return pulumi.get(self, "header")

    @property
    @pulumi.getter(name="jwtHeader")
    def jwt_header(self) -> Optional[builtins.str]:
        """
        The HTTP header that stores the token. Typically the Authorization header with the Bearer schema: Authorization: Bearer \\n\\n. Optional. Default is Authorization. Example: `preferred_username`.
        """
        return pulumi.get(self, "jwt_header")

    @property
    @pulumi.getter(name="jwtUrlParameter")
    def jwt_url_parameter(self) -> Optional[builtins.str]:
        """
        If the token is not transmitted in the HTTP header, but as an URL parameter, define the name of the parameter here. Optional. Example: `preferred_username`.
        """
        return pulumi.get(self, "jwt_url_parameter")

    @property
    @pulumi.getter(name="refreshRateLimitCount")
    def refresh_rate_limit_count(self) -> Optional[builtins.int]:
        """
        The maximum number of unknown key IDs in the time frame. Default is 10. Optional. Default: `10`.
        """
        return pulumi.get(self, "refresh_rate_limit_count")

    @property
    @pulumi.getter(name="refreshRateLimitTimeWindowMs")
    def refresh_rate_limit_time_window_ms(self) -> Optional[builtins.int]:
        """
        The time frame to use when checking the maximum number of unknown key IDs, in milliseconds. Optional.Default is 10000 (10 seconds). Default: `10000`.
        """
        return pulumi.get(self, "refresh_rate_limit_time_window_ms")

    @property
    @pulumi.getter(name="rolesKey")
    def roles_key(self) -> Optional[builtins.str]:
        """
        The key in the JSON payload that stores the user’s roles. The value of this key must be a comma-separated list of roles. Required only if you want to use roles in the JWT. Example: `roles`.
        """
        return pulumi.get(self, "roles_key")

    @property
    @pulumi.getter
    def scope(self) -> Optional[builtins.str]:
        """
        The scope of the identity token issued by the IdP. Optional. Default is openid profile email address phone.
        """
        return pulumi.get(self, "scope")

    @property
    @pulumi.getter(name="subjectKey")
    def subject_key(self) -> Optional[builtins.str]:
        """
        The key in the JSON payload that stores the user’s name. If not defined, the subject registered claim is used. Most IdP providers use the preferred_username claim. Optional. Example: `preferred_username`.
        """
        return pulumi.get(self, "subject_key")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearch(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "actionAutoCreateIndexEnabled":
            suggest = "action_auto_create_index_enabled"
        elif key == "actionDestructiveRequiresName":
            suggest = "action_destructive_requires_name"
        elif key == "authFailureListeners":
            suggest = "auth_failure_listeners"
        elif key == "clusterMaxShardsPerNode":
            suggest = "cluster_max_shards_per_node"
        elif key == "clusterRoutingAllocationBalancePreferPrimary":
            suggest = "cluster_routing_allocation_balance_prefer_primary"
        elif key == "clusterRoutingAllocationNodeConcurrentRecoveries":
            suggest = "cluster_routing_allocation_node_concurrent_recoveries"
        elif key == "clusterSearchRequestSlowlog":
            suggest = "cluster_search_request_slowlog"
        elif key == "diskWatermarks":
            suggest = "disk_watermarks"
        elif key == "emailSenderName":
            suggest = "email_sender_name"
        elif key == "emailSenderPassword":
            suggest = "email_sender_password"
        elif key == "emailSenderUsername":
            suggest = "email_sender_username"
        elif key == "enableRemoteBackedStorage":
            suggest = "enable_remote_backed_storage"
        elif key == "enableSearchableSnapshots":
            suggest = "enable_searchable_snapshots"
        elif key == "enableSecurityAudit":
            suggest = "enable_security_audit"
        elif key == "enableSnapshotApi":
            suggest = "enable_snapshot_api"
        elif key == "httpMaxContentLength":
            suggest = "http_max_content_length"
        elif key == "httpMaxHeaderSize":
            suggest = "http_max_header_size"
        elif key == "httpMaxInitialLineLength":
            suggest = "http_max_initial_line_length"
        elif key == "indicesFielddataCacheSize":
            suggest = "indices_fielddata_cache_size"
        elif key == "indicesMemoryIndexBufferSize":
            suggest = "indices_memory_index_buffer_size"
        elif key == "indicesMemoryMaxIndexBufferSize":
            suggest = "indices_memory_max_index_buffer_size"
        elif key == "indicesMemoryMinIndexBufferSize":
            suggest = "indices_memory_min_index_buffer_size"
        elif key == "indicesQueriesCacheSize":
            suggest = "indices_queries_cache_size"
        elif key == "indicesQueryBoolMaxClauseCount":
            suggest = "indices_query_bool_max_clause_count"
        elif key == "indicesRecoveryMaxBytesPerSec":
            suggest = "indices_recovery_max_bytes_per_sec"
        elif key == "indicesRecoveryMaxConcurrentFileChunks":
            suggest = "indices_recovery_max_concurrent_file_chunks"
        elif key == "ismEnabled":
            suggest = "ism_enabled"
        elif key == "ismHistoryEnabled":
            suggest = "ism_history_enabled"
        elif key == "ismHistoryMaxAge":
            suggest = "ism_history_max_age"
        elif key == "ismHistoryMaxDocs":
            suggest = "ism_history_max_docs"
        elif key == "ismHistoryRolloverCheckPeriod":
            suggest = "ism_history_rollover_check_period"
        elif key == "ismHistoryRolloverRetentionPeriod":
            suggest = "ism_history_rollover_retention_period"
        elif key == "knnMemoryCircuitBreakerEnabled":
            suggest = "knn_memory_circuit_breaker_enabled"
        elif key == "knnMemoryCircuitBreakerLimit":
            suggest = "knn_memory_circuit_breaker_limit"
        elif key == "overrideMainResponseVersion":
            suggest = "override_main_response_version"
        elif key == "pluginsAlertingFilterByBackendRoles":
            suggest = "plugins_alerting_filter_by_backend_roles"
        elif key == "reindexRemoteWhitelists":
            suggest = "reindex_remote_whitelists"
        elif key == "scriptMaxCompilationsRate":
            suggest = "script_max_compilations_rate"
        elif key == "searchBackpressure":
            suggest = "search_backpressure"
        elif key == "searchInsightsTopQueries":
            suggest = "search_insights_top_queries"
        elif key == "searchMaxBuckets":
            suggest = "search_max_buckets"
        elif key == "shardIndexingPressure":
            suggest = "shard_indexing_pressure"
        elif key == "threadPoolAnalyzeQueueSize":
            suggest = "thread_pool_analyze_queue_size"
        elif key == "threadPoolAnalyzeSize":
            suggest = "thread_pool_analyze_size"
        elif key == "threadPoolForceMergeSize":
            suggest = "thread_pool_force_merge_size"
        elif key == "threadPoolGetQueueSize":
            suggest = "thread_pool_get_queue_size"
        elif key == "threadPoolGetSize":
            suggest = "thread_pool_get_size"
        elif key == "threadPoolSearchQueueSize":
            suggest = "thread_pool_search_queue_size"
        elif key == "threadPoolSearchSize":
            suggest = "thread_pool_search_size"
        elif key == "threadPoolSearchThrottledQueueSize":
            suggest = "thread_pool_search_throttled_queue_size"
        elif key == "threadPoolSearchThrottledSize":
            suggest = "thread_pool_search_throttled_size"
        elif key == "threadPoolWriteQueueSize":
            suggest = "thread_pool_write_queue_size"
        elif key == "threadPoolWriteSize":
            suggest = "thread_pool_write_size"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpensearch. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpensearch.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpensearch.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 action_auto_create_index_enabled: Optional[builtins.bool] = None,
                 action_destructive_requires_name: Optional[builtins.bool] = None,
                 auth_failure_listeners: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchAuthFailureListeners'] = None,
                 cluster_max_shards_per_node: Optional[builtins.int] = None,
                 cluster_routing_allocation_balance_prefer_primary: Optional[builtins.bool] = None,
                 cluster_routing_allocation_node_concurrent_recoveries: Optional[builtins.int] = None,
                 cluster_search_request_slowlog: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchClusterSearchRequestSlowlog'] = None,
                 disk_watermarks: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchDiskWatermarks'] = None,
                 email_sender_name: Optional[builtins.str] = None,
                 email_sender_password: Optional[builtins.str] = None,
                 email_sender_username: Optional[builtins.str] = None,
                 enable_remote_backed_storage: Optional[builtins.bool] = None,
                 enable_searchable_snapshots: Optional[builtins.bool] = None,
                 enable_security_audit: Optional[builtins.bool] = None,
                 enable_snapshot_api: Optional[builtins.bool] = None,
                 http_max_content_length: Optional[builtins.int] = None,
                 http_max_header_size: Optional[builtins.int] = None,
                 http_max_initial_line_length: Optional[builtins.int] = None,
                 indices_fielddata_cache_size: Optional[builtins.int] = None,
                 indices_memory_index_buffer_size: Optional[builtins.int] = None,
                 indices_memory_max_index_buffer_size: Optional[builtins.int] = None,
                 indices_memory_min_index_buffer_size: Optional[builtins.int] = None,
                 indices_queries_cache_size: Optional[builtins.int] = None,
                 indices_query_bool_max_clause_count: Optional[builtins.int] = None,
                 indices_recovery_max_bytes_per_sec: Optional[builtins.int] = None,
                 indices_recovery_max_concurrent_file_chunks: Optional[builtins.int] = None,
                 ism_enabled: Optional[builtins.bool] = None,
                 ism_history_enabled: Optional[builtins.bool] = None,
                 ism_history_max_age: Optional[builtins.int] = None,
                 ism_history_max_docs: Optional[builtins.int] = None,
                 ism_history_rollover_check_period: Optional[builtins.int] = None,
                 ism_history_rollover_retention_period: Optional[builtins.int] = None,
                 knn_memory_circuit_breaker_enabled: Optional[builtins.bool] = None,
                 knn_memory_circuit_breaker_limit: Optional[builtins.int] = None,
                 override_main_response_version: Optional[builtins.bool] = None,
                 plugins_alerting_filter_by_backend_roles: Optional[builtins.bool] = None,
                 reindex_remote_whitelists: Optional[Sequence[builtins.str]] = None,
                 script_max_compilations_rate: Optional[builtins.str] = None,
                 search_backpressure: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSearchBackpressure'] = None,
                 search_insights_top_queries: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueries'] = None,
                 search_max_buckets: Optional[builtins.int] = None,
                 segrep: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSegrep'] = None,
                 shard_indexing_pressure: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchShardIndexingPressure'] = None,
                 thread_pool_analyze_queue_size: Optional[builtins.int] = None,
                 thread_pool_analyze_size: Optional[builtins.int] = None,
                 thread_pool_force_merge_size: Optional[builtins.int] = None,
                 thread_pool_get_queue_size: Optional[builtins.int] = None,
                 thread_pool_get_size: Optional[builtins.int] = None,
                 thread_pool_search_queue_size: Optional[builtins.int] = None,
                 thread_pool_search_size: Optional[builtins.int] = None,
                 thread_pool_search_throttled_queue_size: Optional[builtins.int] = None,
                 thread_pool_search_throttled_size: Optional[builtins.int] = None,
                 thread_pool_write_queue_size: Optional[builtins.int] = None,
                 thread_pool_write_size: Optional[builtins.int] = None):
        """
        :param builtins.bool action_auto_create_index_enabled: Explicitly allow or block automatic creation of indices. Defaults to true.
        :param builtins.bool action_destructive_requires_name: Require explicit index names when deleting.
        :param 'OpenSearchOpensearchUserConfigOpensearchAuthFailureListenersArgs' auth_failure_listeners: Opensearch Security Plugin Settings
        :param builtins.int cluster_max_shards_per_node: Controls the number of shards allowed in the cluster per data node. Example: `1000`.
        :param builtins.bool cluster_routing_allocation_balance_prefer_primary: When set to true, OpenSearch attempts to evenly distribute the primary shards between the cluster nodes. Enabling this setting does not always guarantee an equal number of primary shards on each node, especially in the event of a failover. Changing this setting to false after it was set to true does not invoke redistribution of primary shards. Default is false. Default: `false`.
        :param builtins.int cluster_routing_allocation_node_concurrent_recoveries: How many concurrent incoming/outgoing shard recoveries (normally replicas) are allowed to happen on a node. Defaults to node cpu count * 2.
        :param 'OpenSearchOpensearchUserConfigOpensearchDiskWatermarksArgs' disk_watermarks: Watermark settings
        :param builtins.str email_sender_name: Sender name placeholder to be used in Opensearch Dashboards and Opensearch keystore. Example: `alert-sender`.
        :param builtins.str email_sender_password: Sender password for Opensearch alerts to authenticate with SMTP server. Example: `very-secure-mail-password`.
        :param builtins.str email_sender_username: Sender username for Opensearch alerts. Example: `jane@example.com`.
        :param builtins.bool enable_remote_backed_storage: Enable remote-backed storage.
        :param builtins.bool enable_searchable_snapshots: Enable searchable snapshots.
        :param builtins.bool enable_security_audit: Enable/Disable security audit.
        :param builtins.bool enable_snapshot_api: Enable/Disable snapshot API for custom repositories, this requires security management to be enabled.
        :param builtins.int http_max_content_length: Maximum content length for HTTP requests to the OpenSearch HTTP API, in bytes.
        :param builtins.int http_max_header_size: The max size of allowed headers, in bytes. Example: `8192`.
        :param builtins.int http_max_initial_line_length: The max length of an HTTP URL, in bytes. Example: `4096`.
        :param builtins.int indices_fielddata_cache_size: Relative amount. Maximum amount of heap memory used for field data cache. This is an expert setting; decreasing the value too much will increase overhead of loading field data; too much memory used for field data cache will decrease amount of heap available for other operations.
        :param builtins.int indices_memory_index_buffer_size: Percentage value. Default is 10%. Total amount of heap used for indexing buffer, before writing segments to disk. This is an expert setting. Too low value will slow down indexing; too high value will increase indexing performance but causes performance issues for query performance.
        :param builtins.int indices_memory_max_index_buffer_size: Absolute value. Default is unbound. Doesn't work without indices.memory.index*buffer*size. Maximum amount of heap used for query cache, an absolute indices.memory.index*buffer*size maximum hard limit.
        :param builtins.int indices_memory_min_index_buffer_size: Absolute value. Default is 48mb. Doesn't work without indices.memory.index*buffer*size. Minimum amount of heap used for query cache, an absolute indices.memory.index*buffer*size minimal hard limit.
        :param builtins.int indices_queries_cache_size: Percentage value. Default is 10%. Maximum amount of heap used for query cache. This is an expert setting. Too low value will decrease query performance and increase performance for other operations; too high value will cause issues with other OpenSearch functionality.
        :param builtins.int indices_query_bool_max_clause_count: Maximum number of clauses Lucene BooleanQuery can have. The default value (1024) is relatively high, and increasing it may cause performance issues. Investigate other approaches first before increasing this value.
        :param builtins.int indices_recovery_max_bytes_per_sec: Limits total inbound and outbound recovery traffic for each node. Applies to both peer recoveries as well as snapshot recoveries (i.e., restores from a snapshot). Defaults to 40mb.
        :param builtins.int indices_recovery_max_concurrent_file_chunks: Number of file chunks sent in parallel for each recovery. Defaults to 2.
        :param builtins.bool ism_enabled: Specifies whether ISM is enabled or not.
        :param builtins.bool ism_history_enabled: Specifies whether audit history is enabled or not. The logs from ISM are automatically indexed to a logs document.
        :param builtins.int ism_history_max_age: The maximum age before rolling over the audit history index in hours. Example: `24`.
        :param builtins.int ism_history_max_docs: The maximum number of documents before rolling over the audit history index. Example: `2500000`.
        :param builtins.int ism_history_rollover_check_period: The time between rollover checks for the audit history index in hours. Example: `8`.
        :param builtins.int ism_history_rollover_retention_period: How long audit history indices are kept in days. Example: `30`.
        :param builtins.bool knn_memory_circuit_breaker_enabled: Enable or disable KNN memory circuit breaker. Defaults to true.
        :param builtins.int knn_memory_circuit_breaker_limit: Maximum amount of memory that can be used for KNN index. Defaults to 50% of the JVM heap size.
        :param builtins.bool override_main_response_version: Compatibility mode sets OpenSearch to report its version as 7.10 so clients continue to work. Default is false.
        :param builtins.bool plugins_alerting_filter_by_backend_roles: Enable or disable filtering of alerting by backend roles. Requires Security plugin. Defaults to false.
        :param Sequence[builtins.str] reindex_remote_whitelists: Whitelisted addresses for reindexing. Changing this value will cause all OpenSearch instances to restart.
        :param builtins.str script_max_compilations_rate: Script compilation circuit breaker limits the number of inline script compilations within a period of time. Default is use-context. Example: `75/5m`.
        :param 'OpenSearchOpensearchUserConfigOpensearchSearchBackpressureArgs' search_backpressure: Search Backpressure Settings
        :param builtins.int search_max_buckets: Maximum number of aggregation buckets allowed in a single response. OpenSearch default value is used when this is not defined. Example: `10000`.
        :param 'OpenSearchOpensearchUserConfigOpensearchSegrepArgs' segrep: Segment Replication Backpressure Settings
        :param 'OpenSearchOpensearchUserConfigOpensearchShardIndexingPressureArgs' shard_indexing_pressure: Shard indexing back pressure settings
        :param builtins.int thread_pool_analyze_queue_size: Size for the thread pool queue. See documentation for exact details.
        :param builtins.int thread_pool_analyze_size: Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        :param builtins.int thread_pool_force_merge_size: Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        :param builtins.int thread_pool_get_queue_size: Size for the thread pool queue. See documentation for exact details.
        :param builtins.int thread_pool_get_size: Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        :param builtins.int thread_pool_search_queue_size: Size for the thread pool queue. See documentation for exact details.
        :param builtins.int thread_pool_search_size: Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        :param builtins.int thread_pool_search_throttled_queue_size: Size for the thread pool queue. See documentation for exact details.
        :param builtins.int thread_pool_search_throttled_size: Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        :param builtins.int thread_pool_write_queue_size: Size for the thread pool queue. See documentation for exact details.
        :param builtins.int thread_pool_write_size: Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        """
        if action_auto_create_index_enabled is not None:
            pulumi.set(__self__, "action_auto_create_index_enabled", action_auto_create_index_enabled)
        if action_destructive_requires_name is not None:
            pulumi.set(__self__, "action_destructive_requires_name", action_destructive_requires_name)
        if auth_failure_listeners is not None:
            pulumi.set(__self__, "auth_failure_listeners", auth_failure_listeners)
        if cluster_max_shards_per_node is not None:
            pulumi.set(__self__, "cluster_max_shards_per_node", cluster_max_shards_per_node)
        if cluster_routing_allocation_balance_prefer_primary is not None:
            pulumi.set(__self__, "cluster_routing_allocation_balance_prefer_primary", cluster_routing_allocation_balance_prefer_primary)
        if cluster_routing_allocation_node_concurrent_recoveries is not None:
            pulumi.set(__self__, "cluster_routing_allocation_node_concurrent_recoveries", cluster_routing_allocation_node_concurrent_recoveries)
        if cluster_search_request_slowlog is not None:
            pulumi.set(__self__, "cluster_search_request_slowlog", cluster_search_request_slowlog)
        if disk_watermarks is not None:
            pulumi.set(__self__, "disk_watermarks", disk_watermarks)
        if email_sender_name is not None:
            pulumi.set(__self__, "email_sender_name", email_sender_name)
        if email_sender_password is not None:
            pulumi.set(__self__, "email_sender_password", email_sender_password)
        if email_sender_username is not None:
            pulumi.set(__self__, "email_sender_username", email_sender_username)
        if enable_remote_backed_storage is not None:
            pulumi.set(__self__, "enable_remote_backed_storage", enable_remote_backed_storage)
        if enable_searchable_snapshots is not None:
            pulumi.set(__self__, "enable_searchable_snapshots", enable_searchable_snapshots)
        if enable_security_audit is not None:
            pulumi.set(__self__, "enable_security_audit", enable_security_audit)
        if enable_snapshot_api is not None:
            pulumi.set(__self__, "enable_snapshot_api", enable_snapshot_api)
        if http_max_content_length is not None:
            pulumi.set(__self__, "http_max_content_length", http_max_content_length)
        if http_max_header_size is not None:
            pulumi.set(__self__, "http_max_header_size", http_max_header_size)
        if http_max_initial_line_length is not None:
            pulumi.set(__self__, "http_max_initial_line_length", http_max_initial_line_length)
        if indices_fielddata_cache_size is not None:
            pulumi.set(__self__, "indices_fielddata_cache_size", indices_fielddata_cache_size)
        if indices_memory_index_buffer_size is not None:
            pulumi.set(__self__, "indices_memory_index_buffer_size", indices_memory_index_buffer_size)
        if indices_memory_max_index_buffer_size is not None:
            pulumi.set(__self__, "indices_memory_max_index_buffer_size", indices_memory_max_index_buffer_size)
        if indices_memory_min_index_buffer_size is not None:
            pulumi.set(__self__, "indices_memory_min_index_buffer_size", indices_memory_min_index_buffer_size)
        if indices_queries_cache_size is not None:
            pulumi.set(__self__, "indices_queries_cache_size", indices_queries_cache_size)
        if indices_query_bool_max_clause_count is not None:
            pulumi.set(__self__, "indices_query_bool_max_clause_count", indices_query_bool_max_clause_count)
        if indices_recovery_max_bytes_per_sec is not None:
            pulumi.set(__self__, "indices_recovery_max_bytes_per_sec", indices_recovery_max_bytes_per_sec)
        if indices_recovery_max_concurrent_file_chunks is not None:
            pulumi.set(__self__, "indices_recovery_max_concurrent_file_chunks", indices_recovery_max_concurrent_file_chunks)
        if ism_enabled is not None:
            pulumi.set(__self__, "ism_enabled", ism_enabled)
        if ism_history_enabled is not None:
            pulumi.set(__self__, "ism_history_enabled", ism_history_enabled)
        if ism_history_max_age is not None:
            pulumi.set(__self__, "ism_history_max_age", ism_history_max_age)
        if ism_history_max_docs is not None:
            pulumi.set(__self__, "ism_history_max_docs", ism_history_max_docs)
        if ism_history_rollover_check_period is not None:
            pulumi.set(__self__, "ism_history_rollover_check_period", ism_history_rollover_check_period)
        if ism_history_rollover_retention_period is not None:
            pulumi.set(__self__, "ism_history_rollover_retention_period", ism_history_rollover_retention_period)
        if knn_memory_circuit_breaker_enabled is not None:
            pulumi.set(__self__, "knn_memory_circuit_breaker_enabled", knn_memory_circuit_breaker_enabled)
        if knn_memory_circuit_breaker_limit is not None:
            pulumi.set(__self__, "knn_memory_circuit_breaker_limit", knn_memory_circuit_breaker_limit)
        if override_main_response_version is not None:
            pulumi.set(__self__, "override_main_response_version", override_main_response_version)
        if plugins_alerting_filter_by_backend_roles is not None:
            pulumi.set(__self__, "plugins_alerting_filter_by_backend_roles", plugins_alerting_filter_by_backend_roles)
        if reindex_remote_whitelists is not None:
            pulumi.set(__self__, "reindex_remote_whitelists", reindex_remote_whitelists)
        if script_max_compilations_rate is not None:
            pulumi.set(__self__, "script_max_compilations_rate", script_max_compilations_rate)
        if search_backpressure is not None:
            pulumi.set(__self__, "search_backpressure", search_backpressure)
        if search_insights_top_queries is not None:
            pulumi.set(__self__, "search_insights_top_queries", search_insights_top_queries)
        if search_max_buckets is not None:
            pulumi.set(__self__, "search_max_buckets", search_max_buckets)
        if segrep is not None:
            pulumi.set(__self__, "segrep", segrep)
        if shard_indexing_pressure is not None:
            pulumi.set(__self__, "shard_indexing_pressure", shard_indexing_pressure)
        if thread_pool_analyze_queue_size is not None:
            pulumi.set(__self__, "thread_pool_analyze_queue_size", thread_pool_analyze_queue_size)
        if thread_pool_analyze_size is not None:
            pulumi.set(__self__, "thread_pool_analyze_size", thread_pool_analyze_size)
        if thread_pool_force_merge_size is not None:
            pulumi.set(__self__, "thread_pool_force_merge_size", thread_pool_force_merge_size)
        if thread_pool_get_queue_size is not None:
            pulumi.set(__self__, "thread_pool_get_queue_size", thread_pool_get_queue_size)
        if thread_pool_get_size is not None:
            pulumi.set(__self__, "thread_pool_get_size", thread_pool_get_size)
        if thread_pool_search_queue_size is not None:
            pulumi.set(__self__, "thread_pool_search_queue_size", thread_pool_search_queue_size)
        if thread_pool_search_size is not None:
            pulumi.set(__self__, "thread_pool_search_size", thread_pool_search_size)
        if thread_pool_search_throttled_queue_size is not None:
            pulumi.set(__self__, "thread_pool_search_throttled_queue_size", thread_pool_search_throttled_queue_size)
        if thread_pool_search_throttled_size is not None:
            pulumi.set(__self__, "thread_pool_search_throttled_size", thread_pool_search_throttled_size)
        if thread_pool_write_queue_size is not None:
            pulumi.set(__self__, "thread_pool_write_queue_size", thread_pool_write_queue_size)
        if thread_pool_write_size is not None:
            pulumi.set(__self__, "thread_pool_write_size", thread_pool_write_size)

    @property
    @pulumi.getter(name="actionAutoCreateIndexEnabled")
    def action_auto_create_index_enabled(self) -> Optional[builtins.bool]:
        """
        Explicitly allow or block automatic creation of indices. Defaults to true.
        """
        return pulumi.get(self, "action_auto_create_index_enabled")

    @property
    @pulumi.getter(name="actionDestructiveRequiresName")
    def action_destructive_requires_name(self) -> Optional[builtins.bool]:
        """
        Require explicit index names when deleting.
        """
        return pulumi.get(self, "action_destructive_requires_name")

    @property
    @pulumi.getter(name="authFailureListeners")
    def auth_failure_listeners(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchAuthFailureListeners']:
        """
        Opensearch Security Plugin Settings
        """
        return pulumi.get(self, "auth_failure_listeners")

    @property
    @pulumi.getter(name="clusterMaxShardsPerNode")
    def cluster_max_shards_per_node(self) -> Optional[builtins.int]:
        """
        Controls the number of shards allowed in the cluster per data node. Example: `1000`.
        """
        return pulumi.get(self, "cluster_max_shards_per_node")

    @property
    @pulumi.getter(name="clusterRoutingAllocationBalancePreferPrimary")
    def cluster_routing_allocation_balance_prefer_primary(self) -> Optional[builtins.bool]:
        """
        When set to true, OpenSearch attempts to evenly distribute the primary shards between the cluster nodes. Enabling this setting does not always guarantee an equal number of primary shards on each node, especially in the event of a failover. Changing this setting to false after it was set to true does not invoke redistribution of primary shards. Default is false. Default: `false`.
        """
        return pulumi.get(self, "cluster_routing_allocation_balance_prefer_primary")

    @property
    @pulumi.getter(name="clusterRoutingAllocationNodeConcurrentRecoveries")
    def cluster_routing_allocation_node_concurrent_recoveries(self) -> Optional[builtins.int]:
        """
        How many concurrent incoming/outgoing shard recoveries (normally replicas) are allowed to happen on a node. Defaults to node cpu count * 2.
        """
        return pulumi.get(self, "cluster_routing_allocation_node_concurrent_recoveries")

    @property
    @pulumi.getter(name="clusterSearchRequestSlowlog")
    def cluster_search_request_slowlog(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchClusterSearchRequestSlowlog']:
        return pulumi.get(self, "cluster_search_request_slowlog")

    @property
    @pulumi.getter(name="diskWatermarks")
    def disk_watermarks(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchDiskWatermarks']:
        """
        Watermark settings
        """
        return pulumi.get(self, "disk_watermarks")

    @property
    @pulumi.getter(name="emailSenderName")
    def email_sender_name(self) -> Optional[builtins.str]:
        """
        Sender name placeholder to be used in Opensearch Dashboards and Opensearch keystore. Example: `alert-sender`.
        """
        return pulumi.get(self, "email_sender_name")

    @property
    @pulumi.getter(name="emailSenderPassword")
    def email_sender_password(self) -> Optional[builtins.str]:
        """
        Sender password for Opensearch alerts to authenticate with SMTP server. Example: `very-secure-mail-password`.
        """
        return pulumi.get(self, "email_sender_password")

    @property
    @pulumi.getter(name="emailSenderUsername")
    def email_sender_username(self) -> Optional[builtins.str]:
        """
        Sender username for Opensearch alerts. Example: `jane@example.com`.
        """
        return pulumi.get(self, "email_sender_username")

    @property
    @pulumi.getter(name="enableRemoteBackedStorage")
    def enable_remote_backed_storage(self) -> Optional[builtins.bool]:
        """
        Enable remote-backed storage.
        """
        return pulumi.get(self, "enable_remote_backed_storage")

    @property
    @pulumi.getter(name="enableSearchableSnapshots")
    def enable_searchable_snapshots(self) -> Optional[builtins.bool]:
        """
        Enable searchable snapshots.
        """
        return pulumi.get(self, "enable_searchable_snapshots")

    @property
    @pulumi.getter(name="enableSecurityAudit")
    def enable_security_audit(self) -> Optional[builtins.bool]:
        """
        Enable/Disable security audit.
        """
        return pulumi.get(self, "enable_security_audit")

    @property
    @pulumi.getter(name="enableSnapshotApi")
    def enable_snapshot_api(self) -> Optional[builtins.bool]:
        """
        Enable/Disable snapshot API for custom repositories, this requires security management to be enabled.
        """
        return pulumi.get(self, "enable_snapshot_api")

    @property
    @pulumi.getter(name="httpMaxContentLength")
    def http_max_content_length(self) -> Optional[builtins.int]:
        """
        Maximum content length for HTTP requests to the OpenSearch HTTP API, in bytes.
        """
        return pulumi.get(self, "http_max_content_length")

    @property
    @pulumi.getter(name="httpMaxHeaderSize")
    def http_max_header_size(self) -> Optional[builtins.int]:
        """
        The max size of allowed headers, in bytes. Example: `8192`.
        """
        return pulumi.get(self, "http_max_header_size")

    @property
    @pulumi.getter(name="httpMaxInitialLineLength")
    def http_max_initial_line_length(self) -> Optional[builtins.int]:
        """
        The max length of an HTTP URL, in bytes. Example: `4096`.
        """
        return pulumi.get(self, "http_max_initial_line_length")

    @property
    @pulumi.getter(name="indicesFielddataCacheSize")
    def indices_fielddata_cache_size(self) -> Optional[builtins.int]:
        """
        Relative amount. Maximum amount of heap memory used for field data cache. This is an expert setting; decreasing the value too much will increase overhead of loading field data; too much memory used for field data cache will decrease amount of heap available for other operations.
        """
        return pulumi.get(self, "indices_fielddata_cache_size")

    @property
    @pulumi.getter(name="indicesMemoryIndexBufferSize")
    def indices_memory_index_buffer_size(self) -> Optional[builtins.int]:
        """
        Percentage value. Default is 10%. Total amount of heap used for indexing buffer, before writing segments to disk. This is an expert setting. Too low value will slow down indexing; too high value will increase indexing performance but causes performance issues for query performance.
        """
        return pulumi.get(self, "indices_memory_index_buffer_size")

    @property
    @pulumi.getter(name="indicesMemoryMaxIndexBufferSize")
    def indices_memory_max_index_buffer_size(self) -> Optional[builtins.int]:
        """
        Absolute value. Default is unbound. Doesn't work without indices.memory.index*buffer*size. Maximum amount of heap used for query cache, an absolute indices.memory.index*buffer*size maximum hard limit.
        """
        return pulumi.get(self, "indices_memory_max_index_buffer_size")

    @property
    @pulumi.getter(name="indicesMemoryMinIndexBufferSize")
    def indices_memory_min_index_buffer_size(self) -> Optional[builtins.int]:
        """
        Absolute value. Default is 48mb. Doesn't work without indices.memory.index*buffer*size. Minimum amount of heap used for query cache, an absolute indices.memory.index*buffer*size minimal hard limit.
        """
        return pulumi.get(self, "indices_memory_min_index_buffer_size")

    @property
    @pulumi.getter(name="indicesQueriesCacheSize")
    def indices_queries_cache_size(self) -> Optional[builtins.int]:
        """
        Percentage value. Default is 10%. Maximum amount of heap used for query cache. This is an expert setting. Too low value will decrease query performance and increase performance for other operations; too high value will cause issues with other OpenSearch functionality.
        """
        return pulumi.get(self, "indices_queries_cache_size")

    @property
    @pulumi.getter(name="indicesQueryBoolMaxClauseCount")
    def indices_query_bool_max_clause_count(self) -> Optional[builtins.int]:
        """
        Maximum number of clauses Lucene BooleanQuery can have. The default value (1024) is relatively high, and increasing it may cause performance issues. Investigate other approaches first before increasing this value.
        """
        return pulumi.get(self, "indices_query_bool_max_clause_count")

    @property
    @pulumi.getter(name="indicesRecoveryMaxBytesPerSec")
    def indices_recovery_max_bytes_per_sec(self) -> Optional[builtins.int]:
        """
        Limits total inbound and outbound recovery traffic for each node. Applies to both peer recoveries as well as snapshot recoveries (i.e., restores from a snapshot). Defaults to 40mb.
        """
        return pulumi.get(self, "indices_recovery_max_bytes_per_sec")

    @property
    @pulumi.getter(name="indicesRecoveryMaxConcurrentFileChunks")
    def indices_recovery_max_concurrent_file_chunks(self) -> Optional[builtins.int]:
        """
        Number of file chunks sent in parallel for each recovery. Defaults to 2.
        """
        return pulumi.get(self, "indices_recovery_max_concurrent_file_chunks")

    @property
    @pulumi.getter(name="ismEnabled")
    def ism_enabled(self) -> Optional[builtins.bool]:
        """
        Specifies whether ISM is enabled or not.
        """
        return pulumi.get(self, "ism_enabled")

    @property
    @pulumi.getter(name="ismHistoryEnabled")
    def ism_history_enabled(self) -> Optional[builtins.bool]:
        """
        Specifies whether audit history is enabled or not. The logs from ISM are automatically indexed to a logs document.
        """
        return pulumi.get(self, "ism_history_enabled")

    @property
    @pulumi.getter(name="ismHistoryMaxAge")
    def ism_history_max_age(self) -> Optional[builtins.int]:
        """
        The maximum age before rolling over the audit history index in hours. Example: `24`.
        """
        return pulumi.get(self, "ism_history_max_age")

    @property
    @pulumi.getter(name="ismHistoryMaxDocs")
    def ism_history_max_docs(self) -> Optional[builtins.int]:
        """
        The maximum number of documents before rolling over the audit history index. Example: `2500000`.
        """
        return pulumi.get(self, "ism_history_max_docs")

    @property
    @pulumi.getter(name="ismHistoryRolloverCheckPeriod")
    def ism_history_rollover_check_period(self) -> Optional[builtins.int]:
        """
        The time between rollover checks for the audit history index in hours. Example: `8`.
        """
        return pulumi.get(self, "ism_history_rollover_check_period")

    @property
    @pulumi.getter(name="ismHistoryRolloverRetentionPeriod")
    def ism_history_rollover_retention_period(self) -> Optional[builtins.int]:
        """
        How long audit history indices are kept in days. Example: `30`.
        """
        return pulumi.get(self, "ism_history_rollover_retention_period")

    @property
    @pulumi.getter(name="knnMemoryCircuitBreakerEnabled")
    def knn_memory_circuit_breaker_enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable KNN memory circuit breaker. Defaults to true.
        """
        return pulumi.get(self, "knn_memory_circuit_breaker_enabled")

    @property
    @pulumi.getter(name="knnMemoryCircuitBreakerLimit")
    def knn_memory_circuit_breaker_limit(self) -> Optional[builtins.int]:
        """
        Maximum amount of memory that can be used for KNN index. Defaults to 50% of the JVM heap size.
        """
        return pulumi.get(self, "knn_memory_circuit_breaker_limit")

    @property
    @pulumi.getter(name="overrideMainResponseVersion")
    def override_main_response_version(self) -> Optional[builtins.bool]:
        """
        Compatibility mode sets OpenSearch to report its version as 7.10 so clients continue to work. Default is false.
        """
        return pulumi.get(self, "override_main_response_version")

    @property
    @pulumi.getter(name="pluginsAlertingFilterByBackendRoles")
    def plugins_alerting_filter_by_backend_roles(self) -> Optional[builtins.bool]:
        """
        Enable or disable filtering of alerting by backend roles. Requires Security plugin. Defaults to false.
        """
        return pulumi.get(self, "plugins_alerting_filter_by_backend_roles")

    @property
    @pulumi.getter(name="reindexRemoteWhitelists")
    def reindex_remote_whitelists(self) -> Optional[Sequence[builtins.str]]:
        """
        Whitelisted addresses for reindexing. Changing this value will cause all OpenSearch instances to restart.
        """
        return pulumi.get(self, "reindex_remote_whitelists")

    @property
    @pulumi.getter(name="scriptMaxCompilationsRate")
    def script_max_compilations_rate(self) -> Optional[builtins.str]:
        """
        Script compilation circuit breaker limits the number of inline script compilations within a period of time. Default is use-context. Example: `75/5m`.
        """
        return pulumi.get(self, "script_max_compilations_rate")

    @property
    @pulumi.getter(name="searchBackpressure")
    def search_backpressure(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSearchBackpressure']:
        """
        Search Backpressure Settings
        """
        return pulumi.get(self, "search_backpressure")

    @property
    @pulumi.getter(name="searchInsightsTopQueries")
    def search_insights_top_queries(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueries']:
        return pulumi.get(self, "search_insights_top_queries")

    @property
    @pulumi.getter(name="searchMaxBuckets")
    def search_max_buckets(self) -> Optional[builtins.int]:
        """
        Maximum number of aggregation buckets allowed in a single response. OpenSearch default value is used when this is not defined. Example: `10000`.
        """
        return pulumi.get(self, "search_max_buckets")

    @property
    @pulumi.getter
    def segrep(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSegrep']:
        """
        Segment Replication Backpressure Settings
        """
        return pulumi.get(self, "segrep")

    @property
    @pulumi.getter(name="shardIndexingPressure")
    def shard_indexing_pressure(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchShardIndexingPressure']:
        """
        Shard indexing back pressure settings
        """
        return pulumi.get(self, "shard_indexing_pressure")

    @property
    @pulumi.getter(name="threadPoolAnalyzeQueueSize")
    def thread_pool_analyze_queue_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool queue. See documentation for exact details.
        """
        return pulumi.get(self, "thread_pool_analyze_queue_size")

    @property
    @pulumi.getter(name="threadPoolAnalyzeSize")
    def thread_pool_analyze_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        """
        return pulumi.get(self, "thread_pool_analyze_size")

    @property
    @pulumi.getter(name="threadPoolForceMergeSize")
    def thread_pool_force_merge_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        """
        return pulumi.get(self, "thread_pool_force_merge_size")

    @property
    @pulumi.getter(name="threadPoolGetQueueSize")
    def thread_pool_get_queue_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool queue. See documentation for exact details.
        """
        return pulumi.get(self, "thread_pool_get_queue_size")

    @property
    @pulumi.getter(name="threadPoolGetSize")
    def thread_pool_get_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        """
        return pulumi.get(self, "thread_pool_get_size")

    @property
    @pulumi.getter(name="threadPoolSearchQueueSize")
    def thread_pool_search_queue_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool queue. See documentation for exact details.
        """
        return pulumi.get(self, "thread_pool_search_queue_size")

    @property
    @pulumi.getter(name="threadPoolSearchSize")
    def thread_pool_search_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        """
        return pulumi.get(self, "thread_pool_search_size")

    @property
    @pulumi.getter(name="threadPoolSearchThrottledQueueSize")
    def thread_pool_search_throttled_queue_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool queue. See documentation for exact details.
        """
        return pulumi.get(self, "thread_pool_search_throttled_queue_size")

    @property
    @pulumi.getter(name="threadPoolSearchThrottledSize")
    def thread_pool_search_throttled_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        """
        return pulumi.get(self, "thread_pool_search_throttled_size")

    @property
    @pulumi.getter(name="threadPoolWriteQueueSize")
    def thread_pool_write_queue_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool queue. See documentation for exact details.
        """
        return pulumi.get(self, "thread_pool_write_queue_size")

    @property
    @pulumi.getter(name="threadPoolWriteSize")
    def thread_pool_write_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        """
        return pulumi.get(self, "thread_pool_write_size")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchAuthFailureListeners(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "internalAuthenticationBackendLimiting":
            suggest = "internal_authentication_backend_limiting"
        elif key == "ipRateLimiting":
            suggest = "ip_rate_limiting"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpensearchAuthFailureListeners. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpensearchAuthFailureListeners.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpensearchAuthFailureListeners.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 internal_authentication_backend_limiting: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchAuthFailureListenersInternalAuthenticationBackendLimiting'] = None,
                 ip_rate_limiting: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchAuthFailureListenersIpRateLimiting'] = None):
        """
        :param 'OpenSearchOpensearchUserConfigOpensearchAuthFailureListenersIpRateLimitingArgs' ip_rate_limiting: IP address rate limiting settings
        """
        if internal_authentication_backend_limiting is not None:
            pulumi.set(__self__, "internal_authentication_backend_limiting", internal_authentication_backend_limiting)
        if ip_rate_limiting is not None:
            pulumi.set(__self__, "ip_rate_limiting", ip_rate_limiting)

    @property
    @pulumi.getter(name="internalAuthenticationBackendLimiting")
    def internal_authentication_backend_limiting(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchAuthFailureListenersInternalAuthenticationBackendLimiting']:
        return pulumi.get(self, "internal_authentication_backend_limiting")

    @property
    @pulumi.getter(name="ipRateLimiting")
    @_utilities.deprecated("""This property is deprecated.""")
    def ip_rate_limiting(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchAuthFailureListenersIpRateLimiting']:
        """
        IP address rate limiting settings
        """
        return pulumi.get(self, "ip_rate_limiting")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchAuthFailureListenersInternalAuthenticationBackendLimiting(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "allowedTries":
            suggest = "allowed_tries"
        elif key == "authenticationBackend":
            suggest = "authentication_backend"
        elif key == "blockExpirySeconds":
            suggest = "block_expiry_seconds"
        elif key == "maxBlockedClients":
            suggest = "max_blocked_clients"
        elif key == "maxTrackedClients":
            suggest = "max_tracked_clients"
        elif key == "timeWindowSeconds":
            suggest = "time_window_seconds"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpensearchAuthFailureListenersInternalAuthenticationBackendLimiting. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpensearchAuthFailureListenersInternalAuthenticationBackendLimiting.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpensearchAuthFailureListenersInternalAuthenticationBackendLimiting.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 allowed_tries: Optional[builtins.int] = None,
                 authentication_backend: Optional[builtins.str] = None,
                 block_expiry_seconds: Optional[builtins.int] = None,
                 max_blocked_clients: Optional[builtins.int] = None,
                 max_tracked_clients: Optional[builtins.int] = None,
                 time_window_seconds: Optional[builtins.int] = None,
                 type: Optional[builtins.str] = None):
        """
        :param builtins.int allowed_tries: The number of login attempts allowed before login is blocked. Example: `10`.
        :param builtins.str authentication_backend: Enum: `internal`. internal*authentication*backend*limiting.authentication*backend.
        :param builtins.int block_expiry_seconds: The duration of time that login remains blocked after a failed login. Example: `600`.
        :param builtins.int max_blocked_clients: internal*authentication*backend*limiting.max*blocked_clients. Example: `100000`.
        :param builtins.int max_tracked_clients: The maximum number of tracked IP addresses that have failed login. Example: `100000`.
        :param builtins.int time_window_seconds: The window of time in which the value for `allowed_tries` is enforced. Example: `3600`.
        :param builtins.str type: Enum: `username`. internal*authentication*backend_limiting.type.
        """
        if allowed_tries is not None:
            pulumi.set(__self__, "allowed_tries", allowed_tries)
        if authentication_backend is not None:
            pulumi.set(__self__, "authentication_backend", authentication_backend)
        if block_expiry_seconds is not None:
            pulumi.set(__self__, "block_expiry_seconds", block_expiry_seconds)
        if max_blocked_clients is not None:
            pulumi.set(__self__, "max_blocked_clients", max_blocked_clients)
        if max_tracked_clients is not None:
            pulumi.set(__self__, "max_tracked_clients", max_tracked_clients)
        if time_window_seconds is not None:
            pulumi.set(__self__, "time_window_seconds", time_window_seconds)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="allowedTries")
    def allowed_tries(self) -> Optional[builtins.int]:
        """
        The number of login attempts allowed before login is blocked. Example: `10`.
        """
        return pulumi.get(self, "allowed_tries")

    @property
    @pulumi.getter(name="authenticationBackend")
    def authentication_backend(self) -> Optional[builtins.str]:
        """
        Enum: `internal`. internal*authentication*backend*limiting.authentication*backend.
        """
        return pulumi.get(self, "authentication_backend")

    @property
    @pulumi.getter(name="blockExpirySeconds")
    def block_expiry_seconds(self) -> Optional[builtins.int]:
        """
        The duration of time that login remains blocked after a failed login. Example: `600`.
        """
        return pulumi.get(self, "block_expiry_seconds")

    @property
    @pulumi.getter(name="maxBlockedClients")
    def max_blocked_clients(self) -> Optional[builtins.int]:
        """
        internal*authentication*backend*limiting.max*blocked_clients. Example: `100000`.
        """
        return pulumi.get(self, "max_blocked_clients")

    @property
    @pulumi.getter(name="maxTrackedClients")
    def max_tracked_clients(self) -> Optional[builtins.int]:
        """
        The maximum number of tracked IP addresses that have failed login. Example: `100000`.
        """
        return pulumi.get(self, "max_tracked_clients")

    @property
    @pulumi.getter(name="timeWindowSeconds")
    def time_window_seconds(self) -> Optional[builtins.int]:
        """
        The window of time in which the value for `allowed_tries` is enforced. Example: `3600`.
        """
        return pulumi.get(self, "time_window_seconds")

    @property
    @pulumi.getter
    def type(self) -> Optional[builtins.str]:
        """
        Enum: `username`. internal*authentication*backend_limiting.type.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchAuthFailureListenersIpRateLimiting(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "allowedTries":
            suggest = "allowed_tries"
        elif key == "blockExpirySeconds":
            suggest = "block_expiry_seconds"
        elif key == "maxBlockedClients":
            suggest = "max_blocked_clients"
        elif key == "maxTrackedClients":
            suggest = "max_tracked_clients"
        elif key == "timeWindowSeconds":
            suggest = "time_window_seconds"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpensearchAuthFailureListenersIpRateLimiting. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpensearchAuthFailureListenersIpRateLimiting.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpensearchAuthFailureListenersIpRateLimiting.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 allowed_tries: Optional[builtins.int] = None,
                 block_expiry_seconds: Optional[builtins.int] = None,
                 max_blocked_clients: Optional[builtins.int] = None,
                 max_tracked_clients: Optional[builtins.int] = None,
                 time_window_seconds: Optional[builtins.int] = None,
                 type: Optional[builtins.str] = None):
        """
        :param builtins.int allowed_tries: The number of login attempts allowed before login is blocked. Example: `10`.
        :param builtins.int block_expiry_seconds: The duration of time that login remains blocked after a failed login. Example: `600`.
        :param builtins.int max_blocked_clients: The maximum number of blocked IP addresses. Example: `100000`.
        :param builtins.int max_tracked_clients: The maximum number of tracked IP addresses that have failed login. Example: `100000`.
        :param builtins.int time_window_seconds: The window of time in which the value for `allowed_tries` is enforced. Example: `3600`.
        :param builtins.str type: Enum: `ip`. The type of rate limiting.
        """
        if allowed_tries is not None:
            pulumi.set(__self__, "allowed_tries", allowed_tries)
        if block_expiry_seconds is not None:
            pulumi.set(__self__, "block_expiry_seconds", block_expiry_seconds)
        if max_blocked_clients is not None:
            pulumi.set(__self__, "max_blocked_clients", max_blocked_clients)
        if max_tracked_clients is not None:
            pulumi.set(__self__, "max_tracked_clients", max_tracked_clients)
        if time_window_seconds is not None:
            pulumi.set(__self__, "time_window_seconds", time_window_seconds)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="allowedTries")
    def allowed_tries(self) -> Optional[builtins.int]:
        """
        The number of login attempts allowed before login is blocked. Example: `10`.
        """
        return pulumi.get(self, "allowed_tries")

    @property
    @pulumi.getter(name="blockExpirySeconds")
    def block_expiry_seconds(self) -> Optional[builtins.int]:
        """
        The duration of time that login remains blocked after a failed login. Example: `600`.
        """
        return pulumi.get(self, "block_expiry_seconds")

    @property
    @pulumi.getter(name="maxBlockedClients")
    def max_blocked_clients(self) -> Optional[builtins.int]:
        """
        The maximum number of blocked IP addresses. Example: `100000`.
        """
        return pulumi.get(self, "max_blocked_clients")

    @property
    @pulumi.getter(name="maxTrackedClients")
    def max_tracked_clients(self) -> Optional[builtins.int]:
        """
        The maximum number of tracked IP addresses that have failed login. Example: `100000`.
        """
        return pulumi.get(self, "max_tracked_clients")

    @property
    @pulumi.getter(name="timeWindowSeconds")
    def time_window_seconds(self) -> Optional[builtins.int]:
        """
        The window of time in which the value for `allowed_tries` is enforced. Example: `3600`.
        """
        return pulumi.get(self, "time_window_seconds")

    @property
    @pulumi.getter
    def type(self) -> Optional[builtins.str]:
        """
        Enum: `ip`. The type of rate limiting.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchClusterSearchRequestSlowlog(dict):
    def __init__(__self__, *,
                 level: Optional[builtins.str] = None,
                 threshold: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchClusterSearchRequestSlowlogThreshold'] = None):
        """
        :param builtins.str level: Enum: `debug`, `info`, `trace`, `warn`. Log level. Default: `trace`.
        """
        if level is not None:
            pulumi.set(__self__, "level", level)
        if threshold is not None:
            pulumi.set(__self__, "threshold", threshold)

    @property
    @pulumi.getter
    def level(self) -> Optional[builtins.str]:
        """
        Enum: `debug`, `info`, `trace`, `warn`. Log level. Default: `trace`.
        """
        return pulumi.get(self, "level")

    @property
    @pulumi.getter
    def threshold(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchClusterSearchRequestSlowlogThreshold']:
        return pulumi.get(self, "threshold")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchClusterSearchRequestSlowlogThreshold(dict):
    def __init__(__self__, *,
                 debug: Optional[builtins.str] = None,
                 info: Optional[builtins.str] = None,
                 trace: Optional[builtins.str] = None,
                 warn: Optional[builtins.str] = None):
        """
        :param builtins.str debug: Debug threshold for total request took time. The value should be in the form count and unit, where unit one of (s,m,h,d,nanos,ms,micros) or -1. Default is -1.
        :param builtins.str info: Info threshold for total request took time. The value should be in the form count and unit, where unit one of (s,m,h,d,nanos,ms,micros) or -1. Default is -1.
        :param builtins.str trace: Trace threshold for total request took time. The value should be in the form count and unit, where unit one of (s,m,h,d,nanos,ms,micros) or -1. Default is -1.
        :param builtins.str warn: Warning threshold for total request took time. The value should be in the form count and unit, where unit one of (s,m,h,d,nanos,ms,micros) or -1. Default is -1.
        """
        if debug is not None:
            pulumi.set(__self__, "debug", debug)
        if info is not None:
            pulumi.set(__self__, "info", info)
        if trace is not None:
            pulumi.set(__self__, "trace", trace)
        if warn is not None:
            pulumi.set(__self__, "warn", warn)

    @property
    @pulumi.getter
    def debug(self) -> Optional[builtins.str]:
        """
        Debug threshold for total request took time. The value should be in the form count and unit, where unit one of (s,m,h,d,nanos,ms,micros) or -1. Default is -1.
        """
        return pulumi.get(self, "debug")

    @property
    @pulumi.getter
    def info(self) -> Optional[builtins.str]:
        """
        Info threshold for total request took time. The value should be in the form count and unit, where unit one of (s,m,h,d,nanos,ms,micros) or -1. Default is -1.
        """
        return pulumi.get(self, "info")

    @property
    @pulumi.getter
    def trace(self) -> Optional[builtins.str]:
        """
        Trace threshold for total request took time. The value should be in the form count and unit, where unit one of (s,m,h,d,nanos,ms,micros) or -1. Default is -1.
        """
        return pulumi.get(self, "trace")

    @property
    @pulumi.getter
    def warn(self) -> Optional[builtins.str]:
        """
        Warning threshold for total request took time. The value should be in the form count and unit, where unit one of (s,m,h,d,nanos,ms,micros) or -1. Default is -1.
        """
        return pulumi.get(self, "warn")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchDashboards(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "maxOldSpaceSize":
            suggest = "max_old_space_size"
        elif key == "multipleDataSourceEnabled":
            suggest = "multiple_data_source_enabled"
        elif key == "opensearchRequestTimeout":
            suggest = "opensearch_request_timeout"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpensearchDashboards. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpensearchDashboards.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpensearchDashboards.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None,
                 max_old_space_size: Optional[builtins.int] = None,
                 multiple_data_source_enabled: Optional[builtins.bool] = None,
                 opensearch_request_timeout: Optional[builtins.int] = None):
        """
        :param builtins.bool enabled: Enable or disable OpenSearch Dashboards. Default: `true`.
        :param builtins.int max_old_space_size: Limits the maximum amount of memory (in MiB) the OpenSearch Dashboards process can use. This sets the max*old*space_size option of the nodejs running the OpenSearch Dashboards. Note: the memory reserved by OpenSearch Dashboards is not available for OpenSearch. Default: `128`.
        :param builtins.bool multiple_data_source_enabled: Enable or disable multiple data sources in OpenSearch Dashboards. Default: `true`.
        :param builtins.int opensearch_request_timeout: Timeout in milliseconds for requests made by OpenSearch Dashboards towards OpenSearch. Default: `30000`.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if max_old_space_size is not None:
            pulumi.set(__self__, "max_old_space_size", max_old_space_size)
        if multiple_data_source_enabled is not None:
            pulumi.set(__self__, "multiple_data_source_enabled", multiple_data_source_enabled)
        if opensearch_request_timeout is not None:
            pulumi.set(__self__, "opensearch_request_timeout", opensearch_request_timeout)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable OpenSearch Dashboards. Default: `true`.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="maxOldSpaceSize")
    def max_old_space_size(self) -> Optional[builtins.int]:
        """
        Limits the maximum amount of memory (in MiB) the OpenSearch Dashboards process can use. This sets the max*old*space_size option of the nodejs running the OpenSearch Dashboards. Note: the memory reserved by OpenSearch Dashboards is not available for OpenSearch. Default: `128`.
        """
        return pulumi.get(self, "max_old_space_size")

    @property
    @pulumi.getter(name="multipleDataSourceEnabled")
    def multiple_data_source_enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable multiple data sources in OpenSearch Dashboards. Default: `true`.
        """
        return pulumi.get(self, "multiple_data_source_enabled")

    @property
    @pulumi.getter(name="opensearchRequestTimeout")
    def opensearch_request_timeout(self) -> Optional[builtins.int]:
        """
        Timeout in milliseconds for requests made by OpenSearch Dashboards towards OpenSearch. Default: `30000`.
        """
        return pulumi.get(self, "opensearch_request_timeout")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchDiskWatermarks(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "floodStage":
            suggest = "flood_stage"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpensearchDiskWatermarks. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpensearchDiskWatermarks.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpensearchDiskWatermarks.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 flood_stage: builtins.int,
                 high: builtins.int,
                 low: builtins.int):
        """
        :param builtins.int flood_stage: The flood stage watermark for disk usage. Example: `95`.
        :param builtins.int high: The high watermark for disk usage. Example: `90`.
        :param builtins.int low: The low watermark for disk usage. Example: `85`.
        """
        pulumi.set(__self__, "flood_stage", flood_stage)
        pulumi.set(__self__, "high", high)
        pulumi.set(__self__, "low", low)

    @property
    @pulumi.getter(name="floodStage")
    def flood_stage(self) -> builtins.int:
        """
        The flood stage watermark for disk usage. Example: `95`.
        """
        return pulumi.get(self, "flood_stage")

    @property
    @pulumi.getter
    def high(self) -> builtins.int:
        """
        The high watermark for disk usage. Example: `90`.
        """
        return pulumi.get(self, "high")

    @property
    @pulumi.getter
    def low(self) -> builtins.int:
        """
        The low watermark for disk usage. Example: `85`.
        """
        return pulumi.get(self, "low")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchSearchBackpressure(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "nodeDuress":
            suggest = "node_duress"
        elif key == "searchShardTask":
            suggest = "search_shard_task"
        elif key == "searchTask":
            suggest = "search_task"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpensearchSearchBackpressure. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpensearchSearchBackpressure.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpensearchSearchBackpressure.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 mode: Optional[builtins.str] = None,
                 node_duress: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSearchBackpressureNodeDuress'] = None,
                 search_shard_task: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchShardTask'] = None,
                 search_task: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchTask'] = None):
        """
        :param builtins.str mode: Enum: `disabled`, `enforced`, `monitor_only`. The search backpressure mode. Valid values are monitor*only, enforced, or disabled. Default is monitor*only.
        :param 'OpenSearchOpensearchUserConfigOpensearchSearchBackpressureNodeDuressArgs' node_duress: Node duress settings
        :param 'OpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchShardTaskArgs' search_shard_task: Search shard settings
        :param 'OpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchTaskArgs' search_task: Search task settings
        """
        if mode is not None:
            pulumi.set(__self__, "mode", mode)
        if node_duress is not None:
            pulumi.set(__self__, "node_duress", node_duress)
        if search_shard_task is not None:
            pulumi.set(__self__, "search_shard_task", search_shard_task)
        if search_task is not None:
            pulumi.set(__self__, "search_task", search_task)

    @property
    @pulumi.getter
    def mode(self) -> Optional[builtins.str]:
        """
        Enum: `disabled`, `enforced`, `monitor_only`. The search backpressure mode. Valid values are monitor*only, enforced, or disabled. Default is monitor*only.
        """
        return pulumi.get(self, "mode")

    @property
    @pulumi.getter(name="nodeDuress")
    def node_duress(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSearchBackpressureNodeDuress']:
        """
        Node duress settings
        """
        return pulumi.get(self, "node_duress")

    @property
    @pulumi.getter(name="searchShardTask")
    def search_shard_task(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchShardTask']:
        """
        Search shard settings
        """
        return pulumi.get(self, "search_shard_task")

    @property
    @pulumi.getter(name="searchTask")
    def search_task(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchTask']:
        """
        Search task settings
        """
        return pulumi.get(self, "search_task")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchSearchBackpressureNodeDuress(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "cpuThreshold":
            suggest = "cpu_threshold"
        elif key == "heapThreshold":
            suggest = "heap_threshold"
        elif key == "numSuccessiveBreaches":
            suggest = "num_successive_breaches"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpensearchSearchBackpressureNodeDuress. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpensearchSearchBackpressureNodeDuress.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpensearchSearchBackpressureNodeDuress.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 cpu_threshold: Optional[builtins.float] = None,
                 heap_threshold: Optional[builtins.float] = None,
                 num_successive_breaches: Optional[builtins.int] = None):
        """
        :param builtins.float cpu_threshold: The CPU usage threshold (as a percentage) required for a node to be considered to be under duress. Default is 0.9.
        :param builtins.float heap_threshold: The heap usage threshold (as a percentage) required for a node to be considered to be under duress. Default is 0.7.
        :param builtins.int num_successive_breaches: The number of successive limit breaches after which the node is considered to be under duress. Default is 3.
        """
        if cpu_threshold is not None:
            pulumi.set(__self__, "cpu_threshold", cpu_threshold)
        if heap_threshold is not None:
            pulumi.set(__self__, "heap_threshold", heap_threshold)
        if num_successive_breaches is not None:
            pulumi.set(__self__, "num_successive_breaches", num_successive_breaches)

    @property
    @pulumi.getter(name="cpuThreshold")
    def cpu_threshold(self) -> Optional[builtins.float]:
        """
        The CPU usage threshold (as a percentage) required for a node to be considered to be under duress. Default is 0.9.
        """
        return pulumi.get(self, "cpu_threshold")

    @property
    @pulumi.getter(name="heapThreshold")
    def heap_threshold(self) -> Optional[builtins.float]:
        """
        The heap usage threshold (as a percentage) required for a node to be considered to be under duress. Default is 0.7.
        """
        return pulumi.get(self, "heap_threshold")

    @property
    @pulumi.getter(name="numSuccessiveBreaches")
    def num_successive_breaches(self) -> Optional[builtins.int]:
        """
        The number of successive limit breaches after which the node is considered to be under duress. Default is 3.
        """
        return pulumi.get(self, "num_successive_breaches")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchShardTask(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "cancellationBurst":
            suggest = "cancellation_burst"
        elif key == "cancellationRate":
            suggest = "cancellation_rate"
        elif key == "cancellationRatio":
            suggest = "cancellation_ratio"
        elif key == "cpuTimeMillisThreshold":
            suggest = "cpu_time_millis_threshold"
        elif key == "elapsedTimeMillisThreshold":
            suggest = "elapsed_time_millis_threshold"
        elif key == "heapMovingAverageWindowSize":
            suggest = "heap_moving_average_window_size"
        elif key == "heapPercentThreshold":
            suggest = "heap_percent_threshold"
        elif key == "heapVariance":
            suggest = "heap_variance"
        elif key == "totalHeapPercentThreshold":
            suggest = "total_heap_percent_threshold"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchShardTask. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchShardTask.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchShardTask.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 cancellation_burst: Optional[builtins.float] = None,
                 cancellation_rate: Optional[builtins.float] = None,
                 cancellation_ratio: Optional[builtins.float] = None,
                 cpu_time_millis_threshold: Optional[builtins.int] = None,
                 elapsed_time_millis_threshold: Optional[builtins.int] = None,
                 heap_moving_average_window_size: Optional[builtins.int] = None,
                 heap_percent_threshold: Optional[builtins.float] = None,
                 heap_variance: Optional[builtins.float] = None,
                 total_heap_percent_threshold: Optional[builtins.float] = None):
        """
        :param builtins.float cancellation_burst: The maximum number of search tasks to cancel in a single iteration of the observer thread. Default is 10.0.
        :param builtins.float cancellation_rate: The maximum number of tasks to cancel per millisecond of elapsed time. Default is 0.003.
        :param builtins.float cancellation_ratio: The maximum number of tasks to cancel, as a percentage of successful task completions. Default is 0.1.
        :param builtins.int cpu_time_millis_threshold: The CPU usage threshold (in milliseconds) required for a single search shard task before it is considered for cancellation. Default is 15000.
        :param builtins.int elapsed_time_millis_threshold: The elapsed time threshold (in milliseconds) required for a single search shard task before it is considered for cancellation. Default is 30000.
        :param builtins.int heap_moving_average_window_size: The number of previously completed search shard tasks to consider when calculating the rolling average of heap usage. Default is 100.
        :param builtins.float heap_percent_threshold: The heap usage threshold (as a percentage) required for a single search shard task before it is considered for cancellation. Default is 0.5.
        :param builtins.float heap_variance: The minimum variance required for a single search shard task’s heap usage compared to the rolling average of previously completed tasks before it is considered for cancellation. Default is 2.0.
        :param builtins.float total_heap_percent_threshold: The heap usage threshold (as a percentage) required for the sum of heap usages of all search shard tasks before cancellation is applied. Default is 0.5.
        """
        if cancellation_burst is not None:
            pulumi.set(__self__, "cancellation_burst", cancellation_burst)
        if cancellation_rate is not None:
            pulumi.set(__self__, "cancellation_rate", cancellation_rate)
        if cancellation_ratio is not None:
            pulumi.set(__self__, "cancellation_ratio", cancellation_ratio)
        if cpu_time_millis_threshold is not None:
            pulumi.set(__self__, "cpu_time_millis_threshold", cpu_time_millis_threshold)
        if elapsed_time_millis_threshold is not None:
            pulumi.set(__self__, "elapsed_time_millis_threshold", elapsed_time_millis_threshold)
        if heap_moving_average_window_size is not None:
            pulumi.set(__self__, "heap_moving_average_window_size", heap_moving_average_window_size)
        if heap_percent_threshold is not None:
            pulumi.set(__self__, "heap_percent_threshold", heap_percent_threshold)
        if heap_variance is not None:
            pulumi.set(__self__, "heap_variance", heap_variance)
        if total_heap_percent_threshold is not None:
            pulumi.set(__self__, "total_heap_percent_threshold", total_heap_percent_threshold)

    @property
    @pulumi.getter(name="cancellationBurst")
    def cancellation_burst(self) -> Optional[builtins.float]:
        """
        The maximum number of search tasks to cancel in a single iteration of the observer thread. Default is 10.0.
        """
        return pulumi.get(self, "cancellation_burst")

    @property
    @pulumi.getter(name="cancellationRate")
    def cancellation_rate(self) -> Optional[builtins.float]:
        """
        The maximum number of tasks to cancel per millisecond of elapsed time. Default is 0.003.
        """
        return pulumi.get(self, "cancellation_rate")

    @property
    @pulumi.getter(name="cancellationRatio")
    def cancellation_ratio(self) -> Optional[builtins.float]:
        """
        The maximum number of tasks to cancel, as a percentage of successful task completions. Default is 0.1.
        """
        return pulumi.get(self, "cancellation_ratio")

    @property
    @pulumi.getter(name="cpuTimeMillisThreshold")
    def cpu_time_millis_threshold(self) -> Optional[builtins.int]:
        """
        The CPU usage threshold (in milliseconds) required for a single search shard task before it is considered for cancellation. Default is 15000.
        """
        return pulumi.get(self, "cpu_time_millis_threshold")

    @property
    @pulumi.getter(name="elapsedTimeMillisThreshold")
    def elapsed_time_millis_threshold(self) -> Optional[builtins.int]:
        """
        The elapsed time threshold (in milliseconds) required for a single search shard task before it is considered for cancellation. Default is 30000.
        """
        return pulumi.get(self, "elapsed_time_millis_threshold")

    @property
    @pulumi.getter(name="heapMovingAverageWindowSize")
    def heap_moving_average_window_size(self) -> Optional[builtins.int]:
        """
        The number of previously completed search shard tasks to consider when calculating the rolling average of heap usage. Default is 100.
        """
        return pulumi.get(self, "heap_moving_average_window_size")

    @property
    @pulumi.getter(name="heapPercentThreshold")
    def heap_percent_threshold(self) -> Optional[builtins.float]:
        """
        The heap usage threshold (as a percentage) required for a single search shard task before it is considered for cancellation. Default is 0.5.
        """
        return pulumi.get(self, "heap_percent_threshold")

    @property
    @pulumi.getter(name="heapVariance")
    def heap_variance(self) -> Optional[builtins.float]:
        """
        The minimum variance required for a single search shard task’s heap usage compared to the rolling average of previously completed tasks before it is considered for cancellation. Default is 2.0.
        """
        return pulumi.get(self, "heap_variance")

    @property
    @pulumi.getter(name="totalHeapPercentThreshold")
    def total_heap_percent_threshold(self) -> Optional[builtins.float]:
        """
        The heap usage threshold (as a percentage) required for the sum of heap usages of all search shard tasks before cancellation is applied. Default is 0.5.
        """
        return pulumi.get(self, "total_heap_percent_threshold")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchTask(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "cancellationBurst":
            suggest = "cancellation_burst"
        elif key == "cancellationRate":
            suggest = "cancellation_rate"
        elif key == "cancellationRatio":
            suggest = "cancellation_ratio"
        elif key == "cpuTimeMillisThreshold":
            suggest = "cpu_time_millis_threshold"
        elif key == "elapsedTimeMillisThreshold":
            suggest = "elapsed_time_millis_threshold"
        elif key == "heapMovingAverageWindowSize":
            suggest = "heap_moving_average_window_size"
        elif key == "heapPercentThreshold":
            suggest = "heap_percent_threshold"
        elif key == "heapVariance":
            suggest = "heap_variance"
        elif key == "totalHeapPercentThreshold":
            suggest = "total_heap_percent_threshold"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchTask. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchTask.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchTask.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 cancellation_burst: Optional[builtins.float] = None,
                 cancellation_rate: Optional[builtins.float] = None,
                 cancellation_ratio: Optional[builtins.float] = None,
                 cpu_time_millis_threshold: Optional[builtins.int] = None,
                 elapsed_time_millis_threshold: Optional[builtins.int] = None,
                 heap_moving_average_window_size: Optional[builtins.int] = None,
                 heap_percent_threshold: Optional[builtins.float] = None,
                 heap_variance: Optional[builtins.float] = None,
                 total_heap_percent_threshold: Optional[builtins.float] = None):
        """
        :param builtins.float cancellation_burst: The maximum number of search tasks to cancel in a single iteration of the observer thread. Default is 5.0.
        :param builtins.float cancellation_rate: The maximum number of search tasks to cancel per millisecond of elapsed time. Default is 0.003.
        :param builtins.float cancellation_ratio: The maximum number of search tasks to cancel, as a percentage of successful search task completions. Default is 0.1.
        :param builtins.int cpu_time_millis_threshold: The CPU usage threshold (in milliseconds) required for an individual parent task before it is considered for cancellation. Default is 30000.
        :param builtins.int elapsed_time_millis_threshold: The elapsed time threshold (in milliseconds) required for an individual parent task before it is considered for cancellation. Default is 45000.
        :param builtins.int heap_moving_average_window_size: The window size used to calculate the rolling average of the heap usage for the completed parent tasks. Default is 10.
        :param builtins.float heap_percent_threshold: The heap usage threshold (as a percentage) required for an individual parent task before it is considered for cancellation. Default is 0.2.
        :param builtins.float heap_variance: The heap usage variance required for an individual parent task before it is considered for cancellation. A task is considered for cancellation when taskHeapUsage is greater than or equal to heapUsageMovingAverage * variance. Default is 2.0.
        :param builtins.float total_heap_percent_threshold: The heap usage threshold (as a percentage) required for the sum of heap usages of all search tasks before cancellation is applied. Default is 0.5.
        """
        if cancellation_burst is not None:
            pulumi.set(__self__, "cancellation_burst", cancellation_burst)
        if cancellation_rate is not None:
            pulumi.set(__self__, "cancellation_rate", cancellation_rate)
        if cancellation_ratio is not None:
            pulumi.set(__self__, "cancellation_ratio", cancellation_ratio)
        if cpu_time_millis_threshold is not None:
            pulumi.set(__self__, "cpu_time_millis_threshold", cpu_time_millis_threshold)
        if elapsed_time_millis_threshold is not None:
            pulumi.set(__self__, "elapsed_time_millis_threshold", elapsed_time_millis_threshold)
        if heap_moving_average_window_size is not None:
            pulumi.set(__self__, "heap_moving_average_window_size", heap_moving_average_window_size)
        if heap_percent_threshold is not None:
            pulumi.set(__self__, "heap_percent_threshold", heap_percent_threshold)
        if heap_variance is not None:
            pulumi.set(__self__, "heap_variance", heap_variance)
        if total_heap_percent_threshold is not None:
            pulumi.set(__self__, "total_heap_percent_threshold", total_heap_percent_threshold)

    @property
    @pulumi.getter(name="cancellationBurst")
    def cancellation_burst(self) -> Optional[builtins.float]:
        """
        The maximum number of search tasks to cancel in a single iteration of the observer thread. Default is 5.0.
        """
        return pulumi.get(self, "cancellation_burst")

    @property
    @pulumi.getter(name="cancellationRate")
    def cancellation_rate(self) -> Optional[builtins.float]:
        """
        The maximum number of search tasks to cancel per millisecond of elapsed time. Default is 0.003.
        """
        return pulumi.get(self, "cancellation_rate")

    @property
    @pulumi.getter(name="cancellationRatio")
    def cancellation_ratio(self) -> Optional[builtins.float]:
        """
        The maximum number of search tasks to cancel, as a percentage of successful search task completions. Default is 0.1.
        """
        return pulumi.get(self, "cancellation_ratio")

    @property
    @pulumi.getter(name="cpuTimeMillisThreshold")
    def cpu_time_millis_threshold(self) -> Optional[builtins.int]:
        """
        The CPU usage threshold (in milliseconds) required for an individual parent task before it is considered for cancellation. Default is 30000.
        """
        return pulumi.get(self, "cpu_time_millis_threshold")

    @property
    @pulumi.getter(name="elapsedTimeMillisThreshold")
    def elapsed_time_millis_threshold(self) -> Optional[builtins.int]:
        """
        The elapsed time threshold (in milliseconds) required for an individual parent task before it is considered for cancellation. Default is 45000.
        """
        return pulumi.get(self, "elapsed_time_millis_threshold")

    @property
    @pulumi.getter(name="heapMovingAverageWindowSize")
    def heap_moving_average_window_size(self) -> Optional[builtins.int]:
        """
        The window size used to calculate the rolling average of the heap usage for the completed parent tasks. Default is 10.
        """
        return pulumi.get(self, "heap_moving_average_window_size")

    @property
    @pulumi.getter(name="heapPercentThreshold")
    def heap_percent_threshold(self) -> Optional[builtins.float]:
        """
        The heap usage threshold (as a percentage) required for an individual parent task before it is considered for cancellation. Default is 0.2.
        """
        return pulumi.get(self, "heap_percent_threshold")

    @property
    @pulumi.getter(name="heapVariance")
    def heap_variance(self) -> Optional[builtins.float]:
        """
        The heap usage variance required for an individual parent task before it is considered for cancellation. A task is considered for cancellation when taskHeapUsage is greater than or equal to heapUsageMovingAverage * variance. Default is 2.0.
        """
        return pulumi.get(self, "heap_variance")

    @property
    @pulumi.getter(name="totalHeapPercentThreshold")
    def total_heap_percent_threshold(self) -> Optional[builtins.float]:
        """
        The heap usage threshold (as a percentage) required for the sum of heap usages of all search tasks before cancellation is applied. Default is 0.5.
        """
        return pulumi.get(self, "total_heap_percent_threshold")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueries(dict):
    def __init__(__self__, *,
                 cpu: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesCpu'] = None,
                 latency: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesLatency'] = None,
                 memory: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesMemory'] = None):
        """
        :param 'OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesCpuArgs' cpu: Top N queries monitoring by CPU
        :param 'OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesLatencyArgs' latency: Top N queries monitoring by latency
        :param 'OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesMemoryArgs' memory: Top N queries monitoring by memory
        """
        if cpu is not None:
            pulumi.set(__self__, "cpu", cpu)
        if latency is not None:
            pulumi.set(__self__, "latency", latency)
        if memory is not None:
            pulumi.set(__self__, "memory", memory)

    @property
    @pulumi.getter
    def cpu(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesCpu']:
        """
        Top N queries monitoring by CPU
        """
        return pulumi.get(self, "cpu")

    @property
    @pulumi.getter
    def latency(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesLatency']:
        """
        Top N queries monitoring by latency
        """
        return pulumi.get(self, "latency")

    @property
    @pulumi.getter
    def memory(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesMemory']:
        """
        Top N queries monitoring by memory
        """
        return pulumi.get(self, "memory")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesCpu(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "topNSize":
            suggest = "top_n_size"
        elif key == "windowSize":
            suggest = "window_size"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesCpu. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesCpu.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesCpu.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None,
                 top_n_size: Optional[builtins.int] = None,
                 window_size: Optional[builtins.str] = None):
        """
        :param builtins.bool enabled: Enable or disable top N query monitoring by the metric. Default: `false`.
        :param builtins.int top_n_size: Specify the value of N for the top N queries by the metric.
        :param builtins.str window_size: The window size of the top N queries by the metric.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if top_n_size is not None:
            pulumi.set(__self__, "top_n_size", top_n_size)
        if window_size is not None:
            pulumi.set(__self__, "window_size", window_size)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable top N query monitoring by the metric. Default: `false`.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="topNSize")
    def top_n_size(self) -> Optional[builtins.int]:
        """
        Specify the value of N for the top N queries by the metric.
        """
        return pulumi.get(self, "top_n_size")

    @property
    @pulumi.getter(name="windowSize")
    def window_size(self) -> Optional[builtins.str]:
        """
        The window size of the top N queries by the metric.
        """
        return pulumi.get(self, "window_size")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesLatency(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "topNSize":
            suggest = "top_n_size"
        elif key == "windowSize":
            suggest = "window_size"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesLatency. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesLatency.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesLatency.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None,
                 top_n_size: Optional[builtins.int] = None,
                 window_size: Optional[builtins.str] = None):
        """
        :param builtins.bool enabled: Enable or disable top N query monitoring by the metric. Default: `false`.
        :param builtins.int top_n_size: Specify the value of N for the top N queries by the metric.
        :param builtins.str window_size: The window size of the top N queries by the metric.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if top_n_size is not None:
            pulumi.set(__self__, "top_n_size", top_n_size)
        if window_size is not None:
            pulumi.set(__self__, "window_size", window_size)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable top N query monitoring by the metric. Default: `false`.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="topNSize")
    def top_n_size(self) -> Optional[builtins.int]:
        """
        Specify the value of N for the top N queries by the metric.
        """
        return pulumi.get(self, "top_n_size")

    @property
    @pulumi.getter(name="windowSize")
    def window_size(self) -> Optional[builtins.str]:
        """
        The window size of the top N queries by the metric.
        """
        return pulumi.get(self, "window_size")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesMemory(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "topNSize":
            suggest = "top_n_size"
        elif key == "windowSize":
            suggest = "window_size"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesMemory. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesMemory.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesMemory.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None,
                 top_n_size: Optional[builtins.int] = None,
                 window_size: Optional[builtins.str] = None):
        """
        :param builtins.bool enabled: Enable or disable top N query monitoring by the metric. Default: `false`.
        :param builtins.int top_n_size: Specify the value of N for the top N queries by the metric.
        :param builtins.str window_size: The window size of the top N queries by the metric.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if top_n_size is not None:
            pulumi.set(__self__, "top_n_size", top_n_size)
        if window_size is not None:
            pulumi.set(__self__, "window_size", window_size)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable top N query monitoring by the metric. Default: `false`.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="topNSize")
    def top_n_size(self) -> Optional[builtins.int]:
        """
        Specify the value of N for the top N queries by the metric.
        """
        return pulumi.get(self, "top_n_size")

    @property
    @pulumi.getter(name="windowSize")
    def window_size(self) -> Optional[builtins.str]:
        """
        The window size of the top N queries by the metric.
        """
        return pulumi.get(self, "window_size")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchSegrep(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "pressureCheckpointLimit":
            suggest = "pressure_checkpoint_limit"
        elif key == "pressureEnabled":
            suggest = "pressure_enabled"
        elif key == "pressureReplicaStaleLimit":
            suggest = "pressure_replica_stale_limit"
        elif key == "pressureTimeLimit":
            suggest = "pressure_time_limit"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpensearchSegrep. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpensearchSegrep.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpensearchSegrep.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 pressure_checkpoint_limit: Optional[builtins.int] = None,
                 pressure_enabled: Optional[builtins.bool] = None,
                 pressure_replica_stale_limit: Optional[builtins.float] = None,
                 pressure_time_limit: Optional[builtins.str] = None):
        """
        :param builtins.int pressure_checkpoint_limit: The maximum number of indexing checkpoints that a replica shard can fall behind when copying from primary. Once `segrep.pressure.checkpoint.limit` is breached along with `segrep.pressure.time.limit`, the segment replication backpressure mechanism is initiated. Default is 4 checkpoints. Default: `4`.
        :param builtins.bool pressure_enabled: Enables the segment replication backpressure mechanism. Default is false. Default: `false`.
        :param builtins.float pressure_replica_stale_limit: The maximum number of stale replica shards that can exist in a replication group. Once `segrep.pressure.replica.stale.limit` is breached, the segment replication backpressure mechanism is initiated. Default is .5, which is 50% of a replication group. Default: `0.5`.
        :param builtins.str pressure_time_limit: The maximum amount of time that a replica shard can take to copy from the primary shard. Once segrep.pressure.time.limit is breached along with segrep.pressure.checkpoint.limit, the segment replication backpressure mechanism is initiated. Default is 5 minutes. Default: `5m`.
        """
        if pressure_checkpoint_limit is not None:
            pulumi.set(__self__, "pressure_checkpoint_limit", pressure_checkpoint_limit)
        if pressure_enabled is not None:
            pulumi.set(__self__, "pressure_enabled", pressure_enabled)
        if pressure_replica_stale_limit is not None:
            pulumi.set(__self__, "pressure_replica_stale_limit", pressure_replica_stale_limit)
        if pressure_time_limit is not None:
            pulumi.set(__self__, "pressure_time_limit", pressure_time_limit)

    @property
    @pulumi.getter(name="pressureCheckpointLimit")
    def pressure_checkpoint_limit(self) -> Optional[builtins.int]:
        """
        The maximum number of indexing checkpoints that a replica shard can fall behind when copying from primary. Once `segrep.pressure.checkpoint.limit` is breached along with `segrep.pressure.time.limit`, the segment replication backpressure mechanism is initiated. Default is 4 checkpoints. Default: `4`.
        """
        return pulumi.get(self, "pressure_checkpoint_limit")

    @property
    @pulumi.getter(name="pressureEnabled")
    def pressure_enabled(self) -> Optional[builtins.bool]:
        """
        Enables the segment replication backpressure mechanism. Default is false. Default: `false`.
        """
        return pulumi.get(self, "pressure_enabled")

    @property
    @pulumi.getter(name="pressureReplicaStaleLimit")
    def pressure_replica_stale_limit(self) -> Optional[builtins.float]:
        """
        The maximum number of stale replica shards that can exist in a replication group. Once `segrep.pressure.replica.stale.limit` is breached, the segment replication backpressure mechanism is initiated. Default is .5, which is 50% of a replication group. Default: `0.5`.
        """
        return pulumi.get(self, "pressure_replica_stale_limit")

    @property
    @pulumi.getter(name="pressureTimeLimit")
    def pressure_time_limit(self) -> Optional[builtins.str]:
        """
        The maximum amount of time that a replica shard can take to copy from the primary shard. Once segrep.pressure.time.limit is breached along with segrep.pressure.checkpoint.limit, the segment replication backpressure mechanism is initiated. Default is 5 minutes. Default: `5m`.
        """
        return pulumi.get(self, "pressure_time_limit")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchShardIndexingPressure(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "operatingFactor":
            suggest = "operating_factor"
        elif key == "primaryParameter":
            suggest = "primary_parameter"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpensearchShardIndexingPressure. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpensearchShardIndexingPressure.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpensearchShardIndexingPressure.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None,
                 enforced: Optional[builtins.bool] = None,
                 operating_factor: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchShardIndexingPressureOperatingFactor'] = None,
                 primary_parameter: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameter'] = None):
        """
        :param builtins.bool enabled: Enable or disable shard indexing backpressure. Default is false.
        :param builtins.bool enforced: Run shard indexing backpressure in shadow mode or enforced mode.
                       In shadow mode (value set as false), shard indexing backpressure tracks all granular-level metrics,
                       but it doesn’t actually reject any indexing requests.
                       In enforced mode (value set as true),
                       shard indexing backpressure rejects any requests to the cluster that might cause a dip in its performance.
                       Default is false.
        :param 'OpenSearchOpensearchUserConfigOpensearchShardIndexingPressureOperatingFactorArgs' operating_factor: Operating factor
        :param 'OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterArgs' primary_parameter: Primary parameter
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if enforced is not None:
            pulumi.set(__self__, "enforced", enforced)
        if operating_factor is not None:
            pulumi.set(__self__, "operating_factor", operating_factor)
        if primary_parameter is not None:
            pulumi.set(__self__, "primary_parameter", primary_parameter)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable shard indexing backpressure. Default is false.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter
    def enforced(self) -> Optional[builtins.bool]:
        """
        Run shard indexing backpressure in shadow mode or enforced mode.
                In shadow mode (value set as false), shard indexing backpressure tracks all granular-level metrics,
                but it doesn’t actually reject any indexing requests.
                In enforced mode (value set as true),
                shard indexing backpressure rejects any requests to the cluster that might cause a dip in its performance.
                Default is false.
        """
        return pulumi.get(self, "enforced")

    @property
    @pulumi.getter(name="operatingFactor")
    def operating_factor(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchShardIndexingPressureOperatingFactor']:
        """
        Operating factor
        """
        return pulumi.get(self, "operating_factor")

    @property
    @pulumi.getter(name="primaryParameter")
    def primary_parameter(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameter']:
        """
        Primary parameter
        """
        return pulumi.get(self, "primary_parameter")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchShardIndexingPressureOperatingFactor(dict):
    def __init__(__self__, *,
                 lower: Optional[builtins.float] = None,
                 optimal: Optional[builtins.float] = None,
                 upper: Optional[builtins.float] = None):
        """
        :param builtins.float lower: Specify the lower occupancy limit of the allocated quota of memory for the shard.
                               If the total memory usage of a shard is below this limit,
                               shard indexing backpressure decreases the current allocated memory for that shard.
                               Default is 0.75.
        :param builtins.float optimal: Specify the optimal occupancy of the allocated quota of memory for the shard.
                               If the total memory usage of a shard is at this level,
                               shard indexing backpressure doesn’t change the current allocated memory for that shard.
                               Default is 0.85.
        :param builtins.float upper: Specify the upper occupancy limit of the allocated quota of memory for the shard.
                               If the total memory usage of a shard is above this limit,
                               shard indexing backpressure increases the current allocated memory for that shard.
                               Default is 0.95.
        """
        if lower is not None:
            pulumi.set(__self__, "lower", lower)
        if optimal is not None:
            pulumi.set(__self__, "optimal", optimal)
        if upper is not None:
            pulumi.set(__self__, "upper", upper)

    @property
    @pulumi.getter
    def lower(self) -> Optional[builtins.float]:
        """
        Specify the lower occupancy limit of the allocated quota of memory for the shard.
                        If the total memory usage of a shard is below this limit,
                        shard indexing backpressure decreases the current allocated memory for that shard.
                        Default is 0.75.
        """
        return pulumi.get(self, "lower")

    @property
    @pulumi.getter
    def optimal(self) -> Optional[builtins.float]:
        """
        Specify the optimal occupancy of the allocated quota of memory for the shard.
                        If the total memory usage of a shard is at this level,
                        shard indexing backpressure doesn’t change the current allocated memory for that shard.
                        Default is 0.85.
        """
        return pulumi.get(self, "optimal")

    @property
    @pulumi.getter
    def upper(self) -> Optional[builtins.float]:
        """
        Specify the upper occupancy limit of the allocated quota of memory for the shard.
                        If the total memory usage of a shard is above this limit,
                        shard indexing backpressure increases the current allocated memory for that shard.
                        Default is 0.95.
        """
        return pulumi.get(self, "upper")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameter(dict):
    def __init__(__self__, *,
                 node: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterNode'] = None,
                 shard: Optional['outputs.OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterShard'] = None):
        if node is not None:
            pulumi.set(__self__, "node", node)
        if shard is not None:
            pulumi.set(__self__, "shard", shard)

    @property
    @pulumi.getter
    def node(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterNode']:
        return pulumi.get(self, "node")

    @property
    @pulumi.getter
    def shard(self) -> Optional['outputs.OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterShard']:
        return pulumi.get(self, "shard")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterNode(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "softLimit":
            suggest = "soft_limit"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterNode. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterNode.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterNode.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 soft_limit: Optional[builtins.float] = None):
        """
        :param builtins.float soft_limit: Define the percentage of the node-level memory
                                       threshold that acts as a soft indicator for strain on a node.
                                       Default is 0.7.
        """
        if soft_limit is not None:
            pulumi.set(__self__, "soft_limit", soft_limit)

    @property
    @pulumi.getter(name="softLimit")
    def soft_limit(self) -> Optional[builtins.float]:
        """
        Define the percentage of the node-level memory
                                threshold that acts as a soft indicator for strain on a node.
                                Default is 0.7.
        """
        return pulumi.get(self, "soft_limit")


@pulumi.output_type
class OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterShard(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "minLimit":
            suggest = "min_limit"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterShard. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterShard.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterShard.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 min_limit: Optional[builtins.float] = None):
        """
        :param builtins.float min_limit: Specify the minimum assigned quota for a new shard in any role (coordinator, primary, or replica).
                                       Shard indexing backpressure increases or decreases this allocated quota based on the inflow of traffic for the shard.
                                       Default is 0.001.
        """
        if min_limit is not None:
            pulumi.set(__self__, "min_limit", min_limit)

    @property
    @pulumi.getter(name="minLimit")
    def min_limit(self) -> Optional[builtins.float]:
        """
        Specify the minimum assigned quota for a new shard in any role (coordinator, primary, or replica).
                                Shard indexing backpressure increases or decreases this allocated quota based on the inflow of traffic for the shard.
                                Default is 0.001.
        """
        return pulumi.get(self, "min_limit")


@pulumi.output_type
class OpenSearchOpensearchUserConfigPrivateAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "opensearchDashboards":
            suggest = "opensearch_dashboards"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigPrivateAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigPrivateAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigPrivateAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 opensearch: Optional[builtins.bool] = None,
                 opensearch_dashboards: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool opensearch: Allow clients to connect to opensearch with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool opensearch_dashboards: Allow clients to connect to opensearch_dashboards with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if opensearch is not None:
            pulumi.set(__self__, "opensearch", opensearch)
        if opensearch_dashboards is not None:
            pulumi.set(__self__, "opensearch_dashboards", opensearch_dashboards)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def opensearch(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to opensearch with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "opensearch")

    @property
    @pulumi.getter(name="opensearchDashboards")
    def opensearch_dashboards(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to opensearch_dashboards with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "opensearch_dashboards")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class OpenSearchOpensearchUserConfigPrivatelinkAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "opensearchDashboards":
            suggest = "opensearch_dashboards"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigPrivatelinkAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigPrivatelinkAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigPrivatelinkAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 opensearch: Optional[builtins.bool] = None,
                 opensearch_dashboards: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool opensearch: Enable opensearch.
        :param builtins.bool opensearch_dashboards: Enable opensearch_dashboards.
        :param builtins.bool prometheus: Enable prometheus.
        """
        if opensearch is not None:
            pulumi.set(__self__, "opensearch", opensearch)
        if opensearch_dashboards is not None:
            pulumi.set(__self__, "opensearch_dashboards", opensearch_dashboards)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def opensearch(self) -> Optional[builtins.bool]:
        """
        Enable opensearch.
        """
        return pulumi.get(self, "opensearch")

    @property
    @pulumi.getter(name="opensearchDashboards")
    def opensearch_dashboards(self) -> Optional[builtins.bool]:
        """
        Enable opensearch_dashboards.
        """
        return pulumi.get(self, "opensearch_dashboards")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class OpenSearchOpensearchUserConfigPublicAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "opensearchDashboards":
            suggest = "opensearch_dashboards"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigPublicAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigPublicAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigPublicAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 opensearch: Optional[builtins.bool] = None,
                 opensearch_dashboards: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool opensearch: Allow clients to connect to opensearch from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool opensearch_dashboards: Allow clients to connect to opensearch_dashboards from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if opensearch is not None:
            pulumi.set(__self__, "opensearch", opensearch)
        if opensearch_dashboards is not None:
            pulumi.set(__self__, "opensearch_dashboards", opensearch_dashboards)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def opensearch(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to opensearch from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "opensearch")

    @property
    @pulumi.getter(name="opensearchDashboards")
    def opensearch_dashboards(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to opensearch_dashboards from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "opensearch_dashboards")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class OpenSearchOpensearchUserConfigS3Migration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "accessKey":
            suggest = "access_key"
        elif key == "basePath":
            suggest = "base_path"
        elif key == "secretKey":
            suggest = "secret_key"
        elif key == "snapshotName":
            suggest = "snapshot_name"
        elif key == "chunkSize":
            suggest = "chunk_size"
        elif key == "includeAliases":
            suggest = "include_aliases"
        elif key == "restoreGlobalState":
            suggest = "restore_global_state"
        elif key == "serverSideEncryption":
            suggest = "server_side_encryption"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigS3Migration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigS3Migration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigS3Migration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 access_key: builtins.str,
                 base_path: builtins.str,
                 bucket: builtins.str,
                 indices: builtins.str,
                 region: builtins.str,
                 secret_key: builtins.str,
                 snapshot_name: builtins.str,
                 chunk_size: Optional[builtins.str] = None,
                 compress: Optional[builtins.bool] = None,
                 endpoint: Optional[builtins.str] = None,
                 include_aliases: Optional[builtins.bool] = None,
                 readonly: Optional[builtins.bool] = None,
                 restore_global_state: Optional[builtins.bool] = None,
                 server_side_encryption: Optional[builtins.bool] = None):
        """
        :param builtins.str access_key: AWS Access key.
        :param builtins.str base_path: The path to the repository data within its container. The value of this setting should not start or end with a /.
        :param builtins.str bucket: S3 bucket name.
        :param builtins.str indices: A comma-delimited list of indices to restore from the snapshot. Multi-index syntax is supported. Example: `metrics*,logs*,data-20240823`.
        :param builtins.str region: S3 region.
        :param builtins.str secret_key: AWS secret key.
        :param builtins.str snapshot_name: The snapshot name to restore from.
        :param builtins.str chunk_size: Big files can be broken down into chunks during snapshotting if needed. Should be the same as for the 3rd party repository.
        :param builtins.bool compress: When set to true metadata files are stored in compressed format.
        :param builtins.str endpoint: The S3 service endpoint to connect to. If you are using an S3-compatible service then you should set this to the service’s endpoint.
        :param builtins.bool include_aliases: Whether to restore aliases alongside their associated indexes. Default is true.
        :param builtins.bool readonly: Whether the repository is read-only. Default: `true`.
        :param builtins.bool restore_global_state: If true, restore the cluster state. Defaults to false.
        :param builtins.bool server_side_encryption: When set to true files are encrypted on server side.
        """
        pulumi.set(__self__, "access_key", access_key)
        pulumi.set(__self__, "base_path", base_path)
        pulumi.set(__self__, "bucket", bucket)
        pulumi.set(__self__, "indices", indices)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "secret_key", secret_key)
        pulumi.set(__self__, "snapshot_name", snapshot_name)
        if chunk_size is not None:
            pulumi.set(__self__, "chunk_size", chunk_size)
        if compress is not None:
            pulumi.set(__self__, "compress", compress)
        if endpoint is not None:
            pulumi.set(__self__, "endpoint", endpoint)
        if include_aliases is not None:
            pulumi.set(__self__, "include_aliases", include_aliases)
        if readonly is not None:
            pulumi.set(__self__, "readonly", readonly)
        if restore_global_state is not None:
            pulumi.set(__self__, "restore_global_state", restore_global_state)
        if server_side_encryption is not None:
            pulumi.set(__self__, "server_side_encryption", server_side_encryption)

    @property
    @pulumi.getter(name="accessKey")
    def access_key(self) -> builtins.str:
        """
        AWS Access key.
        """
        return pulumi.get(self, "access_key")

    @property
    @pulumi.getter(name="basePath")
    def base_path(self) -> builtins.str:
        """
        The path to the repository data within its container. The value of this setting should not start or end with a /.
        """
        return pulumi.get(self, "base_path")

    @property
    @pulumi.getter
    def bucket(self) -> builtins.str:
        """
        S3 bucket name.
        """
        return pulumi.get(self, "bucket")

    @property
    @pulumi.getter
    def indices(self) -> builtins.str:
        """
        A comma-delimited list of indices to restore from the snapshot. Multi-index syntax is supported. Example: `metrics*,logs*,data-20240823`.
        """
        return pulumi.get(self, "indices")

    @property
    @pulumi.getter
    def region(self) -> builtins.str:
        """
        S3 region.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="secretKey")
    def secret_key(self) -> builtins.str:
        """
        AWS secret key.
        """
        return pulumi.get(self, "secret_key")

    @property
    @pulumi.getter(name="snapshotName")
    def snapshot_name(self) -> builtins.str:
        """
        The snapshot name to restore from.
        """
        return pulumi.get(self, "snapshot_name")

    @property
    @pulumi.getter(name="chunkSize")
    def chunk_size(self) -> Optional[builtins.str]:
        """
        Big files can be broken down into chunks during snapshotting if needed. Should be the same as for the 3rd party repository.
        """
        return pulumi.get(self, "chunk_size")

    @property
    @pulumi.getter
    def compress(self) -> Optional[builtins.bool]:
        """
        When set to true metadata files are stored in compressed format.
        """
        return pulumi.get(self, "compress")

    @property
    @pulumi.getter
    def endpoint(self) -> Optional[builtins.str]:
        """
        The S3 service endpoint to connect to. If you are using an S3-compatible service then you should set this to the service’s endpoint.
        """
        return pulumi.get(self, "endpoint")

    @property
    @pulumi.getter(name="includeAliases")
    def include_aliases(self) -> Optional[builtins.bool]:
        """
        Whether to restore aliases alongside their associated indexes. Default is true.
        """
        return pulumi.get(self, "include_aliases")

    @property
    @pulumi.getter
    def readonly(self) -> Optional[builtins.bool]:
        """
        Whether the repository is read-only. Default: `true`.
        """
        return pulumi.get(self, "readonly")

    @property
    @pulumi.getter(name="restoreGlobalState")
    def restore_global_state(self) -> Optional[builtins.bool]:
        """
        If true, restore the cluster state. Defaults to false.
        """
        return pulumi.get(self, "restore_global_state")

    @property
    @pulumi.getter(name="serverSideEncryption")
    def server_side_encryption(self) -> Optional[builtins.bool]:
        """
        When set to true files are encrypted on server side.
        """
        return pulumi.get(self, "server_side_encryption")


@pulumi.output_type
class OpenSearchOpensearchUserConfigSaml(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "idpEntityId":
            suggest = "idp_entity_id"
        elif key == "idpMetadataUrl":
            suggest = "idp_metadata_url"
        elif key == "spEntityId":
            suggest = "sp_entity_id"
        elif key == "idpPemtrustedcasContent":
            suggest = "idp_pemtrustedcas_content"
        elif key == "rolesKey":
            suggest = "roles_key"
        elif key == "subjectKey":
            suggest = "subject_key"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchOpensearchUserConfigSaml. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchOpensearchUserConfigSaml.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchOpensearchUserConfigSaml.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 enabled: builtins.bool,
                 idp_entity_id: builtins.str,
                 idp_metadata_url: builtins.str,
                 sp_entity_id: builtins.str,
                 idp_pemtrustedcas_content: Optional[builtins.str] = None,
                 roles_key: Optional[builtins.str] = None,
                 subject_key: Optional[builtins.str] = None):
        """
        :param builtins.bool enabled: Enables or disables SAML-based authentication for OpenSearch. When enabled, users can authenticate using SAML with an Identity Provider. Default: `true`.
        :param builtins.str idp_entity_id: The unique identifier for the Identity Provider (IdP) entity that is used for SAML authentication. This value is typically provided by the IdP. Example: `test-idp-entity-id`.
        :param builtins.str idp_metadata_url: The URL of the SAML metadata for the Identity Provider (IdP). This is used to configure SAML-based authentication with the IdP. Example: `https://test-account.okta.com/app/exk491jujcVc83LEX697/sso/saml/metadata`.
        :param builtins.str sp_entity_id: The unique identifier for the Service Provider (SP) entity that is used for SAML authentication. This value is typically provided by the SP. Example: `test-sp-entity-id`.
        :param builtins.str idp_pemtrustedcas_content: This parameter specifies the PEM-encoded root certificate authority (CA) content for the SAML identity provider (IdP) server verification. The root CA content is used to verify the SSL/TLS certificate presented by the server. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        :param builtins.str roles_key: Optional. Specifies the attribute in the SAML response where role information is stored, if available. Role attributes are not required for SAML authentication, but can be included in SAML assertions by most Identity Providers (IdPs) to determine user access levels or permissions. Example: `RoleName`.
        :param builtins.str subject_key: Optional. Specifies the attribute in the SAML response where the subject identifier is stored. If not configured, the NameID attribute is used by default. Example: `NameID`.
        """
        pulumi.set(__self__, "enabled", enabled)
        pulumi.set(__self__, "idp_entity_id", idp_entity_id)
        pulumi.set(__self__, "idp_metadata_url", idp_metadata_url)
        pulumi.set(__self__, "sp_entity_id", sp_entity_id)
        if idp_pemtrustedcas_content is not None:
            pulumi.set(__self__, "idp_pemtrustedcas_content", idp_pemtrustedcas_content)
        if roles_key is not None:
            pulumi.set(__self__, "roles_key", roles_key)
        if subject_key is not None:
            pulumi.set(__self__, "subject_key", subject_key)

    @property
    @pulumi.getter
    def enabled(self) -> builtins.bool:
        """
        Enables or disables SAML-based authentication for OpenSearch. When enabled, users can authenticate using SAML with an Identity Provider. Default: `true`.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="idpEntityId")
    def idp_entity_id(self) -> builtins.str:
        """
        The unique identifier for the Identity Provider (IdP) entity that is used for SAML authentication. This value is typically provided by the IdP. Example: `test-idp-entity-id`.
        """
        return pulumi.get(self, "idp_entity_id")

    @property
    @pulumi.getter(name="idpMetadataUrl")
    def idp_metadata_url(self) -> builtins.str:
        """
        The URL of the SAML metadata for the Identity Provider (IdP). This is used to configure SAML-based authentication with the IdP. Example: `https://test-account.okta.com/app/exk491jujcVc83LEX697/sso/saml/metadata`.
        """
        return pulumi.get(self, "idp_metadata_url")

    @property
    @pulumi.getter(name="spEntityId")
    def sp_entity_id(self) -> builtins.str:
        """
        The unique identifier for the Service Provider (SP) entity that is used for SAML authentication. This value is typically provided by the SP. Example: `test-sp-entity-id`.
        """
        return pulumi.get(self, "sp_entity_id")

    @property
    @pulumi.getter(name="idpPemtrustedcasContent")
    def idp_pemtrustedcas_content(self) -> Optional[builtins.str]:
        """
        This parameter specifies the PEM-encoded root certificate authority (CA) content for the SAML identity provider (IdP) server verification. The root CA content is used to verify the SSL/TLS certificate presented by the server. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "idp_pemtrustedcas_content")

    @property
    @pulumi.getter(name="rolesKey")
    def roles_key(self) -> Optional[builtins.str]:
        """
        Optional. Specifies the attribute in the SAML response where role information is stored, if available. Role attributes are not required for SAML authentication, but can be included in SAML assertions by most Identity Providers (IdPs) to determine user access levels or permissions. Example: `RoleName`.
        """
        return pulumi.get(self, "roles_key")

    @property
    @pulumi.getter(name="subjectKey")
    def subject_key(self) -> Optional[builtins.str]:
        """
        Optional. Specifies the attribute in the SAML response where the subject identifier is stored. If not configured, the NameID attribute is used by default. Example: `NameID`.
        """
        return pulumi.get(self, "subject_key")


@pulumi.output_type
class OpenSearchServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OpenSearchServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OpenSearchServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OpenSearchServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class OpenSearchTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class OpenSearchTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class OrganizationAddressTimeouts(dict):
    def __init__(__self__, *,
                 create: Optional[builtins.str] = None,
                 delete: Optional[builtins.str] = None,
                 read: Optional[builtins.str] = None,
                 update: Optional[builtins.str] = None):
        """
        :param builtins.str create: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        :param builtins.str delete: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.
        :param builtins.str read: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.
        :param builtins.str update: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        if create is not None:
            pulumi.set(__self__, "create", create)
        if delete is not None:
            pulumi.set(__self__, "delete", delete)
        if read is not None:
            pulumi.set(__self__, "read", read)
        if update is not None:
            pulumi.set(__self__, "update", update)

    @property
    @pulumi.getter
    def create(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "create")

    @property
    @pulumi.getter
    def delete(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.
        """
        return pulumi.get(self, "delete")

    @property
    @pulumi.getter
    def read(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.
        """
        return pulumi.get(self, "read")

    @property
    @pulumi.getter
    def update(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "update")


@pulumi.output_type
class OrganizationBillingGroupTimeouts(dict):
    def __init__(__self__, *,
                 create: Optional[builtins.str] = None,
                 delete: Optional[builtins.str] = None,
                 read: Optional[builtins.str] = None,
                 update: Optional[builtins.str] = None):
        """
        :param builtins.str create: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        :param builtins.str delete: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.
        :param builtins.str read: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.
        :param builtins.str update: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        if create is not None:
            pulumi.set(__self__, "create", create)
        if delete is not None:
            pulumi.set(__self__, "delete", delete)
        if read is not None:
            pulumi.set(__self__, "read", read)
        if update is not None:
            pulumi.set(__self__, "update", update)

    @property
    @pulumi.getter
    def create(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "create")

    @property
    @pulumi.getter
    def delete(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.
        """
        return pulumi.get(self, "delete")

    @property
    @pulumi.getter
    def read(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.
        """
        return pulumi.get(self, "read")

    @property
    @pulumi.getter
    def update(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "update")


@pulumi.output_type
class OrganizationGroupProjectTimeouts(dict):
    def __init__(__self__, *,
                 create: Optional[builtins.str] = None,
                 delete: Optional[builtins.str] = None,
                 read: Optional[builtins.str] = None,
                 update: Optional[builtins.str] = None):
        """
        :param builtins.str create: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        :param builtins.str delete: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.
        :param builtins.str read: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.
        :param builtins.str update: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        if create is not None:
            pulumi.set(__self__, "create", create)
        if delete is not None:
            pulumi.set(__self__, "delete", delete)
        if read is not None:
            pulumi.set(__self__, "read", read)
        if update is not None:
            pulumi.set(__self__, "update", update)

    @property
    @pulumi.getter
    def create(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "create")

    @property
    @pulumi.getter
    def delete(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.
        """
        return pulumi.get(self, "delete")

    @property
    @pulumi.getter
    def read(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.
        """
        return pulumi.get(self, "read")

    @property
    @pulumi.getter
    def update(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "update")


@pulumi.output_type
class OrganizationPermissionPermission(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "principalId":
            suggest = "principal_id"
        elif key == "principalType":
            suggest = "principal_type"
        elif key == "createTime":
            suggest = "create_time"
        elif key == "updateTime":
            suggest = "update_time"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OrganizationPermissionPermission. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OrganizationPermissionPermission.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OrganizationPermissionPermission.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 permissions: Sequence[builtins.str],
                 principal_id: builtins.str,
                 principal_type: builtins.str,
                 create_time: Optional[builtins.str] = None,
                 update_time: Optional[builtins.str] = None):
        """
        :param Sequence[builtins.str] permissions: List of [roles and permissions](https://aiven.io/docs/platform/concepts/permissions) to grant. The possible values are `admin`, `developer`, `operator`, `organization:app_users:write`, `organization:audit_logs:read`, `organization:billing:read`, `organization:billing:write`, `organization:domains:write`, `organization:groups:write`, `organization:idps:write`, `organization:networking:read`, `organization:networking:write`, `organization:projects:write`, `organization:users:write`, `project:audit_logs:read`, `project:integrations:read`, `project:integrations:write`, `project:networking:read`, `project:networking:write`, `project:permissions:read`, `project:services:read`, `project:services:write`, `read_only`, `role:organization:admin`, `role:services:maintenance`, `role:services:recover`, `service:configuration:write`, `service:data:write`, `service:logs:read`, `service:secrets:read` and `service:users:write`.
        :param builtins.str principal_id: ID of the user or group to grant permissions to. Only active users who have accepted an [invite](https://aiven.io/docs/platform/howto/manage-org-users) to join the organization can be granted permissions.
        :param builtins.str principal_type: The type of principal. The possible values are `user` and `user_group`.
        :param builtins.str create_time: Time created.
        :param builtins.str update_time: Time updated.
        """
        pulumi.set(__self__, "permissions", permissions)
        pulumi.set(__self__, "principal_id", principal_id)
        pulumi.set(__self__, "principal_type", principal_type)
        if create_time is not None:
            pulumi.set(__self__, "create_time", create_time)
        if update_time is not None:
            pulumi.set(__self__, "update_time", update_time)

    @property
    @pulumi.getter
    def permissions(self) -> Sequence[builtins.str]:
        """
        List of [roles and permissions](https://aiven.io/docs/platform/concepts/permissions) to grant. The possible values are `admin`, `developer`, `operator`, `organization:app_users:write`, `organization:audit_logs:read`, `organization:billing:read`, `organization:billing:write`, `organization:domains:write`, `organization:groups:write`, `organization:idps:write`, `organization:networking:read`, `organization:networking:write`, `organization:projects:write`, `organization:users:write`, `project:audit_logs:read`, `project:integrations:read`, `project:integrations:write`, `project:networking:read`, `project:networking:write`, `project:permissions:read`, `project:services:read`, `project:services:write`, `read_only`, `role:organization:admin`, `role:services:maintenance`, `role:services:recover`, `service:configuration:write`, `service:data:write`, `service:logs:read`, `service:secrets:read` and `service:users:write`.
        """
        return pulumi.get(self, "permissions")

    @property
    @pulumi.getter(name="principalId")
    def principal_id(self) -> builtins.str:
        """
        ID of the user or group to grant permissions to. Only active users who have accepted an [invite](https://aiven.io/docs/platform/howto/manage-org-users) to join the organization can be granted permissions.
        """
        return pulumi.get(self, "principal_id")

    @property
    @pulumi.getter(name="principalType")
    def principal_type(self) -> builtins.str:
        """
        The type of principal. The possible values are `user` and `user_group`.
        """
        return pulumi.get(self, "principal_type")

    @property
    @pulumi.getter(name="createTime")
    def create_time(self) -> Optional[builtins.str]:
        """
        Time created.
        """
        return pulumi.get(self, "create_time")

    @property
    @pulumi.getter(name="updateTime")
    def update_time(self) -> Optional[builtins.str]:
        """
        Time updated.
        """
        return pulumi.get(self, "update_time")


@pulumi.output_type
class OrganizationProjectTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Project tag key.
        :param builtins.str value: Project tag value.
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Project tag key.
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Project tag value.
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class OrganizationProjectTimeouts(dict):
    def __init__(__self__, *,
                 create: Optional[builtins.str] = None,
                 delete: Optional[builtins.str] = None,
                 read: Optional[builtins.str] = None,
                 update: Optional[builtins.str] = None):
        """
        :param builtins.str create: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        :param builtins.str delete: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.
        :param builtins.str read: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.
        :param builtins.str update: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        if create is not None:
            pulumi.set(__self__, "create", create)
        if delete is not None:
            pulumi.set(__self__, "delete", delete)
        if read is not None:
            pulumi.set(__self__, "read", read)
        if update is not None:
            pulumi.set(__self__, "update", update)

    @property
    @pulumi.getter
    def create(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "create")

    @property
    @pulumi.getter
    def delete(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.
        """
        return pulumi.get(self, "delete")

    @property
    @pulumi.getter
    def read(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.
        """
        return pulumi.get(self, "read")

    @property
    @pulumi.getter
    def update(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "update")


@pulumi.output_type
class OrganizationTimeouts(dict):
    def __init__(__self__, *,
                 create: Optional[builtins.str] = None,
                 delete: Optional[builtins.str] = None,
                 read: Optional[builtins.str] = None,
                 update: Optional[builtins.str] = None):
        """
        :param builtins.str create: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        :param builtins.str delete: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.
        :param builtins.str read: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.
        :param builtins.str update: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        if create is not None:
            pulumi.set(__self__, "create", create)
        if delete is not None:
            pulumi.set(__self__, "delete", delete)
        if read is not None:
            pulumi.set(__self__, "read", read)
        if update is not None:
            pulumi.set(__self__, "update", update)

    @property
    @pulumi.getter
    def create(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "create")

    @property
    @pulumi.getter
    def delete(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.
        """
        return pulumi.get(self, "delete")

    @property
    @pulumi.getter
    def read(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.
        """
        return pulumi.get(self, "read")

    @property
    @pulumi.getter
    def update(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "update")


@pulumi.output_type
class OrganizationUserGroupMemberTimeouts(dict):
    def __init__(__self__, *,
                 create: Optional[builtins.str] = None,
                 delete: Optional[builtins.str] = None,
                 read: Optional[builtins.str] = None,
                 update: Optional[builtins.str] = None):
        """
        :param builtins.str create: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        :param builtins.str delete: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.
        :param builtins.str read: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.
        :param builtins.str update: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        if create is not None:
            pulumi.set(__self__, "create", create)
        if delete is not None:
            pulumi.set(__self__, "delete", delete)
        if read is not None:
            pulumi.set(__self__, "read", read)
        if update is not None:
            pulumi.set(__self__, "update", update)

    @property
    @pulumi.getter
    def create(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "create")

    @property
    @pulumi.getter
    def delete(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.
        """
        return pulumi.get(self, "delete")

    @property
    @pulumi.getter
    def read(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.
        """
        return pulumi.get(self, "read")

    @property
    @pulumi.getter
    def update(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "update")


@pulumi.output_type
class PgComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in PgComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        PgComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        PgComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class PgPg(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "maxConnections":
            suggest = "max_connections"
        elif key == "replicaUri":
            suggest = "replica_uri"
        elif key == "standbyUris":
            suggest = "standby_uris"
        elif key == "syncingUris":
            suggest = "syncing_uris"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in PgPg. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        PgPg.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        PgPg.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 bouncer: Optional[builtins.str] = None,
                 dbname: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 max_connections: Optional[builtins.int] = None,
                 params: Optional[Sequence['outputs.PgPgParam']] = None,
                 password: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 replica_uri: Optional[builtins.str] = None,
                 sslmode: Optional[builtins.str] = None,
                 standby_uris: Optional[Sequence[builtins.str]] = None,
                 syncing_uris: Optional[Sequence[builtins.str]] = None,
                 uri: Optional[builtins.str] = None,
                 uris: Optional[Sequence[builtins.str]] = None,
                 user: Optional[builtins.str] = None):
        """
        :param builtins.str bouncer: PgBouncer connection details for [connection pooling](https://aiven.io/docs/products/postgresql/concepts/pg-connection-pooling).
        :param builtins.str dbname: Primary PostgreSQL database name.
        :param builtins.str host: PostgreSQL primary node host IP or name.
        :param builtins.int max_connections: The [number of allowed connections](https://aiven.io/docs/products/postgresql/reference/pg-connection-limits). Varies based on the service plan.
        :param Sequence['PgPgParamArgs'] params: PostgreSQL connection parameters.
        :param builtins.str password: PostgreSQL admin user password.
        :param builtins.int port: PostgreSQL port.
        :param builtins.str replica_uri: PostgreSQL replica URI for services with a replica.
        :param builtins.str sslmode: PostgreSQL SSL mode setting.
        :param Sequence[builtins.str] standby_uris: PostgreSQL standby connection URIs.
        :param Sequence[builtins.str] syncing_uris: PostgreSQL syncing connection URIs.
        :param builtins.str uri: PostgreSQL primary connection URI.
        :param Sequence[builtins.str] uris: PostgreSQL primary connection URIs.
        :param builtins.str user: PostgreSQL admin user name.
        """
        if bouncer is not None:
            pulumi.set(__self__, "bouncer", bouncer)
        if dbname is not None:
            pulumi.set(__self__, "dbname", dbname)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if max_connections is not None:
            pulumi.set(__self__, "max_connections", max_connections)
        if params is not None:
            pulumi.set(__self__, "params", params)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if replica_uri is not None:
            pulumi.set(__self__, "replica_uri", replica_uri)
        if sslmode is not None:
            pulumi.set(__self__, "sslmode", sslmode)
        if standby_uris is not None:
            pulumi.set(__self__, "standby_uris", standby_uris)
        if syncing_uris is not None:
            pulumi.set(__self__, "syncing_uris", syncing_uris)
        if uri is not None:
            pulumi.set(__self__, "uri", uri)
        if uris is not None:
            pulumi.set(__self__, "uris", uris)
        if user is not None:
            pulumi.set(__self__, "user", user)

    @property
    @pulumi.getter
    @_utilities.deprecated("""This field was added by mistake and has never worked. It will be removed in future versions.""")
    def bouncer(self) -> Optional[builtins.str]:
        """
        PgBouncer connection details for [connection pooling](https://aiven.io/docs/products/postgresql/concepts/pg-connection-pooling).
        """
        return pulumi.get(self, "bouncer")

    @property
    @pulumi.getter
    def dbname(self) -> Optional[builtins.str]:
        """
        Primary PostgreSQL database name.
        """
        return pulumi.get(self, "dbname")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        PostgreSQL primary node host IP or name.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="maxConnections")
    def max_connections(self) -> Optional[builtins.int]:
        """
        The [number of allowed connections](https://aiven.io/docs/products/postgresql/reference/pg-connection-limits). Varies based on the service plan.
        """
        return pulumi.get(self, "max_connections")

    @property
    @pulumi.getter
    def params(self) -> Optional[Sequence['outputs.PgPgParam']]:
        """
        PostgreSQL connection parameters.
        """
        return pulumi.get(self, "params")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        PostgreSQL admin user password.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        PostgreSQL port.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter(name="replicaUri")
    def replica_uri(self) -> Optional[builtins.str]:
        """
        PostgreSQL replica URI for services with a replica.
        """
        return pulumi.get(self, "replica_uri")

    @property
    @pulumi.getter
    def sslmode(self) -> Optional[builtins.str]:
        """
        PostgreSQL SSL mode setting.
        """
        return pulumi.get(self, "sslmode")

    @property
    @pulumi.getter(name="standbyUris")
    def standby_uris(self) -> Optional[Sequence[builtins.str]]:
        """
        PostgreSQL standby connection URIs.
        """
        return pulumi.get(self, "standby_uris")

    @property
    @pulumi.getter(name="syncingUris")
    def syncing_uris(self) -> Optional[Sequence[builtins.str]]:
        """
        PostgreSQL syncing connection URIs.
        """
        return pulumi.get(self, "syncing_uris")

    @property
    @pulumi.getter
    def uri(self) -> Optional[builtins.str]:
        """
        PostgreSQL primary connection URI.
        """
        return pulumi.get(self, "uri")

    @property
    @pulumi.getter
    def uris(self) -> Optional[Sequence[builtins.str]]:
        """
        PostgreSQL primary connection URIs.
        """
        return pulumi.get(self, "uris")

    @property
    @pulumi.getter
    def user(self) -> Optional[builtins.str]:
        """
        PostgreSQL admin user name.
        """
        return pulumi.get(self, "user")


@pulumi.output_type
class PgPgParam(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "databaseName":
            suggest = "database_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in PgPgParam. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        PgPgParam.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        PgPgParam.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 database_name: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 sslmode: Optional[builtins.str] = None,
                 user: Optional[builtins.str] = None):
        """
        :param builtins.str database_name: Primary PostgreSQL database name.
        :param builtins.str host: PostgreSQL host IP or name.
        :param builtins.str password: PostgreSQL admin user password.
        :param builtins.int port: PostgreSQL port.
        :param builtins.str sslmode: PostgreSQL SSL mode setting.
        :param builtins.str user: PostgreSQL admin user name.
        """
        if database_name is not None:
            pulumi.set(__self__, "database_name", database_name)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if sslmode is not None:
            pulumi.set(__self__, "sslmode", sslmode)
        if user is not None:
            pulumi.set(__self__, "user", user)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> Optional[builtins.str]:
        """
        Primary PostgreSQL database name.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        PostgreSQL host IP or name.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        PostgreSQL admin user password.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        PostgreSQL port.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def sslmode(self) -> Optional[builtins.str]:
        """
        PostgreSQL SSL mode setting.
        """
        return pulumi.get(self, "sslmode")

    @property
    @pulumi.getter
    def user(self) -> Optional[builtins.str]:
        """
        PostgreSQL admin user name.
        """
        return pulumi.get(self, "user")


@pulumi.output_type
class PgPgUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "additionalBackupRegions":
            suggest = "additional_backup_regions"
        elif key == "adminPassword":
            suggest = "admin_password"
        elif key == "adminUsername":
            suggest = "admin_username"
        elif key == "backupHour":
            suggest = "backup_hour"
        elif key == "backupMinute":
            suggest = "backup_minute"
        elif key == "enableIpv6":
            suggest = "enable_ipv6"
        elif key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "pgQualstats":
            suggest = "pg_qualstats"
        elif key == "pgReadReplica":
            suggest = "pg_read_replica"
        elif key == "pgServiceToForkFrom":
            suggest = "pg_service_to_fork_from"
        elif key == "pgStatMonitorEnable":
            suggest = "pg_stat_monitor_enable"
        elif key == "pgVersion":
            suggest = "pg_version"
        elif key == "privateAccess":
            suggest = "private_access"
        elif key == "privatelinkAccess":
            suggest = "privatelink_access"
        elif key == "projectToForkFrom":
            suggest = "project_to_fork_from"
        elif key == "publicAccess":
            suggest = "public_access"
        elif key == "recoveryTargetTime":
            suggest = "recovery_target_time"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "serviceToForkFrom":
            suggest = "service_to_fork_from"
        elif key == "sharedBuffersPercentage":
            suggest = "shared_buffers_percentage"
        elif key == "staticIps":
            suggest = "static_ips"
        elif key == "synchronousReplication":
            suggest = "synchronous_replication"
        elif key == "workMem":
            suggest = "work_mem"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in PgPgUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        PgPgUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        PgPgUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 admin_password: Optional[builtins.str] = None,
                 admin_username: Optional[builtins.str] = None,
                 backup_hour: Optional[builtins.int] = None,
                 backup_minute: Optional[builtins.int] = None,
                 enable_ipv6: Optional[builtins.bool] = None,
                 ip_filter_objects: Optional[Sequence['outputs.PgPgUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 migration: Optional['outputs.PgPgUserConfigMigration'] = None,
                 pg: Optional['outputs.PgPgUserConfigPg'] = None,
                 pg_qualstats: Optional['outputs.PgPgUserConfigPgQualstats'] = None,
                 pg_read_replica: Optional[builtins.bool] = None,
                 pg_service_to_fork_from: Optional[builtins.str] = None,
                 pg_stat_monitor_enable: Optional[builtins.bool] = None,
                 pg_version: Optional[builtins.str] = None,
                 pgaudit: Optional['outputs.PgPgUserConfigPgaudit'] = None,
                 pgbouncer: Optional['outputs.PgPgUserConfigPgbouncer'] = None,
                 pglookout: Optional['outputs.PgPgUserConfigPglookout'] = None,
                 private_access: Optional['outputs.PgPgUserConfigPrivateAccess'] = None,
                 privatelink_access: Optional['outputs.PgPgUserConfigPrivatelinkAccess'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.PgPgUserConfigPublicAccess'] = None,
                 recovery_target_time: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 shared_buffers_percentage: Optional[builtins.float] = None,
                 static_ips: Optional[builtins.bool] = None,
                 synchronous_replication: Optional[builtins.str] = None,
                 timescaledb: Optional['outputs.PgPgUserConfigTimescaledb'] = None,
                 variant: Optional[builtins.str] = None,
                 work_mem: Optional[builtins.int] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.str admin_password: Custom password for admin user. Defaults to random string. This must be set only when a new service is being created.
        :param builtins.str admin_username: Custom username for admin user. This must be set only when a new service is being created. Example: `avnadmin`.
        :param builtins.int backup_hour: The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        :param builtins.int backup_minute: The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        :param builtins.bool enable_ipv6: Register AAAA DNS records for the service, and allow IPv6 packets to service ports.
        :param Sequence['PgPgUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'PgPgUserConfigMigrationArgs' migration: Migrate data from existing server
        :param 'PgPgUserConfigPgArgs' pg: postgresql.conf configuration values
        :param 'PgPgUserConfigPgQualstatsArgs' pg_qualstats: System-wide settings for the pg*qualstats extension
        :param builtins.bool pg_read_replica: Should the service which is being forked be a read replica (deprecated, use read_replica service integration instead).
        :param builtins.str pg_service_to_fork_from: Name of the PG Service from which to fork (deprecated, use service*to*fork_from). This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool pg_stat_monitor_enable: Enable the pg*stat*monitor extension. Changing this parameter causes a service restart. When this extension is enabled, pg*stat*statements results for utility commands are unreliable. Default: `false`.
        :param builtins.str pg_version: Enum: `10`, `11`, `12`, `13`, `14`, `15`, `16`, `17`, and newer. PostgreSQL major version.
        :param 'PgPgUserConfigPgauditArgs' pgaudit: System-wide settings for the pgaudit extension
        :param 'PgPgUserConfigPgbouncerArgs' pgbouncer: PGBouncer connection pooling settings
        :param 'PgPgUserConfigPglookoutArgs' pglookout: System-wide settings for pglookout
        :param 'PgPgUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'PgPgUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'PgPgUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_target_time: Recovery target time when forking a service. This has effect only when a new service is being created. Example: `2019-01-01 23:34:45`.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.float shared_buffers_percentage: Percentage of total RAM that the database server uses for shared memory buffers. Valid range is 20-60 (float), which corresponds to 20% - 60%. This setting adjusts the shared_buffers configuration value. Changing this parameter causes a service restart. Example: `41.5`.
        :param builtins.bool static_ips: Use static public IP addresses.
        :param builtins.str synchronous_replication: Enum: `off`, `quorum`. Synchronous replication type. Note that the service plan also needs to support synchronous replication.
        :param 'PgPgUserConfigTimescaledbArgs' timescaledb: System-wide settings for the timescaledb extension
        :param builtins.str variant: Enum: `aiven`, `timescale`. Variant of the PostgreSQL service, may affect the features that are exposed by default.
        :param builtins.int work_mem: Sets the maximum amount of memory to be used by a query operation (such as a sort or hash table) before writing to temporary disk files, in MB. The default is 1MB + 0.075% of total RAM (up to 32MB). Example: `4`.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if admin_password is not None:
            pulumi.set(__self__, "admin_password", admin_password)
        if admin_username is not None:
            pulumi.set(__self__, "admin_username", admin_username)
        if backup_hour is not None:
            pulumi.set(__self__, "backup_hour", backup_hour)
        if backup_minute is not None:
            pulumi.set(__self__, "backup_minute", backup_minute)
        if enable_ipv6 is not None:
            pulumi.set(__self__, "enable_ipv6", enable_ipv6)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if migration is not None:
            pulumi.set(__self__, "migration", migration)
        if pg is not None:
            pulumi.set(__self__, "pg", pg)
        if pg_qualstats is not None:
            pulumi.set(__self__, "pg_qualstats", pg_qualstats)
        if pg_read_replica is not None:
            pulumi.set(__self__, "pg_read_replica", pg_read_replica)
        if pg_service_to_fork_from is not None:
            pulumi.set(__self__, "pg_service_to_fork_from", pg_service_to_fork_from)
        if pg_stat_monitor_enable is not None:
            pulumi.set(__self__, "pg_stat_monitor_enable", pg_stat_monitor_enable)
        if pg_version is not None:
            pulumi.set(__self__, "pg_version", pg_version)
        if pgaudit is not None:
            pulumi.set(__self__, "pgaudit", pgaudit)
        if pgbouncer is not None:
            pulumi.set(__self__, "pgbouncer", pgbouncer)
        if pglookout is not None:
            pulumi.set(__self__, "pglookout", pglookout)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_target_time is not None:
            pulumi.set(__self__, "recovery_target_time", recovery_target_time)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if shared_buffers_percentage is not None:
            pulumi.set(__self__, "shared_buffers_percentage", shared_buffers_percentage)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)
        if synchronous_replication is not None:
            pulumi.set(__self__, "synchronous_replication", synchronous_replication)
        if timescaledb is not None:
            pulumi.set(__self__, "timescaledb", timescaledb)
        if variant is not None:
            pulumi.set(__self__, "variant", variant)
        if work_mem is not None:
            pulumi.set(__self__, "work_mem", work_mem)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="adminPassword")
    def admin_password(self) -> Optional[builtins.str]:
        """
        Custom password for admin user. Defaults to random string. This must be set only when a new service is being created.
        """
        return pulumi.get(self, "admin_password")

    @property
    @pulumi.getter(name="adminUsername")
    def admin_username(self) -> Optional[builtins.str]:
        """
        Custom username for admin user. This must be set only when a new service is being created. Example: `avnadmin`.
        """
        return pulumi.get(self, "admin_username")

    @property
    @pulumi.getter(name="backupHour")
    def backup_hour(self) -> Optional[builtins.int]:
        """
        The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        """
        return pulumi.get(self, "backup_hour")

    @property
    @pulumi.getter(name="backupMinute")
    def backup_minute(self) -> Optional[builtins.int]:
        """
        The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        """
        return pulumi.get(self, "backup_minute")

    @property
    @pulumi.getter(name="enableIpv6")
    def enable_ipv6(self) -> Optional[builtins.bool]:
        """
        Register AAAA DNS records for the service, and allow IPv6 packets to service ports.
        """
        return pulumi.get(self, "enable_ipv6")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.PgPgUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter
    def migration(self) -> Optional['outputs.PgPgUserConfigMigration']:
        """
        Migrate data from existing server
        """
        return pulumi.get(self, "migration")

    @property
    @pulumi.getter
    def pg(self) -> Optional['outputs.PgPgUserConfigPg']:
        """
        postgresql.conf configuration values
        """
        return pulumi.get(self, "pg")

    @property
    @pulumi.getter(name="pgQualstats")
    @_utilities.deprecated("""This property is deprecated.""")
    def pg_qualstats(self) -> Optional['outputs.PgPgUserConfigPgQualstats']:
        """
        System-wide settings for the pg*qualstats extension
        """
        return pulumi.get(self, "pg_qualstats")

    @property
    @pulumi.getter(name="pgReadReplica")
    def pg_read_replica(self) -> Optional[builtins.bool]:
        """
        Should the service which is being forked be a read replica (deprecated, use read_replica service integration instead).
        """
        return pulumi.get(self, "pg_read_replica")

    @property
    @pulumi.getter(name="pgServiceToForkFrom")
    def pg_service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of the PG Service from which to fork (deprecated, use service*to*fork_from). This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "pg_service_to_fork_from")

    @property
    @pulumi.getter(name="pgStatMonitorEnable")
    def pg_stat_monitor_enable(self) -> Optional[builtins.bool]:
        """
        Enable the pg*stat*monitor extension. Changing this parameter causes a service restart. When this extension is enabled, pg*stat*statements results for utility commands are unreliable. Default: `false`.
        """
        return pulumi.get(self, "pg_stat_monitor_enable")

    @property
    @pulumi.getter(name="pgVersion")
    def pg_version(self) -> Optional[builtins.str]:
        """
        Enum: `10`, `11`, `12`, `13`, `14`, `15`, `16`, `17`, and newer. PostgreSQL major version.
        """
        return pulumi.get(self, "pg_version")

    @property
    @pulumi.getter
    def pgaudit(self) -> Optional['outputs.PgPgUserConfigPgaudit']:
        """
        System-wide settings for the pgaudit extension
        """
        return pulumi.get(self, "pgaudit")

    @property
    @pulumi.getter
    def pgbouncer(self) -> Optional['outputs.PgPgUserConfigPgbouncer']:
        """
        PGBouncer connection pooling settings
        """
        return pulumi.get(self, "pgbouncer")

    @property
    @pulumi.getter
    def pglookout(self) -> Optional['outputs.PgPgUserConfigPglookout']:
        """
        System-wide settings for pglookout
        """
        return pulumi.get(self, "pglookout")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.PgPgUserConfigPrivateAccess']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.PgPgUserConfigPrivatelinkAccess']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.PgPgUserConfigPublicAccess']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryTargetTime")
    def recovery_target_time(self) -> Optional[builtins.str]:
        """
        Recovery target time when forking a service. This has effect only when a new service is being created. Example: `2019-01-01 23:34:45`.
        """
        return pulumi.get(self, "recovery_target_time")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="sharedBuffersPercentage")
    def shared_buffers_percentage(self) -> Optional[builtins.float]:
        """
        Percentage of total RAM that the database server uses for shared memory buffers. Valid range is 20-60 (float), which corresponds to 20% - 60%. This setting adjusts the shared_buffers configuration value. Changing this parameter causes a service restart. Example: `41.5`.
        """
        return pulumi.get(self, "shared_buffers_percentage")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")

    @property
    @pulumi.getter(name="synchronousReplication")
    def synchronous_replication(self) -> Optional[builtins.str]:
        """
        Enum: `off`, `quorum`. Synchronous replication type. Note that the service plan also needs to support synchronous replication.
        """
        return pulumi.get(self, "synchronous_replication")

    @property
    @pulumi.getter
    def timescaledb(self) -> Optional['outputs.PgPgUserConfigTimescaledb']:
        """
        System-wide settings for the timescaledb extension
        """
        return pulumi.get(self, "timescaledb")

    @property
    @pulumi.getter
    def variant(self) -> Optional[builtins.str]:
        """
        Enum: `aiven`, `timescale`. Variant of the PostgreSQL service, may affect the features that are exposed by default.
        """
        return pulumi.get(self, "variant")

    @property
    @pulumi.getter(name="workMem")
    def work_mem(self) -> Optional[builtins.int]:
        """
        Sets the maximum amount of memory to be used by a query operation (such as a sort or hash table) before writing to temporary disk files, in MB. The default is 1MB + 0.075% of total RAM (up to 32MB). Example: `4`.
        """
        return pulumi.get(self, "work_mem")


@pulumi.output_type
class PgPgUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class PgPgUserConfigMigration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "ignoreDbs":
            suggest = "ignore_dbs"
        elif key == "ignoreRoles":
            suggest = "ignore_roles"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in PgPgUserConfigMigration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        PgPgUserConfigMigration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        PgPgUserConfigMigration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 host: builtins.str,
                 port: builtins.int,
                 dbname: Optional[builtins.str] = None,
                 ignore_dbs: Optional[builtins.str] = None,
                 ignore_roles: Optional[builtins.str] = None,
                 method: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 username: Optional[builtins.str] = None):
        """
        :param builtins.str host: Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        :param builtins.int port: Port number of the server where to migrate data from. Example: `1234`.
        :param builtins.str dbname: Database name for bootstrapping the initial connection. Example: `defaultdb`.
        :param builtins.str ignore_dbs: Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        :param builtins.str ignore_roles: Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        :param builtins.str method: Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        :param builtins.str password: Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        :param builtins.bool ssl: The server where to migrate data from is secured with SSL. Default: `true`.
        :param builtins.str username: User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "port", port)
        if dbname is not None:
            pulumi.set(__self__, "dbname", dbname)
        if ignore_dbs is not None:
            pulumi.set(__self__, "ignore_dbs", ignore_dbs)
        if ignore_roles is not None:
            pulumi.set(__self__, "ignore_roles", ignore_roles)
        if method is not None:
            pulumi.set(__self__, "method", method)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number of the server where to migrate data from. Example: `1234`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def dbname(self) -> Optional[builtins.str]:
        """
        Database name for bootstrapping the initial connection. Example: `defaultdb`.
        """
        return pulumi.get(self, "dbname")

    @property
    @pulumi.getter(name="ignoreDbs")
    def ignore_dbs(self) -> Optional[builtins.str]:
        """
        Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        """
        return pulumi.get(self, "ignore_dbs")

    @property
    @pulumi.getter(name="ignoreRoles")
    def ignore_roles(self) -> Optional[builtins.str]:
        """
        Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        """
        return pulumi.get(self, "ignore_roles")

    @property
    @pulumi.getter
    def method(self) -> Optional[builtins.str]:
        """
        Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        """
        return pulumi.get(self, "method")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        The server where to migrate data from is secured with SSL. Default: `true`.
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def username(self) -> Optional[builtins.str]:
        """
        User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class PgPgUserConfigPg(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "autovacuumAnalyzeScaleFactor":
            suggest = "autovacuum_analyze_scale_factor"
        elif key == "autovacuumAnalyzeThreshold":
            suggest = "autovacuum_analyze_threshold"
        elif key == "autovacuumFreezeMaxAge":
            suggest = "autovacuum_freeze_max_age"
        elif key == "autovacuumMaxWorkers":
            suggest = "autovacuum_max_workers"
        elif key == "autovacuumNaptime":
            suggest = "autovacuum_naptime"
        elif key == "autovacuumVacuumCostDelay":
            suggest = "autovacuum_vacuum_cost_delay"
        elif key == "autovacuumVacuumCostLimit":
            suggest = "autovacuum_vacuum_cost_limit"
        elif key == "autovacuumVacuumScaleFactor":
            suggest = "autovacuum_vacuum_scale_factor"
        elif key == "autovacuumVacuumThreshold":
            suggest = "autovacuum_vacuum_threshold"
        elif key == "bgwriterDelay":
            suggest = "bgwriter_delay"
        elif key == "bgwriterFlushAfter":
            suggest = "bgwriter_flush_after"
        elif key == "bgwriterLruMaxpages":
            suggest = "bgwriter_lru_maxpages"
        elif key == "bgwriterLruMultiplier":
            suggest = "bgwriter_lru_multiplier"
        elif key == "deadlockTimeout":
            suggest = "deadlock_timeout"
        elif key == "defaultToastCompression":
            suggest = "default_toast_compression"
        elif key == "idleInTransactionSessionTimeout":
            suggest = "idle_in_transaction_session_timeout"
        elif key == "logAutovacuumMinDuration":
            suggest = "log_autovacuum_min_duration"
        elif key == "logErrorVerbosity":
            suggest = "log_error_verbosity"
        elif key == "logLinePrefix":
            suggest = "log_line_prefix"
        elif key == "logMinDurationStatement":
            suggest = "log_min_duration_statement"
        elif key == "logTempFiles":
            suggest = "log_temp_files"
        elif key == "maxFilesPerProcess":
            suggest = "max_files_per_process"
        elif key == "maxLocksPerTransaction":
            suggest = "max_locks_per_transaction"
        elif key == "maxLogicalReplicationWorkers":
            suggest = "max_logical_replication_workers"
        elif key == "maxParallelWorkers":
            suggest = "max_parallel_workers"
        elif key == "maxParallelWorkersPerGather":
            suggest = "max_parallel_workers_per_gather"
        elif key == "maxPredLocksPerTransaction":
            suggest = "max_pred_locks_per_transaction"
        elif key == "maxPreparedTransactions":
            suggest = "max_prepared_transactions"
        elif key == "maxReplicationSlots":
            suggest = "max_replication_slots"
        elif key == "maxSlotWalKeepSize":
            suggest = "max_slot_wal_keep_size"
        elif key == "maxStackDepth":
            suggest = "max_stack_depth"
        elif key == "maxStandbyArchiveDelay":
            suggest = "max_standby_archive_delay"
        elif key == "maxStandbyStreamingDelay":
            suggest = "max_standby_streaming_delay"
        elif key == "maxWalSenders":
            suggest = "max_wal_senders"
        elif key == "maxWorkerProcesses":
            suggest = "max_worker_processes"
        elif key == "passwordEncryption":
            suggest = "password_encryption"
        elif key == "pgPartmanBgwDotInterval":
            suggest = "pg_partman_bgw_dot_interval"
        elif key == "pgPartmanBgwDotRole":
            suggest = "pg_partman_bgw_dot_role"
        elif key == "pgStatMonitorDotPgsmEnableQueryPlan":
            suggest = "pg_stat_monitor_dot_pgsm_enable_query_plan"
        elif key == "pgStatMonitorDotPgsmMaxBuckets":
            suggest = "pg_stat_monitor_dot_pgsm_max_buckets"
        elif key == "pgStatStatementsDotTrack":
            suggest = "pg_stat_statements_dot_track"
        elif key == "tempFileLimit":
            suggest = "temp_file_limit"
        elif key == "trackActivityQuerySize":
            suggest = "track_activity_query_size"
        elif key == "trackCommitTimestamp":
            suggest = "track_commit_timestamp"
        elif key == "trackFunctions":
            suggest = "track_functions"
        elif key == "trackIoTiming":
            suggest = "track_io_timing"
        elif key == "walSenderTimeout":
            suggest = "wal_sender_timeout"
        elif key == "walWriterDelay":
            suggest = "wal_writer_delay"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in PgPgUserConfigPg. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        PgPgUserConfigPg.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        PgPgUserConfigPg.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 autovacuum_analyze_scale_factor: Optional[builtins.float] = None,
                 autovacuum_analyze_threshold: Optional[builtins.int] = None,
                 autovacuum_freeze_max_age: Optional[builtins.int] = None,
                 autovacuum_max_workers: Optional[builtins.int] = None,
                 autovacuum_naptime: Optional[builtins.int] = None,
                 autovacuum_vacuum_cost_delay: Optional[builtins.int] = None,
                 autovacuum_vacuum_cost_limit: Optional[builtins.int] = None,
                 autovacuum_vacuum_scale_factor: Optional[builtins.float] = None,
                 autovacuum_vacuum_threshold: Optional[builtins.int] = None,
                 bgwriter_delay: Optional[builtins.int] = None,
                 bgwriter_flush_after: Optional[builtins.int] = None,
                 bgwriter_lru_maxpages: Optional[builtins.int] = None,
                 bgwriter_lru_multiplier: Optional[builtins.float] = None,
                 deadlock_timeout: Optional[builtins.int] = None,
                 default_toast_compression: Optional[builtins.str] = None,
                 idle_in_transaction_session_timeout: Optional[builtins.int] = None,
                 jit: Optional[builtins.bool] = None,
                 log_autovacuum_min_duration: Optional[builtins.int] = None,
                 log_error_verbosity: Optional[builtins.str] = None,
                 log_line_prefix: Optional[builtins.str] = None,
                 log_min_duration_statement: Optional[builtins.int] = None,
                 log_temp_files: Optional[builtins.int] = None,
                 max_files_per_process: Optional[builtins.int] = None,
                 max_locks_per_transaction: Optional[builtins.int] = None,
                 max_logical_replication_workers: Optional[builtins.int] = None,
                 max_parallel_workers: Optional[builtins.int] = None,
                 max_parallel_workers_per_gather: Optional[builtins.int] = None,
                 max_pred_locks_per_transaction: Optional[builtins.int] = None,
                 max_prepared_transactions: Optional[builtins.int] = None,
                 max_replication_slots: Optional[builtins.int] = None,
                 max_slot_wal_keep_size: Optional[builtins.int] = None,
                 max_stack_depth: Optional[builtins.int] = None,
                 max_standby_archive_delay: Optional[builtins.int] = None,
                 max_standby_streaming_delay: Optional[builtins.int] = None,
                 max_wal_senders: Optional[builtins.int] = None,
                 max_worker_processes: Optional[builtins.int] = None,
                 password_encryption: Optional[builtins.str] = None,
                 pg_partman_bgw_dot_interval: Optional[builtins.int] = None,
                 pg_partman_bgw_dot_role: Optional[builtins.str] = None,
                 pg_stat_monitor_dot_pgsm_enable_query_plan: Optional[builtins.bool] = None,
                 pg_stat_monitor_dot_pgsm_max_buckets: Optional[builtins.int] = None,
                 pg_stat_statements_dot_track: Optional[builtins.str] = None,
                 temp_file_limit: Optional[builtins.int] = None,
                 timezone: Optional[builtins.str] = None,
                 track_activity_query_size: Optional[builtins.int] = None,
                 track_commit_timestamp: Optional[builtins.str] = None,
                 track_functions: Optional[builtins.str] = None,
                 track_io_timing: Optional[builtins.str] = None,
                 wal_sender_timeout: Optional[builtins.int] = None,
                 wal_writer_delay: Optional[builtins.int] = None):
        """
        :param builtins.float autovacuum_analyze_scale_factor: Specifies a fraction of the table size to add to autovacuum*analyze*threshold when deciding whether to trigger an ANALYZE (e.g. `0.2` for 20% of the table size). The default is `0.2`.
        :param builtins.int autovacuum_analyze_threshold: Specifies the minimum number of inserted, updated or deleted tuples needed to trigger an ANALYZE in any one table. The default is `50`.
        :param builtins.int autovacuum_freeze_max_age: Specifies the maximum age (in transactions) that a table's pg_class.relfrozenxid field can attain before a VACUUM operation is forced to prevent transaction ID wraparound within the table. The system launches autovacuum processes to prevent wraparound even when autovacuum is otherwise disabled. Changing this parameter causes a service restart. Example: `200000000`.
        :param builtins.int autovacuum_max_workers: Specifies the maximum number of autovacuum processes (other than the autovacuum launcher) that may be running at any one time. The default is `3`. Changing this parameter causes a service restart.
        :param builtins.int autovacuum_naptime: Specifies the minimum delay between autovacuum runs on any given database. The delay is measured in seconds. The default is `60`.
        :param builtins.int autovacuum_vacuum_cost_delay: Specifies the cost delay value that will be used in automatic VACUUM operations. If `-1` is specified, the regular vacuum*cost*delay value will be used. The default is `2` (upstream default).
        :param builtins.int autovacuum_vacuum_cost_limit: Specifies the cost limit value that will be used in automatic VACUUM operations. If `-1` is specified, the regular vacuum*cost*limit value will be used. The default is `-1` (upstream default).
        :param builtins.float autovacuum_vacuum_scale_factor: Specifies a fraction of the table size to add to autovacuum*vacuum*threshold when deciding whether to trigger a VACUUM (e.g. `0.2` for 20% of the table size). The default is `0.2`.
        :param builtins.int autovacuum_vacuum_threshold: Specifies the minimum number of updated or deleted tuples needed to trigger a VACUUM in any one table. The default is `50`.
        :param builtins.int bgwriter_delay: Specifies the delay between activity rounds for the background writer in milliseconds. The default is `200`. Example: `200`.
        :param builtins.int bgwriter_flush_after: Whenever more than bgwriter*flush*after bytes have been written by the background writer, attempt to force the OS to issue these writes to the underlying storage. Specified in kilobytes. Setting of 0 disables forced writeback. The default is `512`. Example: `512`.
        :param builtins.int bgwriter_lru_maxpages: In each round, no more than this many buffers will be written by the background writer. Setting this to zero disables background writing. The default is `100`. Example: `100`.
        :param builtins.float bgwriter_lru_multiplier: The average recent need for new buffers is multiplied by bgwriter*lru*multiplier to arrive at an estimate of the number that will be needed during the next round, (up to bgwriter*lru*maxpages). 1.0 represents a “just in time” policy of writing exactly the number of buffers predicted to be needed. Larger values provide some cushion against spikes in demand, while smaller values intentionally leave writes to be done by server processes. The default is `2.0`. Example: `2.0`.
        :param builtins.int deadlock_timeout: This is the amount of time, in milliseconds, to wait on a lock before checking to see if there is a deadlock condition. The default is `1000` (upstream default). Example: `1000`.
        :param builtins.str default_toast_compression: Enum: `lz4`, `pglz`. Specifies the default TOAST compression method for values of compressible columns. The default is `lz4`. Only available for PostgreSQL 14+.
        :param builtins.int idle_in_transaction_session_timeout: Time out sessions with open transactions after this number of milliseconds.
        :param builtins.bool jit: Controls system-wide use of Just-in-Time Compilation (JIT).
        :param builtins.int log_autovacuum_min_duration: Causes each action executed by autovacuum to be logged if it ran for at least the specified number of milliseconds. Setting this to zero logs all autovacuum actions. Minus-one disables logging autovacuum actions. The default is `1000`.
        :param builtins.str log_error_verbosity: Enum: `DEFAULT`, `TERSE`, `VERBOSE`. Controls the amount of detail written in the server log for each message that is logged.
        :param builtins.str log_line_prefix: Enum: `'%m [%p] %q[user=%u,db=%d,app=%a] '`, `'%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '`, `'pid=%p,user=%u,db=%d,app=%a,client=%h '`, `'pid=%p,user=%u,db=%d,app=%a,client=%h,txid=%x,qid=%Q '`. Choose from one of the available log formats.
        :param builtins.int log_min_duration_statement: Log statements that take more than this number of milliseconds to run, -1 disables.
        :param builtins.int log_temp_files: Log statements for each temporary file created larger than this number of kilobytes, -1 disables.
        :param builtins.int max_files_per_process: PostgreSQL maximum number of files that can be open per process. The default is `1000` (upstream default). Changing this parameter causes a service restart.
        :param builtins.int max_locks_per_transaction: PostgreSQL maximum locks per transaction. Changing this parameter causes a service restart.
        :param builtins.int max_logical_replication_workers: PostgreSQL maximum logical replication workers (taken from the pool of max*parallel*workers). The default is `4` (upstream default). Changing this parameter causes a service restart.
        :param builtins.int max_parallel_workers: Sets the maximum number of workers that the system can support for parallel queries. The default is `8` (upstream default).
        :param builtins.int max_parallel_workers_per_gather: Sets the maximum number of workers that can be started by a single Gather or Gather Merge node. The default is `2` (upstream default).
        :param builtins.int max_pred_locks_per_transaction: PostgreSQL maximum predicate locks per transaction. The default is `64` (upstream default). Changing this parameter causes a service restart.
        :param builtins.int max_prepared_transactions: PostgreSQL maximum prepared transactions. The default is `0`. Changing this parameter causes a service restart.
        :param builtins.int max_replication_slots: PostgreSQL maximum replication slots. The default is `20`. Changing this parameter causes a service restart.
        :param builtins.int max_slot_wal_keep_size: PostgreSQL maximum WAL size (MB) reserved for replication slots. If `-1` is specified, replication slots may retain an unlimited amount of WAL files. The default is `-1` (upstream default). wal*keep*size minimum WAL size setting takes precedence over this.
        :param builtins.int max_stack_depth: Maximum depth of the stack in bytes. The default is `2097152` (upstream default).
        :param builtins.int max_standby_archive_delay: Max standby archive delay in milliseconds. The default is `30000` (upstream default).
        :param builtins.int max_standby_streaming_delay: Max standby streaming delay in milliseconds. The default is `30000` (upstream default).
        :param builtins.int max_wal_senders: PostgreSQL maximum WAL senders. The default is `20`. Changing this parameter causes a service restart.
        :param builtins.int max_worker_processes: Sets the maximum number of background processes that the system can support. The default is `8`. Changing this parameter causes a service restart.
        :param builtins.str password_encryption: Enum: `md5`, `scram-sha-256`. Chooses the algorithm for encrypting passwords. Default: `md5`.
        :param builtins.int pg_partman_bgw_dot_interval: Sets the time interval in seconds to run pg_partman's scheduled tasks. The default is `3600`. Example: `3600`.
        :param builtins.str pg_partman_bgw_dot_role: Controls which role to use for pg_partman's scheduled background tasks. Example: `myrolename`.
        :param builtins.bool pg_stat_monitor_dot_pgsm_enable_query_plan: Enables or disables query plan monitoring. Changing this parameter causes a service restart. Only available for PostgreSQL 13+.
        :param builtins.int pg_stat_monitor_dot_pgsm_max_buckets: Sets the maximum number of buckets. Changing this parameter causes a service restart. Only available for PostgreSQL 13+. Example: `10`.
        :param builtins.str pg_stat_statements_dot_track: Enum: `all`, `none`, `top`. Controls which statements are counted. Specify top to track top-level statements (those issued directly by clients), all to also track nested statements (such as statements invoked within functions), or none to disable statement statistics collection. The default is `top`.
        :param builtins.int temp_file_limit: PostgreSQL temporary file limit in KiB, -1 for unlimited. Example: `5000000`.
        :param builtins.str timezone: PostgreSQL service timezone. Example: `Europe/Helsinki`.
        :param builtins.int track_activity_query_size: Specifies the number of bytes reserved to track the currently executing command for each active session. Changing this parameter causes a service restart. Example: `1024`.
        :param builtins.str track_commit_timestamp: Enum: `off`, `on`. Record commit time of transactions. Changing this parameter causes a service restart.
        :param builtins.str track_functions: Enum: `all`, `none`, `pl`. Enables tracking of function call counts and time used.
        :param builtins.str track_io_timing: Enum: `off`, `on`. Enables timing of database I/O calls. The default is `off`. When on, it will repeatedly query the operating system for the current time, which may cause significant overhead on some platforms.
        :param builtins.int wal_sender_timeout: Terminate replication connections that are inactive for longer than this amount of time, in milliseconds. Setting this value to zero disables the timeout. Example: `60000`.
        :param builtins.int wal_writer_delay: WAL flush interval in milliseconds. The default is `200`. Setting this parameter to a lower value may negatively impact performance. Example: `50`.
        """
        if autovacuum_analyze_scale_factor is not None:
            pulumi.set(__self__, "autovacuum_analyze_scale_factor", autovacuum_analyze_scale_factor)
        if autovacuum_analyze_threshold is not None:
            pulumi.set(__self__, "autovacuum_analyze_threshold", autovacuum_analyze_threshold)
        if autovacuum_freeze_max_age is not None:
            pulumi.set(__self__, "autovacuum_freeze_max_age", autovacuum_freeze_max_age)
        if autovacuum_max_workers is not None:
            pulumi.set(__self__, "autovacuum_max_workers", autovacuum_max_workers)
        if autovacuum_naptime is not None:
            pulumi.set(__self__, "autovacuum_naptime", autovacuum_naptime)
        if autovacuum_vacuum_cost_delay is not None:
            pulumi.set(__self__, "autovacuum_vacuum_cost_delay", autovacuum_vacuum_cost_delay)
        if autovacuum_vacuum_cost_limit is not None:
            pulumi.set(__self__, "autovacuum_vacuum_cost_limit", autovacuum_vacuum_cost_limit)
        if autovacuum_vacuum_scale_factor is not None:
            pulumi.set(__self__, "autovacuum_vacuum_scale_factor", autovacuum_vacuum_scale_factor)
        if autovacuum_vacuum_threshold is not None:
            pulumi.set(__self__, "autovacuum_vacuum_threshold", autovacuum_vacuum_threshold)
        if bgwriter_delay is not None:
            pulumi.set(__self__, "bgwriter_delay", bgwriter_delay)
        if bgwriter_flush_after is not None:
            pulumi.set(__self__, "bgwriter_flush_after", bgwriter_flush_after)
        if bgwriter_lru_maxpages is not None:
            pulumi.set(__self__, "bgwriter_lru_maxpages", bgwriter_lru_maxpages)
        if bgwriter_lru_multiplier is not None:
            pulumi.set(__self__, "bgwriter_lru_multiplier", bgwriter_lru_multiplier)
        if deadlock_timeout is not None:
            pulumi.set(__self__, "deadlock_timeout", deadlock_timeout)
        if default_toast_compression is not None:
            pulumi.set(__self__, "default_toast_compression", default_toast_compression)
        if idle_in_transaction_session_timeout is not None:
            pulumi.set(__self__, "idle_in_transaction_session_timeout", idle_in_transaction_session_timeout)
        if jit is not None:
            pulumi.set(__self__, "jit", jit)
        if log_autovacuum_min_duration is not None:
            pulumi.set(__self__, "log_autovacuum_min_duration", log_autovacuum_min_duration)
        if log_error_verbosity is not None:
            pulumi.set(__self__, "log_error_verbosity", log_error_verbosity)
        if log_line_prefix is not None:
            pulumi.set(__self__, "log_line_prefix", log_line_prefix)
        if log_min_duration_statement is not None:
            pulumi.set(__self__, "log_min_duration_statement", log_min_duration_statement)
        if log_temp_files is not None:
            pulumi.set(__self__, "log_temp_files", log_temp_files)
        if max_files_per_process is not None:
            pulumi.set(__self__, "max_files_per_process", max_files_per_process)
        if max_locks_per_transaction is not None:
            pulumi.set(__self__, "max_locks_per_transaction", max_locks_per_transaction)
        if max_logical_replication_workers is not None:
            pulumi.set(__self__, "max_logical_replication_workers", max_logical_replication_workers)
        if max_parallel_workers is not None:
            pulumi.set(__self__, "max_parallel_workers", max_parallel_workers)
        if max_parallel_workers_per_gather is not None:
            pulumi.set(__self__, "max_parallel_workers_per_gather", max_parallel_workers_per_gather)
        if max_pred_locks_per_transaction is not None:
            pulumi.set(__self__, "max_pred_locks_per_transaction", max_pred_locks_per_transaction)
        if max_prepared_transactions is not None:
            pulumi.set(__self__, "max_prepared_transactions", max_prepared_transactions)
        if max_replication_slots is not None:
            pulumi.set(__self__, "max_replication_slots", max_replication_slots)
        if max_slot_wal_keep_size is not None:
            pulumi.set(__self__, "max_slot_wal_keep_size", max_slot_wal_keep_size)
        if max_stack_depth is not None:
            pulumi.set(__self__, "max_stack_depth", max_stack_depth)
        if max_standby_archive_delay is not None:
            pulumi.set(__self__, "max_standby_archive_delay", max_standby_archive_delay)
        if max_standby_streaming_delay is not None:
            pulumi.set(__self__, "max_standby_streaming_delay", max_standby_streaming_delay)
        if max_wal_senders is not None:
            pulumi.set(__self__, "max_wal_senders", max_wal_senders)
        if max_worker_processes is not None:
            pulumi.set(__self__, "max_worker_processes", max_worker_processes)
        if password_encryption is not None:
            pulumi.set(__self__, "password_encryption", password_encryption)
        if pg_partman_bgw_dot_interval is not None:
            pulumi.set(__self__, "pg_partman_bgw_dot_interval", pg_partman_bgw_dot_interval)
        if pg_partman_bgw_dot_role is not None:
            pulumi.set(__self__, "pg_partman_bgw_dot_role", pg_partman_bgw_dot_role)
        if pg_stat_monitor_dot_pgsm_enable_query_plan is not None:
            pulumi.set(__self__, "pg_stat_monitor_dot_pgsm_enable_query_plan", pg_stat_monitor_dot_pgsm_enable_query_plan)
        if pg_stat_monitor_dot_pgsm_max_buckets is not None:
            pulumi.set(__self__, "pg_stat_monitor_dot_pgsm_max_buckets", pg_stat_monitor_dot_pgsm_max_buckets)
        if pg_stat_statements_dot_track is not None:
            pulumi.set(__self__, "pg_stat_statements_dot_track", pg_stat_statements_dot_track)
        if temp_file_limit is not None:
            pulumi.set(__self__, "temp_file_limit", temp_file_limit)
        if timezone is not None:
            pulumi.set(__self__, "timezone", timezone)
        if track_activity_query_size is not None:
            pulumi.set(__self__, "track_activity_query_size", track_activity_query_size)
        if track_commit_timestamp is not None:
            pulumi.set(__self__, "track_commit_timestamp", track_commit_timestamp)
        if track_functions is not None:
            pulumi.set(__self__, "track_functions", track_functions)
        if track_io_timing is not None:
            pulumi.set(__self__, "track_io_timing", track_io_timing)
        if wal_sender_timeout is not None:
            pulumi.set(__self__, "wal_sender_timeout", wal_sender_timeout)
        if wal_writer_delay is not None:
            pulumi.set(__self__, "wal_writer_delay", wal_writer_delay)

    @property
    @pulumi.getter(name="autovacuumAnalyzeScaleFactor")
    def autovacuum_analyze_scale_factor(self) -> Optional[builtins.float]:
        """
        Specifies a fraction of the table size to add to autovacuum*analyze*threshold when deciding whether to trigger an ANALYZE (e.g. `0.2` for 20% of the table size). The default is `0.2`.
        """
        return pulumi.get(self, "autovacuum_analyze_scale_factor")

    @property
    @pulumi.getter(name="autovacuumAnalyzeThreshold")
    def autovacuum_analyze_threshold(self) -> Optional[builtins.int]:
        """
        Specifies the minimum number of inserted, updated or deleted tuples needed to trigger an ANALYZE in any one table. The default is `50`.
        """
        return pulumi.get(self, "autovacuum_analyze_threshold")

    @property
    @pulumi.getter(name="autovacuumFreezeMaxAge")
    def autovacuum_freeze_max_age(self) -> Optional[builtins.int]:
        """
        Specifies the maximum age (in transactions) that a table's pg_class.relfrozenxid field can attain before a VACUUM operation is forced to prevent transaction ID wraparound within the table. The system launches autovacuum processes to prevent wraparound even when autovacuum is otherwise disabled. Changing this parameter causes a service restart. Example: `200000000`.
        """
        return pulumi.get(self, "autovacuum_freeze_max_age")

    @property
    @pulumi.getter(name="autovacuumMaxWorkers")
    def autovacuum_max_workers(self) -> Optional[builtins.int]:
        """
        Specifies the maximum number of autovacuum processes (other than the autovacuum launcher) that may be running at any one time. The default is `3`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "autovacuum_max_workers")

    @property
    @pulumi.getter(name="autovacuumNaptime")
    def autovacuum_naptime(self) -> Optional[builtins.int]:
        """
        Specifies the minimum delay between autovacuum runs on any given database. The delay is measured in seconds. The default is `60`.
        """
        return pulumi.get(self, "autovacuum_naptime")

    @property
    @pulumi.getter(name="autovacuumVacuumCostDelay")
    def autovacuum_vacuum_cost_delay(self) -> Optional[builtins.int]:
        """
        Specifies the cost delay value that will be used in automatic VACUUM operations. If `-1` is specified, the regular vacuum*cost*delay value will be used. The default is `2` (upstream default).
        """
        return pulumi.get(self, "autovacuum_vacuum_cost_delay")

    @property
    @pulumi.getter(name="autovacuumVacuumCostLimit")
    def autovacuum_vacuum_cost_limit(self) -> Optional[builtins.int]:
        """
        Specifies the cost limit value that will be used in automatic VACUUM operations. If `-1` is specified, the regular vacuum*cost*limit value will be used. The default is `-1` (upstream default).
        """
        return pulumi.get(self, "autovacuum_vacuum_cost_limit")

    @property
    @pulumi.getter(name="autovacuumVacuumScaleFactor")
    def autovacuum_vacuum_scale_factor(self) -> Optional[builtins.float]:
        """
        Specifies a fraction of the table size to add to autovacuum*vacuum*threshold when deciding whether to trigger a VACUUM (e.g. `0.2` for 20% of the table size). The default is `0.2`.
        """
        return pulumi.get(self, "autovacuum_vacuum_scale_factor")

    @property
    @pulumi.getter(name="autovacuumVacuumThreshold")
    def autovacuum_vacuum_threshold(self) -> Optional[builtins.int]:
        """
        Specifies the minimum number of updated or deleted tuples needed to trigger a VACUUM in any one table. The default is `50`.
        """
        return pulumi.get(self, "autovacuum_vacuum_threshold")

    @property
    @pulumi.getter(name="bgwriterDelay")
    def bgwriter_delay(self) -> Optional[builtins.int]:
        """
        Specifies the delay between activity rounds for the background writer in milliseconds. The default is `200`. Example: `200`.
        """
        return pulumi.get(self, "bgwriter_delay")

    @property
    @pulumi.getter(name="bgwriterFlushAfter")
    def bgwriter_flush_after(self) -> Optional[builtins.int]:
        """
        Whenever more than bgwriter*flush*after bytes have been written by the background writer, attempt to force the OS to issue these writes to the underlying storage. Specified in kilobytes. Setting of 0 disables forced writeback. The default is `512`. Example: `512`.
        """
        return pulumi.get(self, "bgwriter_flush_after")

    @property
    @pulumi.getter(name="bgwriterLruMaxpages")
    def bgwriter_lru_maxpages(self) -> Optional[builtins.int]:
        """
        In each round, no more than this many buffers will be written by the background writer. Setting this to zero disables background writing. The default is `100`. Example: `100`.
        """
        return pulumi.get(self, "bgwriter_lru_maxpages")

    @property
    @pulumi.getter(name="bgwriterLruMultiplier")
    def bgwriter_lru_multiplier(self) -> Optional[builtins.float]:
        """
        The average recent need for new buffers is multiplied by bgwriter*lru*multiplier to arrive at an estimate of the number that will be needed during the next round, (up to bgwriter*lru*maxpages). 1.0 represents a “just in time” policy of writing exactly the number of buffers predicted to be needed. Larger values provide some cushion against spikes in demand, while smaller values intentionally leave writes to be done by server processes. The default is `2.0`. Example: `2.0`.
        """
        return pulumi.get(self, "bgwriter_lru_multiplier")

    @property
    @pulumi.getter(name="deadlockTimeout")
    def deadlock_timeout(self) -> Optional[builtins.int]:
        """
        This is the amount of time, in milliseconds, to wait on a lock before checking to see if there is a deadlock condition. The default is `1000` (upstream default). Example: `1000`.
        """
        return pulumi.get(self, "deadlock_timeout")

    @property
    @pulumi.getter(name="defaultToastCompression")
    def default_toast_compression(self) -> Optional[builtins.str]:
        """
        Enum: `lz4`, `pglz`. Specifies the default TOAST compression method for values of compressible columns. The default is `lz4`. Only available for PostgreSQL 14+.
        """
        return pulumi.get(self, "default_toast_compression")

    @property
    @pulumi.getter(name="idleInTransactionSessionTimeout")
    def idle_in_transaction_session_timeout(self) -> Optional[builtins.int]:
        """
        Time out sessions with open transactions after this number of milliseconds.
        """
        return pulumi.get(self, "idle_in_transaction_session_timeout")

    @property
    @pulumi.getter
    def jit(self) -> Optional[builtins.bool]:
        """
        Controls system-wide use of Just-in-Time Compilation (JIT).
        """
        return pulumi.get(self, "jit")

    @property
    @pulumi.getter(name="logAutovacuumMinDuration")
    def log_autovacuum_min_duration(self) -> Optional[builtins.int]:
        """
        Causes each action executed by autovacuum to be logged if it ran for at least the specified number of milliseconds. Setting this to zero logs all autovacuum actions. Minus-one disables logging autovacuum actions. The default is `1000`.
        """
        return pulumi.get(self, "log_autovacuum_min_duration")

    @property
    @pulumi.getter(name="logErrorVerbosity")
    def log_error_verbosity(self) -> Optional[builtins.str]:
        """
        Enum: `DEFAULT`, `TERSE`, `VERBOSE`. Controls the amount of detail written in the server log for each message that is logged.
        """
        return pulumi.get(self, "log_error_verbosity")

    @property
    @pulumi.getter(name="logLinePrefix")
    def log_line_prefix(self) -> Optional[builtins.str]:
        """
        Enum: `'%m [%p] %q[user=%u,db=%d,app=%a] '`, `'%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '`, `'pid=%p,user=%u,db=%d,app=%a,client=%h '`, `'pid=%p,user=%u,db=%d,app=%a,client=%h,txid=%x,qid=%Q '`. Choose from one of the available log formats.
        """
        return pulumi.get(self, "log_line_prefix")

    @property
    @pulumi.getter(name="logMinDurationStatement")
    def log_min_duration_statement(self) -> Optional[builtins.int]:
        """
        Log statements that take more than this number of milliseconds to run, -1 disables.
        """
        return pulumi.get(self, "log_min_duration_statement")

    @property
    @pulumi.getter(name="logTempFiles")
    def log_temp_files(self) -> Optional[builtins.int]:
        """
        Log statements for each temporary file created larger than this number of kilobytes, -1 disables.
        """
        return pulumi.get(self, "log_temp_files")

    @property
    @pulumi.getter(name="maxFilesPerProcess")
    def max_files_per_process(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum number of files that can be open per process. The default is `1000` (upstream default). Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_files_per_process")

    @property
    @pulumi.getter(name="maxLocksPerTransaction")
    def max_locks_per_transaction(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum locks per transaction. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_locks_per_transaction")

    @property
    @pulumi.getter(name="maxLogicalReplicationWorkers")
    def max_logical_replication_workers(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum logical replication workers (taken from the pool of max*parallel*workers). The default is `4` (upstream default). Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_logical_replication_workers")

    @property
    @pulumi.getter(name="maxParallelWorkers")
    def max_parallel_workers(self) -> Optional[builtins.int]:
        """
        Sets the maximum number of workers that the system can support for parallel queries. The default is `8` (upstream default).
        """
        return pulumi.get(self, "max_parallel_workers")

    @property
    @pulumi.getter(name="maxParallelWorkersPerGather")
    def max_parallel_workers_per_gather(self) -> Optional[builtins.int]:
        """
        Sets the maximum number of workers that can be started by a single Gather or Gather Merge node. The default is `2` (upstream default).
        """
        return pulumi.get(self, "max_parallel_workers_per_gather")

    @property
    @pulumi.getter(name="maxPredLocksPerTransaction")
    def max_pred_locks_per_transaction(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum predicate locks per transaction. The default is `64` (upstream default). Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_pred_locks_per_transaction")

    @property
    @pulumi.getter(name="maxPreparedTransactions")
    def max_prepared_transactions(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum prepared transactions. The default is `0`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_prepared_transactions")

    @property
    @pulumi.getter(name="maxReplicationSlots")
    def max_replication_slots(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum replication slots. The default is `20`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_replication_slots")

    @property
    @pulumi.getter(name="maxSlotWalKeepSize")
    def max_slot_wal_keep_size(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum WAL size (MB) reserved for replication slots. If `-1` is specified, replication slots may retain an unlimited amount of WAL files. The default is `-1` (upstream default). wal*keep*size minimum WAL size setting takes precedence over this.
        """
        return pulumi.get(self, "max_slot_wal_keep_size")

    @property
    @pulumi.getter(name="maxStackDepth")
    def max_stack_depth(self) -> Optional[builtins.int]:
        """
        Maximum depth of the stack in bytes. The default is `2097152` (upstream default).
        """
        return pulumi.get(self, "max_stack_depth")

    @property
    @pulumi.getter(name="maxStandbyArchiveDelay")
    def max_standby_archive_delay(self) -> Optional[builtins.int]:
        """
        Max standby archive delay in milliseconds. The default is `30000` (upstream default).
        """
        return pulumi.get(self, "max_standby_archive_delay")

    @property
    @pulumi.getter(name="maxStandbyStreamingDelay")
    def max_standby_streaming_delay(self) -> Optional[builtins.int]:
        """
        Max standby streaming delay in milliseconds. The default is `30000` (upstream default).
        """
        return pulumi.get(self, "max_standby_streaming_delay")

    @property
    @pulumi.getter(name="maxWalSenders")
    def max_wal_senders(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum WAL senders. The default is `20`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_wal_senders")

    @property
    @pulumi.getter(name="maxWorkerProcesses")
    def max_worker_processes(self) -> Optional[builtins.int]:
        """
        Sets the maximum number of background processes that the system can support. The default is `8`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_worker_processes")

    @property
    @pulumi.getter(name="passwordEncryption")
    def password_encryption(self) -> Optional[builtins.str]:
        """
        Enum: `md5`, `scram-sha-256`. Chooses the algorithm for encrypting passwords. Default: `md5`.
        """
        return pulumi.get(self, "password_encryption")

    @property
    @pulumi.getter(name="pgPartmanBgwDotInterval")
    def pg_partman_bgw_dot_interval(self) -> Optional[builtins.int]:
        """
        Sets the time interval in seconds to run pg_partman's scheduled tasks. The default is `3600`. Example: `3600`.
        """
        return pulumi.get(self, "pg_partman_bgw_dot_interval")

    @property
    @pulumi.getter(name="pgPartmanBgwDotRole")
    def pg_partman_bgw_dot_role(self) -> Optional[builtins.str]:
        """
        Controls which role to use for pg_partman's scheduled background tasks. Example: `myrolename`.
        """
        return pulumi.get(self, "pg_partman_bgw_dot_role")

    @property
    @pulumi.getter(name="pgStatMonitorDotPgsmEnableQueryPlan")
    def pg_stat_monitor_dot_pgsm_enable_query_plan(self) -> Optional[builtins.bool]:
        """
        Enables or disables query plan monitoring. Changing this parameter causes a service restart. Only available for PostgreSQL 13+.
        """
        return pulumi.get(self, "pg_stat_monitor_dot_pgsm_enable_query_plan")

    @property
    @pulumi.getter(name="pgStatMonitorDotPgsmMaxBuckets")
    def pg_stat_monitor_dot_pgsm_max_buckets(self) -> Optional[builtins.int]:
        """
        Sets the maximum number of buckets. Changing this parameter causes a service restart. Only available for PostgreSQL 13+. Example: `10`.
        """
        return pulumi.get(self, "pg_stat_monitor_dot_pgsm_max_buckets")

    @property
    @pulumi.getter(name="pgStatStatementsDotTrack")
    def pg_stat_statements_dot_track(self) -> Optional[builtins.str]:
        """
        Enum: `all`, `none`, `top`. Controls which statements are counted. Specify top to track top-level statements (those issued directly by clients), all to also track nested statements (such as statements invoked within functions), or none to disable statement statistics collection. The default is `top`.
        """
        return pulumi.get(self, "pg_stat_statements_dot_track")

    @property
    @pulumi.getter(name="tempFileLimit")
    def temp_file_limit(self) -> Optional[builtins.int]:
        """
        PostgreSQL temporary file limit in KiB, -1 for unlimited. Example: `5000000`.
        """
        return pulumi.get(self, "temp_file_limit")

    @property
    @pulumi.getter
    def timezone(self) -> Optional[builtins.str]:
        """
        PostgreSQL service timezone. Example: `Europe/Helsinki`.
        """
        return pulumi.get(self, "timezone")

    @property
    @pulumi.getter(name="trackActivityQuerySize")
    def track_activity_query_size(self) -> Optional[builtins.int]:
        """
        Specifies the number of bytes reserved to track the currently executing command for each active session. Changing this parameter causes a service restart. Example: `1024`.
        """
        return pulumi.get(self, "track_activity_query_size")

    @property
    @pulumi.getter(name="trackCommitTimestamp")
    def track_commit_timestamp(self) -> Optional[builtins.str]:
        """
        Enum: `off`, `on`. Record commit time of transactions. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "track_commit_timestamp")

    @property
    @pulumi.getter(name="trackFunctions")
    def track_functions(self) -> Optional[builtins.str]:
        """
        Enum: `all`, `none`, `pl`. Enables tracking of function call counts and time used.
        """
        return pulumi.get(self, "track_functions")

    @property
    @pulumi.getter(name="trackIoTiming")
    def track_io_timing(self) -> Optional[builtins.str]:
        """
        Enum: `off`, `on`. Enables timing of database I/O calls. The default is `off`. When on, it will repeatedly query the operating system for the current time, which may cause significant overhead on some platforms.
        """
        return pulumi.get(self, "track_io_timing")

    @property
    @pulumi.getter(name="walSenderTimeout")
    def wal_sender_timeout(self) -> Optional[builtins.int]:
        """
        Terminate replication connections that are inactive for longer than this amount of time, in milliseconds. Setting this value to zero disables the timeout. Example: `60000`.
        """
        return pulumi.get(self, "wal_sender_timeout")

    @property
    @pulumi.getter(name="walWriterDelay")
    def wal_writer_delay(self) -> Optional[builtins.int]:
        """
        WAL flush interval in milliseconds. The default is `200`. Setting this parameter to a lower value may negatively impact performance. Example: `50`.
        """
        return pulumi.get(self, "wal_writer_delay")


@pulumi.output_type
class PgPgUserConfigPgQualstats(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "minErrEstimateNum":
            suggest = "min_err_estimate_num"
        elif key == "minErrEstimateRatio":
            suggest = "min_err_estimate_ratio"
        elif key == "trackConstants":
            suggest = "track_constants"
        elif key == "trackPgCatalog":
            suggest = "track_pg_catalog"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in PgPgUserConfigPgQualstats. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        PgPgUserConfigPgQualstats.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        PgPgUserConfigPgQualstats.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None,
                 min_err_estimate_num: Optional[builtins.int] = None,
                 min_err_estimate_ratio: Optional[builtins.int] = None,
                 track_constants: Optional[builtins.bool] = None,
                 track_pg_catalog: Optional[builtins.bool] = None):
        """
        :param builtins.bool enabled: Enable / Disable pg_qualstats. Default: `false`.
        :param builtins.int min_err_estimate_num: Error estimation num threshold to save quals. Default: `0`.
        :param builtins.int min_err_estimate_ratio: Error estimation ratio threshold to save quals. Default: `0`.
        :param builtins.bool track_constants: Enable / Disable pg_qualstats constants tracking. Default: `true`.
        :param builtins.bool track_pg_catalog: Track quals on system catalogs too. Default: `false`.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if min_err_estimate_num is not None:
            pulumi.set(__self__, "min_err_estimate_num", min_err_estimate_num)
        if min_err_estimate_ratio is not None:
            pulumi.set(__self__, "min_err_estimate_ratio", min_err_estimate_ratio)
        if track_constants is not None:
            pulumi.set(__self__, "track_constants", track_constants)
        if track_pg_catalog is not None:
            pulumi.set(__self__, "track_pg_catalog", track_pg_catalog)

    @property
    @pulumi.getter
    @_utilities.deprecated("""This property is deprecated.""")
    def enabled(self) -> Optional[builtins.bool]:
        """
        Enable / Disable pg_qualstats. Default: `false`.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="minErrEstimateNum")
    @_utilities.deprecated("""This property is deprecated.""")
    def min_err_estimate_num(self) -> Optional[builtins.int]:
        """
        Error estimation num threshold to save quals. Default: `0`.
        """
        return pulumi.get(self, "min_err_estimate_num")

    @property
    @pulumi.getter(name="minErrEstimateRatio")
    @_utilities.deprecated("""This property is deprecated.""")
    def min_err_estimate_ratio(self) -> Optional[builtins.int]:
        """
        Error estimation ratio threshold to save quals. Default: `0`.
        """
        return pulumi.get(self, "min_err_estimate_ratio")

    @property
    @pulumi.getter(name="trackConstants")
    @_utilities.deprecated("""This property is deprecated.""")
    def track_constants(self) -> Optional[builtins.bool]:
        """
        Enable / Disable pg_qualstats constants tracking. Default: `true`.
        """
        return pulumi.get(self, "track_constants")

    @property
    @pulumi.getter(name="trackPgCatalog")
    @_utilities.deprecated("""This property is deprecated.""")
    def track_pg_catalog(self) -> Optional[builtins.bool]:
        """
        Track quals on system catalogs too. Default: `false`.
        """
        return pulumi.get(self, "track_pg_catalog")


@pulumi.output_type
class PgPgUserConfigPgaudit(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "featureEnabled":
            suggest = "feature_enabled"
        elif key == "logCatalog":
            suggest = "log_catalog"
        elif key == "logClient":
            suggest = "log_client"
        elif key == "logLevel":
            suggest = "log_level"
        elif key == "logMaxStringLength":
            suggest = "log_max_string_length"
        elif key == "logNestedStatements":
            suggest = "log_nested_statements"
        elif key == "logParameter":
            suggest = "log_parameter"
        elif key == "logParameterMaxSize":
            suggest = "log_parameter_max_size"
        elif key == "logRelation":
            suggest = "log_relation"
        elif key == "logRows":
            suggest = "log_rows"
        elif key == "logStatement":
            suggest = "log_statement"
        elif key == "logStatementOnce":
            suggest = "log_statement_once"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in PgPgUserConfigPgaudit. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        PgPgUserConfigPgaudit.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        PgPgUserConfigPgaudit.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 feature_enabled: Optional[builtins.bool] = None,
                 log_catalog: Optional[builtins.bool] = None,
                 log_client: Optional[builtins.bool] = None,
                 log_level: Optional[builtins.str] = None,
                 log_max_string_length: Optional[builtins.int] = None,
                 log_nested_statements: Optional[builtins.bool] = None,
                 log_parameter: Optional[builtins.bool] = None,
                 log_parameter_max_size: Optional[builtins.int] = None,
                 log_relation: Optional[builtins.bool] = None,
                 log_rows: Optional[builtins.bool] = None,
                 log_statement: Optional[builtins.bool] = None,
                 log_statement_once: Optional[builtins.bool] = None,
                 logs: Optional[Sequence[builtins.str]] = None,
                 role: Optional[builtins.str] = None):
        """
        :param builtins.bool feature_enabled: Enable pgaudit extension. When enabled, pgaudit extension will be automatically installed.Otherwise, extension will be uninstalled but auditing configurations will be preserved. Default: `false`.
        :param builtins.bool log_catalog: Specifies that session logging should be enabled in the casewhere all relations in a statement are in pg_catalog. Default: `true`.
        :param builtins.bool log_client: Specifies whether log messages will be visible to a client process such as psql. Default: `false`.
        :param builtins.str log_level: Enum: `debug1`, `debug2`, `debug3`, `debug4`, `debug5`, `info`, `log`, `notice`, `warning`. Specifies the log level that will be used for log entries. Default: `log`.
        :param builtins.int log_max_string_length: Crop parameters representation and whole statements if they exceed this threshold. A (default) value of -1 disable the truncation. Default: `-1`.
        :param builtins.bool log_nested_statements: This GUC allows to turn off logging nested statements, that is, statements that are executed as part of another ExecutorRun. Default: `true`.
        :param builtins.bool log_parameter: Specifies that audit logging should include the parameters that were passed with the statement. Default: `false`.
        :param builtins.int log_parameter_max_size: Specifies that parameter values longer than this setting (in bytes) should not be logged, but replaced with \\n\\n. Default: `0`.
        :param builtins.bool log_relation: Specifies whether session audit logging should create a separate log entry for each relation (TABLE, VIEW, etc.) referenced in a SELECT or DML statement. Default: `false`.
        :param builtins.bool log_rows: Specifies that audit logging should include the rows retrieved or affected by a statement. When enabled the rows field will be included after the parameter field. Default: `false`.
        :param builtins.bool log_statement: Specifies whether logging will include the statement text and parameters (if enabled). Default: `true`.
        :param builtins.bool log_statement_once: Specifies whether logging will include the statement text and parameters with the first log entry for a statement/substatement combination or with every entry. Default: `false`.
        :param Sequence[builtins.str] logs: Specifies which classes of statements will be logged by session audit logging.
        :param builtins.str role: Specifies the master role to use for object audit logging.
        """
        if feature_enabled is not None:
            pulumi.set(__self__, "feature_enabled", feature_enabled)
        if log_catalog is not None:
            pulumi.set(__self__, "log_catalog", log_catalog)
        if log_client is not None:
            pulumi.set(__self__, "log_client", log_client)
        if log_level is not None:
            pulumi.set(__self__, "log_level", log_level)
        if log_max_string_length is not None:
            pulumi.set(__self__, "log_max_string_length", log_max_string_length)
        if log_nested_statements is not None:
            pulumi.set(__self__, "log_nested_statements", log_nested_statements)
        if log_parameter is not None:
            pulumi.set(__self__, "log_parameter", log_parameter)
        if log_parameter_max_size is not None:
            pulumi.set(__self__, "log_parameter_max_size", log_parameter_max_size)
        if log_relation is not None:
            pulumi.set(__self__, "log_relation", log_relation)
        if log_rows is not None:
            pulumi.set(__self__, "log_rows", log_rows)
        if log_statement is not None:
            pulumi.set(__self__, "log_statement", log_statement)
        if log_statement_once is not None:
            pulumi.set(__self__, "log_statement_once", log_statement_once)
        if logs is not None:
            pulumi.set(__self__, "logs", logs)
        if role is not None:
            pulumi.set(__self__, "role", role)

    @property
    @pulumi.getter(name="featureEnabled")
    def feature_enabled(self) -> Optional[builtins.bool]:
        """
        Enable pgaudit extension. When enabled, pgaudit extension will be automatically installed.Otherwise, extension will be uninstalled but auditing configurations will be preserved. Default: `false`.
        """
        return pulumi.get(self, "feature_enabled")

    @property
    @pulumi.getter(name="logCatalog")
    def log_catalog(self) -> Optional[builtins.bool]:
        """
        Specifies that session logging should be enabled in the casewhere all relations in a statement are in pg_catalog. Default: `true`.
        """
        return pulumi.get(self, "log_catalog")

    @property
    @pulumi.getter(name="logClient")
    def log_client(self) -> Optional[builtins.bool]:
        """
        Specifies whether log messages will be visible to a client process such as psql. Default: `false`.
        """
        return pulumi.get(self, "log_client")

    @property
    @pulumi.getter(name="logLevel")
    def log_level(self) -> Optional[builtins.str]:
        """
        Enum: `debug1`, `debug2`, `debug3`, `debug4`, `debug5`, `info`, `log`, `notice`, `warning`. Specifies the log level that will be used for log entries. Default: `log`.
        """
        return pulumi.get(self, "log_level")

    @property
    @pulumi.getter(name="logMaxStringLength")
    def log_max_string_length(self) -> Optional[builtins.int]:
        """
        Crop parameters representation and whole statements if they exceed this threshold. A (default) value of -1 disable the truncation. Default: `-1`.
        """
        return pulumi.get(self, "log_max_string_length")

    @property
    @pulumi.getter(name="logNestedStatements")
    def log_nested_statements(self) -> Optional[builtins.bool]:
        """
        This GUC allows to turn off logging nested statements, that is, statements that are executed as part of another ExecutorRun. Default: `true`.
        """
        return pulumi.get(self, "log_nested_statements")

    @property
    @pulumi.getter(name="logParameter")
    def log_parameter(self) -> Optional[builtins.bool]:
        """
        Specifies that audit logging should include the parameters that were passed with the statement. Default: `false`.
        """
        return pulumi.get(self, "log_parameter")

    @property
    @pulumi.getter(name="logParameterMaxSize")
    def log_parameter_max_size(self) -> Optional[builtins.int]:
        """
        Specifies that parameter values longer than this setting (in bytes) should not be logged, but replaced with \\n\\n. Default: `0`.
        """
        return pulumi.get(self, "log_parameter_max_size")

    @property
    @pulumi.getter(name="logRelation")
    def log_relation(self) -> Optional[builtins.bool]:
        """
        Specifies whether session audit logging should create a separate log entry for each relation (TABLE, VIEW, etc.) referenced in a SELECT or DML statement. Default: `false`.
        """
        return pulumi.get(self, "log_relation")

    @property
    @pulumi.getter(name="logRows")
    def log_rows(self) -> Optional[builtins.bool]:
        """
        Specifies that audit logging should include the rows retrieved or affected by a statement. When enabled the rows field will be included after the parameter field. Default: `false`.
        """
        return pulumi.get(self, "log_rows")

    @property
    @pulumi.getter(name="logStatement")
    def log_statement(self) -> Optional[builtins.bool]:
        """
        Specifies whether logging will include the statement text and parameters (if enabled). Default: `true`.
        """
        return pulumi.get(self, "log_statement")

    @property
    @pulumi.getter(name="logStatementOnce")
    def log_statement_once(self) -> Optional[builtins.bool]:
        """
        Specifies whether logging will include the statement text and parameters with the first log entry for a statement/substatement combination or with every entry. Default: `false`.
        """
        return pulumi.get(self, "log_statement_once")

    @property
    @pulumi.getter
    def logs(self) -> Optional[Sequence[builtins.str]]:
        """
        Specifies which classes of statements will be logged by session audit logging.
        """
        return pulumi.get(self, "logs")

    @property
    @pulumi.getter
    def role(self) -> Optional[builtins.str]:
        """
        Specifies the master role to use for object audit logging.
        """
        return pulumi.get(self, "role")


@pulumi.output_type
class PgPgUserConfigPgbouncer(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "autodbIdleTimeout":
            suggest = "autodb_idle_timeout"
        elif key == "autodbMaxDbConnections":
            suggest = "autodb_max_db_connections"
        elif key == "autodbPoolMode":
            suggest = "autodb_pool_mode"
        elif key == "autodbPoolSize":
            suggest = "autodb_pool_size"
        elif key == "ignoreStartupParameters":
            suggest = "ignore_startup_parameters"
        elif key == "maxPreparedStatements":
            suggest = "max_prepared_statements"
        elif key == "minPoolSize":
            suggest = "min_pool_size"
        elif key == "serverIdleTimeout":
            suggest = "server_idle_timeout"
        elif key == "serverLifetime":
            suggest = "server_lifetime"
        elif key == "serverResetQueryAlways":
            suggest = "server_reset_query_always"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in PgPgUserConfigPgbouncer. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        PgPgUserConfigPgbouncer.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        PgPgUserConfigPgbouncer.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 autodb_idle_timeout: Optional[builtins.int] = None,
                 autodb_max_db_connections: Optional[builtins.int] = None,
                 autodb_pool_mode: Optional[builtins.str] = None,
                 autodb_pool_size: Optional[builtins.int] = None,
                 ignore_startup_parameters: Optional[Sequence[builtins.str]] = None,
                 max_prepared_statements: Optional[builtins.int] = None,
                 min_pool_size: Optional[builtins.int] = None,
                 server_idle_timeout: Optional[builtins.int] = None,
                 server_lifetime: Optional[builtins.int] = None,
                 server_reset_query_always: Optional[builtins.bool] = None):
        """
        :param builtins.int autodb_idle_timeout: If the automatically created database pools have been unused this many seconds, they are freed. If 0 then timeout is disabled. (seconds). Default: `3600`.
        :param builtins.int autodb_max_db_connections: Do not allow more than this many server connections per database (regardless of user). Setting it to 0 means unlimited. Example: `0`.
        :param builtins.str autodb_pool_mode: Enum: `session`, `statement`, `transaction`. PGBouncer pool mode. Default: `transaction`.
        :param builtins.int autodb_pool_size: If non-zero then create automatically a pool of that size per user when a pool doesn't exist. Default: `0`.
        :param Sequence[builtins.str] ignore_startup_parameters: List of parameters to ignore when given in startup packet.
        :param builtins.int max_prepared_statements: PgBouncer tracks protocol-level named prepared statements related commands sent by the client in transaction and statement pooling modes when max*prepared*statements is set to a non-zero value. Setting it to 0 disables prepared statements. max*prepared*statements defaults to 100, and its maximum is 3000. Default: `100`.
        :param builtins.int min_pool_size: Add more server connections to pool if below this number. Improves behavior when usual load comes suddenly back after period of total inactivity. The value is effectively capped at the pool size. Default: `0`.
        :param builtins.int server_idle_timeout: If a server connection has been idle more than this many seconds it will be dropped. If 0 then timeout is disabled. (seconds). Default: `600`.
        :param builtins.int server_lifetime: The pooler will close an unused server connection that has been connected longer than this. (seconds). Default: `3600`.
        :param builtins.bool server_reset_query_always: Run server*reset*query (DISCARD ALL) in all pooling modes. Default: `false`.
        """
        if autodb_idle_timeout is not None:
            pulumi.set(__self__, "autodb_idle_timeout", autodb_idle_timeout)
        if autodb_max_db_connections is not None:
            pulumi.set(__self__, "autodb_max_db_connections", autodb_max_db_connections)
        if autodb_pool_mode is not None:
            pulumi.set(__self__, "autodb_pool_mode", autodb_pool_mode)
        if autodb_pool_size is not None:
            pulumi.set(__self__, "autodb_pool_size", autodb_pool_size)
        if ignore_startup_parameters is not None:
            pulumi.set(__self__, "ignore_startup_parameters", ignore_startup_parameters)
        if max_prepared_statements is not None:
            pulumi.set(__self__, "max_prepared_statements", max_prepared_statements)
        if min_pool_size is not None:
            pulumi.set(__self__, "min_pool_size", min_pool_size)
        if server_idle_timeout is not None:
            pulumi.set(__self__, "server_idle_timeout", server_idle_timeout)
        if server_lifetime is not None:
            pulumi.set(__self__, "server_lifetime", server_lifetime)
        if server_reset_query_always is not None:
            pulumi.set(__self__, "server_reset_query_always", server_reset_query_always)

    @property
    @pulumi.getter(name="autodbIdleTimeout")
    def autodb_idle_timeout(self) -> Optional[builtins.int]:
        """
        If the automatically created database pools have been unused this many seconds, they are freed. If 0 then timeout is disabled. (seconds). Default: `3600`.
        """
        return pulumi.get(self, "autodb_idle_timeout")

    @property
    @pulumi.getter(name="autodbMaxDbConnections")
    def autodb_max_db_connections(self) -> Optional[builtins.int]:
        """
        Do not allow more than this many server connections per database (regardless of user). Setting it to 0 means unlimited. Example: `0`.
        """
        return pulumi.get(self, "autodb_max_db_connections")

    @property
    @pulumi.getter(name="autodbPoolMode")
    def autodb_pool_mode(self) -> Optional[builtins.str]:
        """
        Enum: `session`, `statement`, `transaction`. PGBouncer pool mode. Default: `transaction`.
        """
        return pulumi.get(self, "autodb_pool_mode")

    @property
    @pulumi.getter(name="autodbPoolSize")
    def autodb_pool_size(self) -> Optional[builtins.int]:
        """
        If non-zero then create automatically a pool of that size per user when a pool doesn't exist. Default: `0`.
        """
        return pulumi.get(self, "autodb_pool_size")

    @property
    @pulumi.getter(name="ignoreStartupParameters")
    def ignore_startup_parameters(self) -> Optional[Sequence[builtins.str]]:
        """
        List of parameters to ignore when given in startup packet.
        """
        return pulumi.get(self, "ignore_startup_parameters")

    @property
    @pulumi.getter(name="maxPreparedStatements")
    def max_prepared_statements(self) -> Optional[builtins.int]:
        """
        PgBouncer tracks protocol-level named prepared statements related commands sent by the client in transaction and statement pooling modes when max*prepared*statements is set to a non-zero value. Setting it to 0 disables prepared statements. max*prepared*statements defaults to 100, and its maximum is 3000. Default: `100`.
        """
        return pulumi.get(self, "max_prepared_statements")

    @property
    @pulumi.getter(name="minPoolSize")
    def min_pool_size(self) -> Optional[builtins.int]:
        """
        Add more server connections to pool if below this number. Improves behavior when usual load comes suddenly back after period of total inactivity. The value is effectively capped at the pool size. Default: `0`.
        """
        return pulumi.get(self, "min_pool_size")

    @property
    @pulumi.getter(name="serverIdleTimeout")
    def server_idle_timeout(self) -> Optional[builtins.int]:
        """
        If a server connection has been idle more than this many seconds it will be dropped. If 0 then timeout is disabled. (seconds). Default: `600`.
        """
        return pulumi.get(self, "server_idle_timeout")

    @property
    @pulumi.getter(name="serverLifetime")
    def server_lifetime(self) -> Optional[builtins.int]:
        """
        The pooler will close an unused server connection that has been connected longer than this. (seconds). Default: `3600`.
        """
        return pulumi.get(self, "server_lifetime")

    @property
    @pulumi.getter(name="serverResetQueryAlways")
    def server_reset_query_always(self) -> Optional[builtins.bool]:
        """
        Run server*reset*query (DISCARD ALL) in all pooling modes. Default: `false`.
        """
        return pulumi.get(self, "server_reset_query_always")


@pulumi.output_type
class PgPgUserConfigPglookout(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "maxFailoverReplicationTimeLag":
            suggest = "max_failover_replication_time_lag"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in PgPgUserConfigPglookout. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        PgPgUserConfigPglookout.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        PgPgUserConfigPglookout.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 max_failover_replication_time_lag: Optional[builtins.int] = None):
        """
        :param builtins.int max_failover_replication_time_lag: Number of seconds of master unavailability before triggering database failover to standby. Default: `60`.
        """
        if max_failover_replication_time_lag is not None:
            pulumi.set(__self__, "max_failover_replication_time_lag", max_failover_replication_time_lag)

    @property
    @pulumi.getter(name="maxFailoverReplicationTimeLag")
    def max_failover_replication_time_lag(self) -> Optional[builtins.int]:
        """
        Number of seconds of master unavailability before triggering database failover to standby. Default: `60`.
        """
        return pulumi.get(self, "max_failover_replication_time_lag")


@pulumi.output_type
class PgPgUserConfigPrivateAccess(dict):
    def __init__(__self__, *,
                 pg: Optional[builtins.bool] = None,
                 pgbouncer: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool pg: Allow clients to connect to pg with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool pgbouncer: Allow clients to connect to pgbouncer with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if pg is not None:
            pulumi.set(__self__, "pg", pg)
        if pgbouncer is not None:
            pulumi.set(__self__, "pgbouncer", pgbouncer)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def pg(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to pg with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "pg")

    @property
    @pulumi.getter
    def pgbouncer(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to pgbouncer with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "pgbouncer")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class PgPgUserConfigPrivatelinkAccess(dict):
    def __init__(__self__, *,
                 pg: Optional[builtins.bool] = None,
                 pgbouncer: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool pg: Enable pg.
        :param builtins.bool pgbouncer: Enable pgbouncer.
        :param builtins.bool prometheus: Enable prometheus.
        """
        if pg is not None:
            pulumi.set(__self__, "pg", pg)
        if pgbouncer is not None:
            pulumi.set(__self__, "pgbouncer", pgbouncer)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def pg(self) -> Optional[builtins.bool]:
        """
        Enable pg.
        """
        return pulumi.get(self, "pg")

    @property
    @pulumi.getter
    def pgbouncer(self) -> Optional[builtins.bool]:
        """
        Enable pgbouncer.
        """
        return pulumi.get(self, "pgbouncer")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class PgPgUserConfigPublicAccess(dict):
    def __init__(__self__, *,
                 pg: Optional[builtins.bool] = None,
                 pgbouncer: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool pg: Allow clients to connect to pg from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool pgbouncer: Allow clients to connect to pgbouncer from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if pg is not None:
            pulumi.set(__self__, "pg", pg)
        if pgbouncer is not None:
            pulumi.set(__self__, "pgbouncer", pgbouncer)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def pg(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to pg from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "pg")

    @property
    @pulumi.getter
    def pgbouncer(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to pgbouncer from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "pgbouncer")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class PgPgUserConfigTimescaledb(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "maxBackgroundWorkers":
            suggest = "max_background_workers"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in PgPgUserConfigTimescaledb. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        PgPgUserConfigTimescaledb.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        PgPgUserConfigTimescaledb.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 max_background_workers: Optional[builtins.int] = None):
        """
        :param builtins.int max_background_workers: The number of background workers for timescaledb operations. You should configure this setting to the sum of your number of databases and the total number of concurrent background workers you want running at any given point in time. Default: `16`.
        """
        if max_background_workers is not None:
            pulumi.set(__self__, "max_background_workers", max_background_workers)

    @property
    @pulumi.getter(name="maxBackgroundWorkers")
    def max_background_workers(self) -> Optional[builtins.int]:
        """
        The number of background workers for timescaledb operations. You should configure this setting to the sum of your number of databases and the total number of concurrent background workers you want running at any given point in time. Default: `16`.
        """
        return pulumi.get(self, "max_background_workers")


@pulumi.output_type
class PgServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in PgServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        PgServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        PgServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration. The possible values are `read_replica` and `disaster_recovery`.
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration. The possible values are `read_replica` and `disaster_recovery`.
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class PgTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class PgTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class ProjectTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Project tag key.
        :param builtins.str value: Project tag value.
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Project tag key.
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Project tag value.
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class RedisComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in RedisComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        RedisComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        RedisComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class RedisRedis(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "replicaUri":
            suggest = "replica_uri"
        elif key == "slaveUris":
            suggest = "slave_uris"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in RedisRedis. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        RedisRedis.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        RedisRedis.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 password: Optional[builtins.str] = None,
                 replica_uri: Optional[builtins.str] = None,
                 slave_uris: Optional[Sequence[builtins.str]] = None,
                 uris: Optional[Sequence[builtins.str]] = None):
        """
        :param builtins.str password: Redis password.
        :param builtins.str replica_uri: Redis replica server URI.
        :param Sequence[builtins.str] slave_uris: Redis slave server URIs.
        :param Sequence[builtins.str] uris: Redis server URIs.
        """
        if password is not None:
            pulumi.set(__self__, "password", password)
        if replica_uri is not None:
            pulumi.set(__self__, "replica_uri", replica_uri)
        if slave_uris is not None:
            pulumi.set(__self__, "slave_uris", slave_uris)
        if uris is not None:
            pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        Redis password.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter(name="replicaUri")
    def replica_uri(self) -> Optional[builtins.str]:
        """
        Redis replica server URI.
        """
        return pulumi.get(self, "replica_uri")

    @property
    @pulumi.getter(name="slaveUris")
    def slave_uris(self) -> Optional[Sequence[builtins.str]]:
        """
        Redis slave server URIs.
        """
        return pulumi.get(self, "slave_uris")

    @property
    @pulumi.getter
    def uris(self) -> Optional[Sequence[builtins.str]]:
        """
        Redis server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class RedisRedisUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "additionalBackupRegions":
            suggest = "additional_backup_regions"
        elif key == "backupHour":
            suggest = "backup_hour"
        elif key == "backupMinute":
            suggest = "backup_minute"
        elif key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "privateAccess":
            suggest = "private_access"
        elif key == "privatelinkAccess":
            suggest = "privatelink_access"
        elif key == "projectToForkFrom":
            suggest = "project_to_fork_from"
        elif key == "publicAccess":
            suggest = "public_access"
        elif key == "recoveryBasebackupName":
            suggest = "recovery_basebackup_name"
        elif key == "redisAclChannelsDefault":
            suggest = "redis_acl_channels_default"
        elif key == "redisIoThreads":
            suggest = "redis_io_threads"
        elif key == "redisLfuDecayTime":
            suggest = "redis_lfu_decay_time"
        elif key == "redisLfuLogFactor":
            suggest = "redis_lfu_log_factor"
        elif key == "redisMaxmemoryPolicy":
            suggest = "redis_maxmemory_policy"
        elif key == "redisNotifyKeyspaceEvents":
            suggest = "redis_notify_keyspace_events"
        elif key == "redisNumberOfDatabases":
            suggest = "redis_number_of_databases"
        elif key == "redisPersistence":
            suggest = "redis_persistence"
        elif key == "redisPubsubClientOutputBufferLimit":
            suggest = "redis_pubsub_client_output_buffer_limit"
        elif key == "redisSsl":
            suggest = "redis_ssl"
        elif key == "redisTimeout":
            suggest = "redis_timeout"
        elif key == "redisVersion":
            suggest = "redis_version"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "serviceToForkFrom":
            suggest = "service_to_fork_from"
        elif key == "staticIps":
            suggest = "static_ips"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in RedisRedisUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        RedisRedisUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        RedisRedisUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 backup_hour: Optional[builtins.int] = None,
                 backup_minute: Optional[builtins.int] = None,
                 ip_filter_objects: Optional[Sequence['outputs.RedisRedisUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 migration: Optional['outputs.RedisRedisUserConfigMigration'] = None,
                 private_access: Optional['outputs.RedisRedisUserConfigPrivateAccess'] = None,
                 privatelink_access: Optional['outputs.RedisRedisUserConfigPrivatelinkAccess'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.RedisRedisUserConfigPublicAccess'] = None,
                 recovery_basebackup_name: Optional[builtins.str] = None,
                 redis_acl_channels_default: Optional[builtins.str] = None,
                 redis_io_threads: Optional[builtins.int] = None,
                 redis_lfu_decay_time: Optional[builtins.int] = None,
                 redis_lfu_log_factor: Optional[builtins.int] = None,
                 redis_maxmemory_policy: Optional[builtins.str] = None,
                 redis_notify_keyspace_events: Optional[builtins.str] = None,
                 redis_number_of_databases: Optional[builtins.int] = None,
                 redis_persistence: Optional[builtins.str] = None,
                 redis_pubsub_client_output_buffer_limit: Optional[builtins.int] = None,
                 redis_ssl: Optional[builtins.bool] = None,
                 redis_timeout: Optional[builtins.int] = None,
                 redis_version: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.int backup_hour: The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        :param builtins.int backup_minute: The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        :param Sequence['RedisRedisUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'RedisRedisUserConfigMigrationArgs' migration: Migrate data from existing server
        :param 'RedisRedisUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'RedisRedisUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'RedisRedisUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_basebackup_name: Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        :param builtins.str redis_acl_channels_default: Enum: `allchannels`, `resetchannels`. Determines default pub/sub channels' ACL for new users if ACL is not supplied. When this option is not defined, all_channels is assumed to keep backward compatibility. This option doesn't affect Redis configuration acl-pubsub-default.
        :param builtins.int redis_io_threads: Set Redis IO thread count. Changing this will cause a restart of the Redis service. Example: `1`.
        :param builtins.int redis_lfu_decay_time: LFU maxmemory-policy counter decay time in minutes. Default: `1`.
        :param builtins.int redis_lfu_log_factor: Counter logarithm factor for volatile-lfu and allkeys-lfu maxmemory-policies. Default: `10`.
        :param builtins.str redis_maxmemory_policy: Enum: `allkeys-lfu`, `allkeys-lru`, `allkeys-random`, `noeviction`, `volatile-lfu`, `volatile-lru`, `volatile-random`, `volatile-ttl`. Redis maxmemory-policy. Default: `noeviction`.
        :param builtins.str redis_notify_keyspace_events: Set notify-keyspace-events option.
        :param builtins.int redis_number_of_databases: Set number of Redis databases. Changing this will cause a restart of the Redis service. Example: `16`.
        :param builtins.str redis_persistence: Enum: `off`, `rdb`. When persistence is `rdb`, Redis does RDB dumps each 10 minutes if any key is changed. Also RDB dumps are done according to the backup schedule for backup purposes. When persistence is `off`, no RDB dumps or backups are done, so data can be lost at any moment if the service is restarted for any reason, or if the service is powered off. Also, the service can't be forked.
        :param builtins.int redis_pubsub_client_output_buffer_limit: Set output buffer limit for pub / sub clients in MB. The value is the hard limit, the soft limit is 1/4 of the hard limit. When setting the limit, be mindful of the available memory in the selected service plan. Example: `64`.
        :param builtins.bool redis_ssl: Require SSL to access Redis. Default: `true`.
        :param builtins.int redis_timeout: Redis idle connection timeout in seconds. Default: `300`.
        :param builtins.str redis_version: Enum: `7.0`, and newer. Redis major version.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if backup_hour is not None:
            pulumi.set(__self__, "backup_hour", backup_hour)
        if backup_minute is not None:
            pulumi.set(__self__, "backup_minute", backup_minute)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if migration is not None:
            pulumi.set(__self__, "migration", migration)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_basebackup_name is not None:
            pulumi.set(__self__, "recovery_basebackup_name", recovery_basebackup_name)
        if redis_acl_channels_default is not None:
            pulumi.set(__self__, "redis_acl_channels_default", redis_acl_channels_default)
        if redis_io_threads is not None:
            pulumi.set(__self__, "redis_io_threads", redis_io_threads)
        if redis_lfu_decay_time is not None:
            pulumi.set(__self__, "redis_lfu_decay_time", redis_lfu_decay_time)
        if redis_lfu_log_factor is not None:
            pulumi.set(__self__, "redis_lfu_log_factor", redis_lfu_log_factor)
        if redis_maxmemory_policy is not None:
            pulumi.set(__self__, "redis_maxmemory_policy", redis_maxmemory_policy)
        if redis_notify_keyspace_events is not None:
            pulumi.set(__self__, "redis_notify_keyspace_events", redis_notify_keyspace_events)
        if redis_number_of_databases is not None:
            pulumi.set(__self__, "redis_number_of_databases", redis_number_of_databases)
        if redis_persistence is not None:
            pulumi.set(__self__, "redis_persistence", redis_persistence)
        if redis_pubsub_client_output_buffer_limit is not None:
            pulumi.set(__self__, "redis_pubsub_client_output_buffer_limit", redis_pubsub_client_output_buffer_limit)
        if redis_ssl is not None:
            pulumi.set(__self__, "redis_ssl", redis_ssl)
        if redis_timeout is not None:
            pulumi.set(__self__, "redis_timeout", redis_timeout)
        if redis_version is not None:
            pulumi.set(__self__, "redis_version", redis_version)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="backupHour")
    def backup_hour(self) -> Optional[builtins.int]:
        """
        The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        """
        return pulumi.get(self, "backup_hour")

    @property
    @pulumi.getter(name="backupMinute")
    def backup_minute(self) -> Optional[builtins.int]:
        """
        The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        """
        return pulumi.get(self, "backup_minute")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.RedisRedisUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter
    def migration(self) -> Optional['outputs.RedisRedisUserConfigMigration']:
        """
        Migrate data from existing server
        """
        return pulumi.get(self, "migration")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.RedisRedisUserConfigPrivateAccess']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.RedisRedisUserConfigPrivatelinkAccess']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.RedisRedisUserConfigPublicAccess']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryBasebackupName")
    def recovery_basebackup_name(self) -> Optional[builtins.str]:
        """
        Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        """
        return pulumi.get(self, "recovery_basebackup_name")

    @property
    @pulumi.getter(name="redisAclChannelsDefault")
    def redis_acl_channels_default(self) -> Optional[builtins.str]:
        """
        Enum: `allchannels`, `resetchannels`. Determines default pub/sub channels' ACL for new users if ACL is not supplied. When this option is not defined, all_channels is assumed to keep backward compatibility. This option doesn't affect Redis configuration acl-pubsub-default.
        """
        return pulumi.get(self, "redis_acl_channels_default")

    @property
    @pulumi.getter(name="redisIoThreads")
    def redis_io_threads(self) -> Optional[builtins.int]:
        """
        Set Redis IO thread count. Changing this will cause a restart of the Redis service. Example: `1`.
        """
        return pulumi.get(self, "redis_io_threads")

    @property
    @pulumi.getter(name="redisLfuDecayTime")
    def redis_lfu_decay_time(self) -> Optional[builtins.int]:
        """
        LFU maxmemory-policy counter decay time in minutes. Default: `1`.
        """
        return pulumi.get(self, "redis_lfu_decay_time")

    @property
    @pulumi.getter(name="redisLfuLogFactor")
    def redis_lfu_log_factor(self) -> Optional[builtins.int]:
        """
        Counter logarithm factor for volatile-lfu and allkeys-lfu maxmemory-policies. Default: `10`.
        """
        return pulumi.get(self, "redis_lfu_log_factor")

    @property
    @pulumi.getter(name="redisMaxmemoryPolicy")
    def redis_maxmemory_policy(self) -> Optional[builtins.str]:
        """
        Enum: `allkeys-lfu`, `allkeys-lru`, `allkeys-random`, `noeviction`, `volatile-lfu`, `volatile-lru`, `volatile-random`, `volatile-ttl`. Redis maxmemory-policy. Default: `noeviction`.
        """
        return pulumi.get(self, "redis_maxmemory_policy")

    @property
    @pulumi.getter(name="redisNotifyKeyspaceEvents")
    def redis_notify_keyspace_events(self) -> Optional[builtins.str]:
        """
        Set notify-keyspace-events option.
        """
        return pulumi.get(self, "redis_notify_keyspace_events")

    @property
    @pulumi.getter(name="redisNumberOfDatabases")
    def redis_number_of_databases(self) -> Optional[builtins.int]:
        """
        Set number of Redis databases. Changing this will cause a restart of the Redis service. Example: `16`.
        """
        return pulumi.get(self, "redis_number_of_databases")

    @property
    @pulumi.getter(name="redisPersistence")
    def redis_persistence(self) -> Optional[builtins.str]:
        """
        Enum: `off`, `rdb`. When persistence is `rdb`, Redis does RDB dumps each 10 minutes if any key is changed. Also RDB dumps are done according to the backup schedule for backup purposes. When persistence is `off`, no RDB dumps or backups are done, so data can be lost at any moment if the service is restarted for any reason, or if the service is powered off. Also, the service can't be forked.
        """
        return pulumi.get(self, "redis_persistence")

    @property
    @pulumi.getter(name="redisPubsubClientOutputBufferLimit")
    def redis_pubsub_client_output_buffer_limit(self) -> Optional[builtins.int]:
        """
        Set output buffer limit for pub / sub clients in MB. The value is the hard limit, the soft limit is 1/4 of the hard limit. When setting the limit, be mindful of the available memory in the selected service plan. Example: `64`.
        """
        return pulumi.get(self, "redis_pubsub_client_output_buffer_limit")

    @property
    @pulumi.getter(name="redisSsl")
    def redis_ssl(self) -> Optional[builtins.bool]:
        """
        Require SSL to access Redis. Default: `true`.
        """
        return pulumi.get(self, "redis_ssl")

    @property
    @pulumi.getter(name="redisTimeout")
    def redis_timeout(self) -> Optional[builtins.int]:
        """
        Redis idle connection timeout in seconds. Default: `300`.
        """
        return pulumi.get(self, "redis_timeout")

    @property
    @pulumi.getter(name="redisVersion")
    def redis_version(self) -> Optional[builtins.str]:
        """
        Enum: `7.0`, and newer. Redis major version.
        """
        return pulumi.get(self, "redis_version")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class RedisRedisUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class RedisRedisUserConfigMigration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "ignoreDbs":
            suggest = "ignore_dbs"
        elif key == "ignoreRoles":
            suggest = "ignore_roles"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in RedisRedisUserConfigMigration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        RedisRedisUserConfigMigration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        RedisRedisUserConfigMigration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 host: builtins.str,
                 port: builtins.int,
                 dbname: Optional[builtins.str] = None,
                 ignore_dbs: Optional[builtins.str] = None,
                 ignore_roles: Optional[builtins.str] = None,
                 method: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 username: Optional[builtins.str] = None):
        """
        :param builtins.str host: Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        :param builtins.int port: Port number of the server where to migrate data from. Example: `1234`.
        :param builtins.str dbname: Database name for bootstrapping the initial connection. Example: `defaultdb`.
        :param builtins.str ignore_dbs: Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        :param builtins.str ignore_roles: Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        :param builtins.str method: Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        :param builtins.str password: Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        :param builtins.bool ssl: The server where to migrate data from is secured with SSL. Default: `true`.
        :param builtins.str username: User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "port", port)
        if dbname is not None:
            pulumi.set(__self__, "dbname", dbname)
        if ignore_dbs is not None:
            pulumi.set(__self__, "ignore_dbs", ignore_dbs)
        if ignore_roles is not None:
            pulumi.set(__self__, "ignore_roles", ignore_roles)
        if method is not None:
            pulumi.set(__self__, "method", method)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number of the server where to migrate data from. Example: `1234`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def dbname(self) -> Optional[builtins.str]:
        """
        Database name for bootstrapping the initial connection. Example: `defaultdb`.
        """
        return pulumi.get(self, "dbname")

    @property
    @pulumi.getter(name="ignoreDbs")
    def ignore_dbs(self) -> Optional[builtins.str]:
        """
        Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        """
        return pulumi.get(self, "ignore_dbs")

    @property
    @pulumi.getter(name="ignoreRoles")
    def ignore_roles(self) -> Optional[builtins.str]:
        """
        Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        """
        return pulumi.get(self, "ignore_roles")

    @property
    @pulumi.getter
    def method(self) -> Optional[builtins.str]:
        """
        Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        """
        return pulumi.get(self, "method")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        The server where to migrate data from is secured with SSL. Default: `true`.
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def username(self) -> Optional[builtins.str]:
        """
        User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class RedisRedisUserConfigPrivateAccess(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None,
                 redis: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool redis: Allow clients to connect to redis with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if redis is not None:
            pulumi.set(__self__, "redis", redis)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter
    def redis(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to redis with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "redis")


@pulumi.output_type
class RedisRedisUserConfigPrivatelinkAccess(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None,
                 redis: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Enable prometheus.
        :param builtins.bool redis: Enable redis.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if redis is not None:
            pulumi.set(__self__, "redis", redis)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter
    def redis(self) -> Optional[builtins.bool]:
        """
        Enable redis.
        """
        return pulumi.get(self, "redis")


@pulumi.output_type
class RedisRedisUserConfigPublicAccess(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None,
                 redis: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool redis: Allow clients to connect to redis from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if redis is not None:
            pulumi.set(__self__, "redis", redis)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter
    def redis(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to redis from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "redis")


@pulumi.output_type
class RedisServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in RedisServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        RedisServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        RedisServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration. The possible value is `read_replica`.
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration. The possible value is `read_replica`.
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class RedisTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class RedisTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class ServiceIntegrationClickhouseKafkaUserConfig(dict):
    def __init__(__self__, *,
                 tables: Optional[Sequence['outputs.ServiceIntegrationClickhouseKafkaUserConfigTable']] = None):
        """
        :param Sequence['ServiceIntegrationClickhouseKafkaUserConfigTableArgs'] tables: Tables to create
        """
        if tables is not None:
            pulumi.set(__self__, "tables", tables)

    @property
    @pulumi.getter
    def tables(self) -> Optional[Sequence['outputs.ServiceIntegrationClickhouseKafkaUserConfigTable']]:
        """
        Tables to create
        """
        return pulumi.get(self, "tables")


@pulumi.output_type
class ServiceIntegrationClickhouseKafkaUserConfigTable(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "dataFormat":
            suggest = "data_format"
        elif key == "groupName":
            suggest = "group_name"
        elif key == "autoOffsetReset":
            suggest = "auto_offset_reset"
        elif key == "dateTimeInputFormat":
            suggest = "date_time_input_format"
        elif key == "handleErrorMode":
            suggest = "handle_error_mode"
        elif key == "maxBlockSize":
            suggest = "max_block_size"
        elif key == "maxRowsPerMessage":
            suggest = "max_rows_per_message"
        elif key == "numConsumers":
            suggest = "num_consumers"
        elif key == "pollMaxBatchSize":
            suggest = "poll_max_batch_size"
        elif key == "pollMaxTimeoutMs":
            suggest = "poll_max_timeout_ms"
        elif key == "skipBrokenMessages":
            suggest = "skip_broken_messages"
        elif key == "threadPerConsumer":
            suggest = "thread_per_consumer"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationClickhouseKafkaUserConfigTable. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationClickhouseKafkaUserConfigTable.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationClickhouseKafkaUserConfigTable.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 columns: Sequence['outputs.ServiceIntegrationClickhouseKafkaUserConfigTableColumn'],
                 data_format: builtins.str,
                 group_name: builtins.str,
                 name: builtins.str,
                 topics: Sequence['outputs.ServiceIntegrationClickhouseKafkaUserConfigTableTopic'],
                 auto_offset_reset: Optional[builtins.str] = None,
                 date_time_input_format: Optional[builtins.str] = None,
                 handle_error_mode: Optional[builtins.str] = None,
                 max_block_size: Optional[builtins.int] = None,
                 max_rows_per_message: Optional[builtins.int] = None,
                 num_consumers: Optional[builtins.int] = None,
                 poll_max_batch_size: Optional[builtins.int] = None,
                 poll_max_timeout_ms: Optional[builtins.int] = None,
                 skip_broken_messages: Optional[builtins.int] = None,
                 thread_per_consumer: Optional[builtins.bool] = None):
        """
        :param Sequence['ServiceIntegrationClickhouseKafkaUserConfigTableColumnArgs'] columns: Table columns
        :param builtins.str data_format: Enum: `Avro`, `AvroConfluent`, `CSV`, `JSONAsString`, `JSONCompactEachRow`, `JSONCompactStringsEachRow`, `JSONEachRow`, `JSONStringsEachRow`, `MsgPack`, `Parquet`, `RawBLOB`, `TSKV`, `TSV`, `TabSeparated`. Message data format. Default: `JSONEachRow`.
        :param builtins.str group_name: Kafka consumers group. Default: `clickhouse`.
        :param builtins.str name: Name of the table. Example: `events`.
        :param Sequence['ServiceIntegrationClickhouseKafkaUserConfigTableTopicArgs'] topics: Kafka topics
        :param builtins.str auto_offset_reset: Enum: `beginning`, `earliest`, `end`, `largest`, `latest`, `smallest`. Action to take when there is no initial offset in offset store or the desired offset is out of range. Default: `earliest`.
        :param builtins.str date_time_input_format: Enum: `basic`, `best_effort`, `best_effort_us`. Method to read DateTime from text input formats. Default: `basic`.
        :param builtins.str handle_error_mode: Enum: `default`, `stream`. How to handle errors for Kafka engine. Default: `default`.
        :param builtins.int max_block_size: Number of row collected by poll(s) for flushing data from Kafka. Default: `0`.
        :param builtins.int max_rows_per_message: The maximum number of rows produced in one kafka message for row-based formats. Default: `1`.
        :param builtins.int num_consumers: The number of consumers per table per replica. Default: `1`.
        :param builtins.int poll_max_batch_size: Maximum amount of messages to be polled in a single Kafka poll. Default: `0`.
        :param builtins.int poll_max_timeout_ms: Timeout in milliseconds for a single poll from Kafka. Takes the value of the stream*flush*interval_ms server setting by default (500ms). Default: `0`.
        :param builtins.int skip_broken_messages: Skip at least this number of broken messages from Kafka topic per block. Default: `0`.
        :param builtins.bool thread_per_consumer: Provide an independent thread for each consumer. All consumers run in the same thread by default. Default: `false`.
        """
        pulumi.set(__self__, "columns", columns)
        pulumi.set(__self__, "data_format", data_format)
        pulumi.set(__self__, "group_name", group_name)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "topics", topics)
        if auto_offset_reset is not None:
            pulumi.set(__self__, "auto_offset_reset", auto_offset_reset)
        if date_time_input_format is not None:
            pulumi.set(__self__, "date_time_input_format", date_time_input_format)
        if handle_error_mode is not None:
            pulumi.set(__self__, "handle_error_mode", handle_error_mode)
        if max_block_size is not None:
            pulumi.set(__self__, "max_block_size", max_block_size)
        if max_rows_per_message is not None:
            pulumi.set(__self__, "max_rows_per_message", max_rows_per_message)
        if num_consumers is not None:
            pulumi.set(__self__, "num_consumers", num_consumers)
        if poll_max_batch_size is not None:
            pulumi.set(__self__, "poll_max_batch_size", poll_max_batch_size)
        if poll_max_timeout_ms is not None:
            pulumi.set(__self__, "poll_max_timeout_ms", poll_max_timeout_ms)
        if skip_broken_messages is not None:
            pulumi.set(__self__, "skip_broken_messages", skip_broken_messages)
        if thread_per_consumer is not None:
            pulumi.set(__self__, "thread_per_consumer", thread_per_consumer)

    @property
    @pulumi.getter
    def columns(self) -> Sequence['outputs.ServiceIntegrationClickhouseKafkaUserConfigTableColumn']:
        """
        Table columns
        """
        return pulumi.get(self, "columns")

    @property
    @pulumi.getter(name="dataFormat")
    def data_format(self) -> builtins.str:
        """
        Enum: `Avro`, `AvroConfluent`, `CSV`, `JSONAsString`, `JSONCompactEachRow`, `JSONCompactStringsEachRow`, `JSONEachRow`, `JSONStringsEachRow`, `MsgPack`, `Parquet`, `RawBLOB`, `TSKV`, `TSV`, `TabSeparated`. Message data format. Default: `JSONEachRow`.
        """
        return pulumi.get(self, "data_format")

    @property
    @pulumi.getter(name="groupName")
    def group_name(self) -> builtins.str:
        """
        Kafka consumers group. Default: `clickhouse`.
        """
        return pulumi.get(self, "group_name")

    @property
    @pulumi.getter
    def name(self) -> builtins.str:
        """
        Name of the table. Example: `events`.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def topics(self) -> Sequence['outputs.ServiceIntegrationClickhouseKafkaUserConfigTableTopic']:
        """
        Kafka topics
        """
        return pulumi.get(self, "topics")

    @property
    @pulumi.getter(name="autoOffsetReset")
    def auto_offset_reset(self) -> Optional[builtins.str]:
        """
        Enum: `beginning`, `earliest`, `end`, `largest`, `latest`, `smallest`. Action to take when there is no initial offset in offset store or the desired offset is out of range. Default: `earliest`.
        """
        return pulumi.get(self, "auto_offset_reset")

    @property
    @pulumi.getter(name="dateTimeInputFormat")
    def date_time_input_format(self) -> Optional[builtins.str]:
        """
        Enum: `basic`, `best_effort`, `best_effort_us`. Method to read DateTime from text input formats. Default: `basic`.
        """
        return pulumi.get(self, "date_time_input_format")

    @property
    @pulumi.getter(name="handleErrorMode")
    def handle_error_mode(self) -> Optional[builtins.str]:
        """
        Enum: `default`, `stream`. How to handle errors for Kafka engine. Default: `default`.
        """
        return pulumi.get(self, "handle_error_mode")

    @property
    @pulumi.getter(name="maxBlockSize")
    def max_block_size(self) -> Optional[builtins.int]:
        """
        Number of row collected by poll(s) for flushing data from Kafka. Default: `0`.
        """
        return pulumi.get(self, "max_block_size")

    @property
    @pulumi.getter(name="maxRowsPerMessage")
    def max_rows_per_message(self) -> Optional[builtins.int]:
        """
        The maximum number of rows produced in one kafka message for row-based formats. Default: `1`.
        """
        return pulumi.get(self, "max_rows_per_message")

    @property
    @pulumi.getter(name="numConsumers")
    def num_consumers(self) -> Optional[builtins.int]:
        """
        The number of consumers per table per replica. Default: `1`.
        """
        return pulumi.get(self, "num_consumers")

    @property
    @pulumi.getter(name="pollMaxBatchSize")
    def poll_max_batch_size(self) -> Optional[builtins.int]:
        """
        Maximum amount of messages to be polled in a single Kafka poll. Default: `0`.
        """
        return pulumi.get(self, "poll_max_batch_size")

    @property
    @pulumi.getter(name="pollMaxTimeoutMs")
    def poll_max_timeout_ms(self) -> Optional[builtins.int]:
        """
        Timeout in milliseconds for a single poll from Kafka. Takes the value of the stream*flush*interval_ms server setting by default (500ms). Default: `0`.
        """
        return pulumi.get(self, "poll_max_timeout_ms")

    @property
    @pulumi.getter(name="skipBrokenMessages")
    def skip_broken_messages(self) -> Optional[builtins.int]:
        """
        Skip at least this number of broken messages from Kafka topic per block. Default: `0`.
        """
        return pulumi.get(self, "skip_broken_messages")

    @property
    @pulumi.getter(name="threadPerConsumer")
    def thread_per_consumer(self) -> Optional[builtins.bool]:
        """
        Provide an independent thread for each consumer. All consumers run in the same thread by default. Default: `false`.
        """
        return pulumi.get(self, "thread_per_consumer")


@pulumi.output_type
class ServiceIntegrationClickhouseKafkaUserConfigTableColumn(dict):
    def __init__(__self__, *,
                 name: builtins.str,
                 type: builtins.str):
        """
        :param builtins.str name: Column name. Example: `key`.
        :param builtins.str type: Column type. Example: `UInt64`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def name(self) -> builtins.str:
        """
        Column name. Example: `key`.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def type(self) -> builtins.str:
        """
        Column type. Example: `UInt64`.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class ServiceIntegrationClickhouseKafkaUserConfigTableTopic(dict):
    def __init__(__self__, *,
                 name: builtins.str):
        """
        :param builtins.str name: Name of the topic. Example: `topic_name`.
        """
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def name(self) -> builtins.str:
        """
        Name of the topic. Example: `topic_name`.
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class ServiceIntegrationClickhousePostgresqlUserConfig(dict):
    def __init__(__self__, *,
                 databases: Optional[Sequence['outputs.ServiceIntegrationClickhousePostgresqlUserConfigDatabase']] = None):
        """
        :param Sequence['ServiceIntegrationClickhousePostgresqlUserConfigDatabaseArgs'] databases: Databases to expose
        """
        if databases is not None:
            pulumi.set(__self__, "databases", databases)

    @property
    @pulumi.getter
    def databases(self) -> Optional[Sequence['outputs.ServiceIntegrationClickhousePostgresqlUserConfigDatabase']]:
        """
        Databases to expose
        """
        return pulumi.get(self, "databases")


@pulumi.output_type
class ServiceIntegrationClickhousePostgresqlUserConfigDatabase(dict):
    def __init__(__self__, *,
                 database: Optional[builtins.str] = None,
                 schema: Optional[builtins.str] = None):
        """
        :param builtins.str database: PostgreSQL database to expose. Default: `defaultdb`.
        :param builtins.str schema: PostgreSQL schema to expose. Default: `public`.
        """
        if database is not None:
            pulumi.set(__self__, "database", database)
        if schema is not None:
            pulumi.set(__self__, "schema", schema)

    @property
    @pulumi.getter
    def database(self) -> Optional[builtins.str]:
        """
        PostgreSQL database to expose. Default: `defaultdb`.
        """
        return pulumi.get(self, "database")

    @property
    @pulumi.getter
    def schema(self) -> Optional[builtins.str]:
        """
        PostgreSQL schema to expose. Default: `public`.
        """
        return pulumi.get(self, "schema")


@pulumi.output_type
class ServiceIntegrationDatadogUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "datadogDbmEnabled":
            suggest = "datadog_dbm_enabled"
        elif key == "datadogPgbouncerEnabled":
            suggest = "datadog_pgbouncer_enabled"
        elif key == "datadogTags":
            suggest = "datadog_tags"
        elif key == "excludeConsumerGroups":
            suggest = "exclude_consumer_groups"
        elif key == "excludeTopics":
            suggest = "exclude_topics"
        elif key == "includeConsumerGroups":
            suggest = "include_consumer_groups"
        elif key == "includeTopics":
            suggest = "include_topics"
        elif key == "kafkaCustomMetrics":
            suggest = "kafka_custom_metrics"
        elif key == "maxJmxMetrics":
            suggest = "max_jmx_metrics"
        elif key == "mirrormakerCustomMetrics":
            suggest = "mirrormaker_custom_metrics"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationDatadogUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationDatadogUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationDatadogUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 datadog_dbm_enabled: Optional[builtins.bool] = None,
                 datadog_pgbouncer_enabled: Optional[builtins.bool] = None,
                 datadog_tags: Optional[Sequence['outputs.ServiceIntegrationDatadogUserConfigDatadogTag']] = None,
                 exclude_consumer_groups: Optional[Sequence[builtins.str]] = None,
                 exclude_topics: Optional[Sequence[builtins.str]] = None,
                 include_consumer_groups: Optional[Sequence[builtins.str]] = None,
                 include_topics: Optional[Sequence[builtins.str]] = None,
                 kafka_custom_metrics: Optional[Sequence[builtins.str]] = None,
                 max_jmx_metrics: Optional[builtins.int] = None,
                 mirrormaker_custom_metrics: Optional[Sequence[builtins.str]] = None,
                 opensearch: Optional['outputs.ServiceIntegrationDatadogUserConfigOpensearch'] = None,
                 redis: Optional['outputs.ServiceIntegrationDatadogUserConfigRedis'] = None):
        """
        :param builtins.bool datadog_dbm_enabled: Enable Datadog Database Monitoring.
        :param builtins.bool datadog_pgbouncer_enabled: Enable Datadog PgBouncer Metric Tracking.
        :param Sequence['ServiceIntegrationDatadogUserConfigDatadogTagArgs'] datadog_tags: Custom tags provided by user
        :param Sequence[builtins.str] exclude_consumer_groups: List of custom metrics.
        :param Sequence[builtins.str] exclude_topics: List of topics to exclude.
        :param Sequence[builtins.str] include_consumer_groups: List of custom metrics.
        :param Sequence[builtins.str] include_topics: List of topics to include.
        :param Sequence[builtins.str] kafka_custom_metrics: List of custom metrics.
        :param builtins.int max_jmx_metrics: Maximum number of JMX metrics to send. Example: `2000`.
        :param Sequence[builtins.str] mirrormaker_custom_metrics: List of custom metrics.
        :param 'ServiceIntegrationDatadogUserConfigOpensearchArgs' opensearch: Datadog Opensearch Options
        :param 'ServiceIntegrationDatadogUserConfigRedisArgs' redis: Datadog Redis Options
        """
        if datadog_dbm_enabled is not None:
            pulumi.set(__self__, "datadog_dbm_enabled", datadog_dbm_enabled)
        if datadog_pgbouncer_enabled is not None:
            pulumi.set(__self__, "datadog_pgbouncer_enabled", datadog_pgbouncer_enabled)
        if datadog_tags is not None:
            pulumi.set(__self__, "datadog_tags", datadog_tags)
        if exclude_consumer_groups is not None:
            pulumi.set(__self__, "exclude_consumer_groups", exclude_consumer_groups)
        if exclude_topics is not None:
            pulumi.set(__self__, "exclude_topics", exclude_topics)
        if include_consumer_groups is not None:
            pulumi.set(__self__, "include_consumer_groups", include_consumer_groups)
        if include_topics is not None:
            pulumi.set(__self__, "include_topics", include_topics)
        if kafka_custom_metrics is not None:
            pulumi.set(__self__, "kafka_custom_metrics", kafka_custom_metrics)
        if max_jmx_metrics is not None:
            pulumi.set(__self__, "max_jmx_metrics", max_jmx_metrics)
        if mirrormaker_custom_metrics is not None:
            pulumi.set(__self__, "mirrormaker_custom_metrics", mirrormaker_custom_metrics)
        if opensearch is not None:
            pulumi.set(__self__, "opensearch", opensearch)
        if redis is not None:
            pulumi.set(__self__, "redis", redis)

    @property
    @pulumi.getter(name="datadogDbmEnabled")
    def datadog_dbm_enabled(self) -> Optional[builtins.bool]:
        """
        Enable Datadog Database Monitoring.
        """
        return pulumi.get(self, "datadog_dbm_enabled")

    @property
    @pulumi.getter(name="datadogPgbouncerEnabled")
    def datadog_pgbouncer_enabled(self) -> Optional[builtins.bool]:
        """
        Enable Datadog PgBouncer Metric Tracking.
        """
        return pulumi.get(self, "datadog_pgbouncer_enabled")

    @property
    @pulumi.getter(name="datadogTags")
    def datadog_tags(self) -> Optional[Sequence['outputs.ServiceIntegrationDatadogUserConfigDatadogTag']]:
        """
        Custom tags provided by user
        """
        return pulumi.get(self, "datadog_tags")

    @property
    @pulumi.getter(name="excludeConsumerGroups")
    def exclude_consumer_groups(self) -> Optional[Sequence[builtins.str]]:
        """
        List of custom metrics.
        """
        return pulumi.get(self, "exclude_consumer_groups")

    @property
    @pulumi.getter(name="excludeTopics")
    def exclude_topics(self) -> Optional[Sequence[builtins.str]]:
        """
        List of topics to exclude.
        """
        return pulumi.get(self, "exclude_topics")

    @property
    @pulumi.getter(name="includeConsumerGroups")
    def include_consumer_groups(self) -> Optional[Sequence[builtins.str]]:
        """
        List of custom metrics.
        """
        return pulumi.get(self, "include_consumer_groups")

    @property
    @pulumi.getter(name="includeTopics")
    def include_topics(self) -> Optional[Sequence[builtins.str]]:
        """
        List of topics to include.
        """
        return pulumi.get(self, "include_topics")

    @property
    @pulumi.getter(name="kafkaCustomMetrics")
    def kafka_custom_metrics(self) -> Optional[Sequence[builtins.str]]:
        """
        List of custom metrics.
        """
        return pulumi.get(self, "kafka_custom_metrics")

    @property
    @pulumi.getter(name="maxJmxMetrics")
    def max_jmx_metrics(self) -> Optional[builtins.int]:
        """
        Maximum number of JMX metrics to send. Example: `2000`.
        """
        return pulumi.get(self, "max_jmx_metrics")

    @property
    @pulumi.getter(name="mirrormakerCustomMetrics")
    def mirrormaker_custom_metrics(self) -> Optional[Sequence[builtins.str]]:
        """
        List of custom metrics.
        """
        return pulumi.get(self, "mirrormaker_custom_metrics")

    @property
    @pulumi.getter
    def opensearch(self) -> Optional['outputs.ServiceIntegrationDatadogUserConfigOpensearch']:
        """
        Datadog Opensearch Options
        """
        return pulumi.get(self, "opensearch")

    @property
    @pulumi.getter
    def redis(self) -> Optional['outputs.ServiceIntegrationDatadogUserConfigRedis']:
        """
        Datadog Redis Options
        """
        return pulumi.get(self, "redis")


@pulumi.output_type
class ServiceIntegrationDatadogUserConfigDatadogTag(dict):
    def __init__(__self__, *,
                 tag: builtins.str,
                 comment: Optional[builtins.str] = None):
        """
        :param builtins.str tag: Tag format and usage are described here: https://docs.datadoghq.com/getting_started/tagging. Tags with prefix `aiven-` are reserved for Aiven. Example: `replica:primary`.
        :param builtins.str comment: Optional tag explanation. Example: `Used to tag primary replica metrics`.
        """
        pulumi.set(__self__, "tag", tag)
        if comment is not None:
            pulumi.set(__self__, "comment", comment)

    @property
    @pulumi.getter
    def tag(self) -> builtins.str:
        """
        Tag format and usage are described here: https://docs.datadoghq.com/getting_started/tagging. Tags with prefix `aiven-` are reserved for Aiven. Example: `replica:primary`.
        """
        return pulumi.get(self, "tag")

    @property
    @pulumi.getter
    def comment(self) -> Optional[builtins.str]:
        """
        Optional tag explanation. Example: `Used to tag primary replica metrics`.
        """
        return pulumi.get(self, "comment")


@pulumi.output_type
class ServiceIntegrationDatadogUserConfigOpensearch(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "clusterStatsEnabled":
            suggest = "cluster_stats_enabled"
        elif key == "indexStatsEnabled":
            suggest = "index_stats_enabled"
        elif key == "pendingTaskStatsEnabled":
            suggest = "pending_task_stats_enabled"
        elif key == "pshardStatsEnabled":
            suggest = "pshard_stats_enabled"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationDatadogUserConfigOpensearch. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationDatadogUserConfigOpensearch.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationDatadogUserConfigOpensearch.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 cluster_stats_enabled: Optional[builtins.bool] = None,
                 index_stats_enabled: Optional[builtins.bool] = None,
                 pending_task_stats_enabled: Optional[builtins.bool] = None,
                 pshard_stats_enabled: Optional[builtins.bool] = None):
        """
        :param builtins.bool cluster_stats_enabled: Enable Datadog Opensearch Cluster Monitoring.
        :param builtins.bool index_stats_enabled: Enable Datadog Opensearch Index Monitoring.
        :param builtins.bool pending_task_stats_enabled: Enable Datadog Opensearch Pending Task Monitoring.
        :param builtins.bool pshard_stats_enabled: Enable Datadog Opensearch Primary Shard Monitoring.
        """
        if cluster_stats_enabled is not None:
            pulumi.set(__self__, "cluster_stats_enabled", cluster_stats_enabled)
        if index_stats_enabled is not None:
            pulumi.set(__self__, "index_stats_enabled", index_stats_enabled)
        if pending_task_stats_enabled is not None:
            pulumi.set(__self__, "pending_task_stats_enabled", pending_task_stats_enabled)
        if pshard_stats_enabled is not None:
            pulumi.set(__self__, "pshard_stats_enabled", pshard_stats_enabled)

    @property
    @pulumi.getter(name="clusterStatsEnabled")
    def cluster_stats_enabled(self) -> Optional[builtins.bool]:
        """
        Enable Datadog Opensearch Cluster Monitoring.
        """
        return pulumi.get(self, "cluster_stats_enabled")

    @property
    @pulumi.getter(name="indexStatsEnabled")
    def index_stats_enabled(self) -> Optional[builtins.bool]:
        """
        Enable Datadog Opensearch Index Monitoring.
        """
        return pulumi.get(self, "index_stats_enabled")

    @property
    @pulumi.getter(name="pendingTaskStatsEnabled")
    def pending_task_stats_enabled(self) -> Optional[builtins.bool]:
        """
        Enable Datadog Opensearch Pending Task Monitoring.
        """
        return pulumi.get(self, "pending_task_stats_enabled")

    @property
    @pulumi.getter(name="pshardStatsEnabled")
    def pshard_stats_enabled(self) -> Optional[builtins.bool]:
        """
        Enable Datadog Opensearch Primary Shard Monitoring.
        """
        return pulumi.get(self, "pshard_stats_enabled")


@pulumi.output_type
class ServiceIntegrationDatadogUserConfigRedis(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "commandStatsEnabled":
            suggest = "command_stats_enabled"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationDatadogUserConfigRedis. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationDatadogUserConfigRedis.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationDatadogUserConfigRedis.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 command_stats_enabled: Optional[builtins.bool] = None):
        """
        :param builtins.bool command_stats_enabled: Enable command_stats option in the agent's configuration. Default: `false`.
        """
        if command_stats_enabled is not None:
            pulumi.set(__self__, "command_stats_enabled", command_stats_enabled)

    @property
    @pulumi.getter(name="commandStatsEnabled")
    def command_stats_enabled(self) -> Optional[builtins.bool]:
        """
        Enable command_stats option in the agent's configuration. Default: `false`.
        """
        return pulumi.get(self, "command_stats_enabled")


@pulumi.output_type
class ServiceIntegrationEndpointAutoscalerUserConfig(dict):
    def __init__(__self__, *,
                 autoscalings: Sequence['outputs.ServiceIntegrationEndpointAutoscalerUserConfigAutoscaling']):
        """
        :param Sequence['ServiceIntegrationEndpointAutoscalerUserConfigAutoscalingArgs'] autoscalings: Configure autoscaling thresholds for a service
        """
        pulumi.set(__self__, "autoscalings", autoscalings)

    @property
    @pulumi.getter
    def autoscalings(self) -> Sequence['outputs.ServiceIntegrationEndpointAutoscalerUserConfigAutoscaling']:
        """
        Configure autoscaling thresholds for a service
        """
        return pulumi.get(self, "autoscalings")


@pulumi.output_type
class ServiceIntegrationEndpointAutoscalerUserConfigAutoscaling(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "capGb":
            suggest = "cap_gb"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointAutoscalerUserConfigAutoscaling. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointAutoscalerUserConfigAutoscaling.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointAutoscalerUserConfigAutoscaling.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 cap_gb: builtins.int,
                 type: builtins.str):
        """
        :param builtins.int cap_gb: The maximum total disk size (in gb) to allow autoscaler to scale up to. Example: `300`.
        :param builtins.str type: Enum: `autoscale_disk`. Type of autoscale event.
        """
        pulumi.set(__self__, "cap_gb", cap_gb)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="capGb")
    def cap_gb(self) -> builtins.int:
        """
        The maximum total disk size (in gb) to allow autoscaler to scale up to. Example: `300`.
        """
        return pulumi.get(self, "cap_gb")

    @property
    @pulumi.getter
    def type(self) -> builtins.str:
        """
        Enum: `autoscale_disk`. Type of autoscale event.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class ServiceIntegrationEndpointDatadogUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "datadogApiKey":
            suggest = "datadog_api_key"
        elif key == "datadogTags":
            suggest = "datadog_tags"
        elif key == "disableConsumerStats":
            suggest = "disable_consumer_stats"
        elif key == "extraTagsPrefix":
            suggest = "extra_tags_prefix"
        elif key == "kafkaConsumerCheckInstances":
            suggest = "kafka_consumer_check_instances"
        elif key == "kafkaConsumerStatsTimeout":
            suggest = "kafka_consumer_stats_timeout"
        elif key == "maxPartitionContexts":
            suggest = "max_partition_contexts"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointDatadogUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointDatadogUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointDatadogUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 datadog_api_key: builtins.str,
                 datadog_tags: Optional[Sequence['outputs.ServiceIntegrationEndpointDatadogUserConfigDatadogTag']] = None,
                 disable_consumer_stats: Optional[builtins.bool] = None,
                 extra_tags_prefix: Optional[builtins.str] = None,
                 kafka_consumer_check_instances: Optional[builtins.int] = None,
                 kafka_consumer_stats_timeout: Optional[builtins.int] = None,
                 max_partition_contexts: Optional[builtins.int] = None,
                 site: Optional[builtins.str] = None):
        """
        :param builtins.str datadog_api_key: Datadog API key. Example: `848f30907c15c55d601fe45487cce9b6`.
        :param Sequence['ServiceIntegrationEndpointDatadogUserConfigDatadogTagArgs'] datadog_tags: Custom tags provided by user
        :param builtins.bool disable_consumer_stats: Disable consumer group metrics.
        :param builtins.str extra_tags_prefix: Extra tags prefix. Defaults to aiven.
        :param builtins.int kafka_consumer_check_instances: Number of separate instances to fetch kafka consumer statistics with. Example: `8`.
        :param builtins.int kafka_consumer_stats_timeout: Number of seconds that datadog will wait to get consumer statistics from brokers. Example: `60`.
        :param builtins.int max_partition_contexts: Maximum number of partition contexts to send. Example: `32000`.
        :param builtins.str site: Enum: `ap1.datadoghq.com`, `datadoghq.com`, `datadoghq.eu`, `ddog-gov.com`, `us3.datadoghq.com`, `us5.datadoghq.com`. Datadog intake site. Defaults to datadoghq.com.
        """
        pulumi.set(__self__, "datadog_api_key", datadog_api_key)
        if datadog_tags is not None:
            pulumi.set(__self__, "datadog_tags", datadog_tags)
        if disable_consumer_stats is not None:
            pulumi.set(__self__, "disable_consumer_stats", disable_consumer_stats)
        if extra_tags_prefix is not None:
            pulumi.set(__self__, "extra_tags_prefix", extra_tags_prefix)
        if kafka_consumer_check_instances is not None:
            pulumi.set(__self__, "kafka_consumer_check_instances", kafka_consumer_check_instances)
        if kafka_consumer_stats_timeout is not None:
            pulumi.set(__self__, "kafka_consumer_stats_timeout", kafka_consumer_stats_timeout)
        if max_partition_contexts is not None:
            pulumi.set(__self__, "max_partition_contexts", max_partition_contexts)
        if site is not None:
            pulumi.set(__self__, "site", site)

    @property
    @pulumi.getter(name="datadogApiKey")
    def datadog_api_key(self) -> builtins.str:
        """
        Datadog API key. Example: `848f30907c15c55d601fe45487cce9b6`.
        """
        return pulumi.get(self, "datadog_api_key")

    @property
    @pulumi.getter(name="datadogTags")
    def datadog_tags(self) -> Optional[Sequence['outputs.ServiceIntegrationEndpointDatadogUserConfigDatadogTag']]:
        """
        Custom tags provided by user
        """
        return pulumi.get(self, "datadog_tags")

    @property
    @pulumi.getter(name="disableConsumerStats")
    def disable_consumer_stats(self) -> Optional[builtins.bool]:
        """
        Disable consumer group metrics.
        """
        return pulumi.get(self, "disable_consumer_stats")

    @property
    @pulumi.getter(name="extraTagsPrefix")
    def extra_tags_prefix(self) -> Optional[builtins.str]:
        """
        Extra tags prefix. Defaults to aiven.
        """
        return pulumi.get(self, "extra_tags_prefix")

    @property
    @pulumi.getter(name="kafkaConsumerCheckInstances")
    def kafka_consumer_check_instances(self) -> Optional[builtins.int]:
        """
        Number of separate instances to fetch kafka consumer statistics with. Example: `8`.
        """
        return pulumi.get(self, "kafka_consumer_check_instances")

    @property
    @pulumi.getter(name="kafkaConsumerStatsTimeout")
    def kafka_consumer_stats_timeout(self) -> Optional[builtins.int]:
        """
        Number of seconds that datadog will wait to get consumer statistics from brokers. Example: `60`.
        """
        return pulumi.get(self, "kafka_consumer_stats_timeout")

    @property
    @pulumi.getter(name="maxPartitionContexts")
    def max_partition_contexts(self) -> Optional[builtins.int]:
        """
        Maximum number of partition contexts to send. Example: `32000`.
        """
        return pulumi.get(self, "max_partition_contexts")

    @property
    @pulumi.getter
    def site(self) -> Optional[builtins.str]:
        """
        Enum: `ap1.datadoghq.com`, `datadoghq.com`, `datadoghq.eu`, `ddog-gov.com`, `us3.datadoghq.com`, `us5.datadoghq.com`. Datadog intake site. Defaults to datadoghq.com.
        """
        return pulumi.get(self, "site")


@pulumi.output_type
class ServiceIntegrationEndpointDatadogUserConfigDatadogTag(dict):
    def __init__(__self__, *,
                 tag: builtins.str,
                 comment: Optional[builtins.str] = None):
        """
        :param builtins.str tag: Tag format and usage are described here: https://docs.datadoghq.com/getting_started/tagging. Tags with prefix `aiven-` are reserved for Aiven. Example: `replica:primary`.
        :param builtins.str comment: Optional tag explanation. Example: `Used to tag primary replica metrics`.
        """
        pulumi.set(__self__, "tag", tag)
        if comment is not None:
            pulumi.set(__self__, "comment", comment)

    @property
    @pulumi.getter
    def tag(self) -> builtins.str:
        """
        Tag format and usage are described here: https://docs.datadoghq.com/getting_started/tagging. Tags with prefix `aiven-` are reserved for Aiven. Example: `replica:primary`.
        """
        return pulumi.get(self, "tag")

    @property
    @pulumi.getter
    def comment(self) -> Optional[builtins.str]:
        """
        Optional tag explanation. Example: `Used to tag primary replica metrics`.
        """
        return pulumi.get(self, "comment")


@pulumi.output_type
class ServiceIntegrationEndpointExternalAwsCloudwatchLogsUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "accessKey":
            suggest = "access_key"
        elif key == "secretKey":
            suggest = "secret_key"
        elif key == "logGroupName":
            suggest = "log_group_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointExternalAwsCloudwatchLogsUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointExternalAwsCloudwatchLogsUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointExternalAwsCloudwatchLogsUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 access_key: builtins.str,
                 region: builtins.str,
                 secret_key: builtins.str,
                 log_group_name: Optional[builtins.str] = None):
        """
        :param builtins.str access_key: AWS access key. Required permissions are logs:CreateLogGroup, logs:CreateLogStream, logs:PutLogEvents and logs:DescribeLogStreams. Example: `AAAAAAAAAAAAAAAAAAAA`.
        :param builtins.str region: AWS region. Example: `us-east-1`.
        :param builtins.str secret_key: AWS secret key. Example: `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`.
        :param builtins.str log_group_name: AWS CloudWatch log group name. Example: `my-log-group`.
        """
        pulumi.set(__self__, "access_key", access_key)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "secret_key", secret_key)
        if log_group_name is not None:
            pulumi.set(__self__, "log_group_name", log_group_name)

    @property
    @pulumi.getter(name="accessKey")
    def access_key(self) -> builtins.str:
        """
        AWS access key. Required permissions are logs:CreateLogGroup, logs:CreateLogStream, logs:PutLogEvents and logs:DescribeLogStreams. Example: `AAAAAAAAAAAAAAAAAAAA`.
        """
        return pulumi.get(self, "access_key")

    @property
    @pulumi.getter
    def region(self) -> builtins.str:
        """
        AWS region. Example: `us-east-1`.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="secretKey")
    def secret_key(self) -> builtins.str:
        """
        AWS secret key. Example: `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`.
        """
        return pulumi.get(self, "secret_key")

    @property
    @pulumi.getter(name="logGroupName")
    def log_group_name(self) -> Optional[builtins.str]:
        """
        AWS CloudWatch log group name. Example: `my-log-group`.
        """
        return pulumi.get(self, "log_group_name")


@pulumi.output_type
class ServiceIntegrationEndpointExternalAwsCloudwatchMetricsUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "accessKey":
            suggest = "access_key"
        elif key == "secretKey":
            suggest = "secret_key"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointExternalAwsCloudwatchMetricsUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointExternalAwsCloudwatchMetricsUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointExternalAwsCloudwatchMetricsUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 access_key: builtins.str,
                 namespace: builtins.str,
                 region: builtins.str,
                 secret_key: builtins.str):
        """
        :param builtins.str access_key: AWS access key. Required permissions are cloudwatch:PutMetricData. Example: `AAAAAAAAAAAAAAAAAAAA`.
        :param builtins.str namespace: AWS CloudWatch Metrics Namespace. Example: `my-metrics-namespace`.
        :param builtins.str region: AWS region. Example: `us-east-1`.
        :param builtins.str secret_key: AWS secret key. Example: `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`.
        """
        pulumi.set(__self__, "access_key", access_key)
        pulumi.set(__self__, "namespace", namespace)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "secret_key", secret_key)

    @property
    @pulumi.getter(name="accessKey")
    def access_key(self) -> builtins.str:
        """
        AWS access key. Required permissions are cloudwatch:PutMetricData. Example: `AAAAAAAAAAAAAAAAAAAA`.
        """
        return pulumi.get(self, "access_key")

    @property
    @pulumi.getter
    def namespace(self) -> builtins.str:
        """
        AWS CloudWatch Metrics Namespace. Example: `my-metrics-namespace`.
        """
        return pulumi.get(self, "namespace")

    @property
    @pulumi.getter
    def region(self) -> builtins.str:
        """
        AWS region. Example: `us-east-1`.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="secretKey")
    def secret_key(self) -> builtins.str:
        """
        AWS secret key. Example: `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`.
        """
        return pulumi.get(self, "secret_key")


@pulumi.output_type
class ServiceIntegrationEndpointExternalAwsS3UserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "accessKeyId":
            suggest = "access_key_id"
        elif key == "secretAccessKey":
            suggest = "secret_access_key"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointExternalAwsS3UserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointExternalAwsS3UserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointExternalAwsS3UserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 access_key_id: builtins.str,
                 secret_access_key: builtins.str,
                 url: builtins.str):
        """
        :param builtins.str access_key_id: Access Key Id. Example: `AAAAAAAAAAAAAAAAAAA`.
        :param builtins.str secret_access_key: Secret Access Key. Example: `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`.
        :param builtins.str url: S3-compatible bucket URL. Example: `https://mybucket.s3-myregion.amazonaws.com/mydataset/`.
        """
        pulumi.set(__self__, "access_key_id", access_key_id)
        pulumi.set(__self__, "secret_access_key", secret_access_key)
        pulumi.set(__self__, "url", url)

    @property
    @pulumi.getter(name="accessKeyId")
    def access_key_id(self) -> builtins.str:
        """
        Access Key Id. Example: `AAAAAAAAAAAAAAAAAAA`.
        """
        return pulumi.get(self, "access_key_id")

    @property
    @pulumi.getter(name="secretAccessKey")
    def secret_access_key(self) -> builtins.str:
        """
        Secret Access Key. Example: `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`.
        """
        return pulumi.get(self, "secret_access_key")

    @property
    @pulumi.getter
    def url(self) -> builtins.str:
        """
        S3-compatible bucket URL. Example: `https://mybucket.s3-myregion.amazonaws.com/mydataset/`.
        """
        return pulumi.get(self, "url")


@pulumi.output_type
class ServiceIntegrationEndpointExternalAzureBlobStorageUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionString":
            suggest = "connection_string"
        elif key == "blobPath":
            suggest = "blob_path"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointExternalAzureBlobStorageUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointExternalAzureBlobStorageUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointExternalAzureBlobStorageUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 connection_string: builtins.str,
                 container: builtins.str,
                 blob_path: Optional[builtins.str] = None):
        """
        :param builtins.str connection_string: Azure Blob Storage connection string. Example: `AccountName=IDENT;AccountKey=SECRET`.
        :param builtins.str container: Container. Example: `container-dev`.
        :param builtins.str blob_path: Blob path. Example: `path/to/blob/file.csv`.
        """
        pulumi.set(__self__, "connection_string", connection_string)
        pulumi.set(__self__, "container", container)
        if blob_path is not None:
            pulumi.set(__self__, "blob_path", blob_path)

    @property
    @pulumi.getter(name="connectionString")
    def connection_string(self) -> builtins.str:
        """
        Azure Blob Storage connection string. Example: `AccountName=IDENT;AccountKey=SECRET`.
        """
        return pulumi.get(self, "connection_string")

    @property
    @pulumi.getter
    def container(self) -> builtins.str:
        """
        Container. Example: `container-dev`.
        """
        return pulumi.get(self, "container")

    @property
    @pulumi.getter(name="blobPath")
    def blob_path(self) -> Optional[builtins.str]:
        """
        Blob path. Example: `path/to/blob/file.csv`.
        """
        return pulumi.get(self, "blob_path")


@pulumi.output_type
class ServiceIntegrationEndpointExternalClickhouseUserConfig(dict):
    def __init__(__self__, *,
                 host: builtins.str,
                 password: builtins.str,
                 port: builtins.int,
                 username: builtins.str):
        """
        :param builtins.str host: Hostname or IP address of the server. Example: `my.server.com`.
        :param builtins.str password: Password. Example: `jjKk45Nnd`.
        :param builtins.int port: Secure TCP server port. Example: `9440`.
        :param builtins.str username: User name. Example: `default`.
        """
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Hostname or IP address of the server. Example: `my.server.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def password(self) -> builtins.str:
        """
        Password. Example: `jjKk45Nnd`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Secure TCP server port. Example: `9440`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def username(self) -> builtins.str:
        """
        User name. Example: `default`.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class ServiceIntegrationEndpointExternalElasticsearchLogsUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "indexPrefix":
            suggest = "index_prefix"
        elif key == "indexDaysMax":
            suggest = "index_days_max"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointExternalElasticsearchLogsUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointExternalElasticsearchLogsUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointExternalElasticsearchLogsUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 index_prefix: builtins.str,
                 url: builtins.str,
                 ca: Optional[builtins.str] = None,
                 index_days_max: Optional[builtins.int] = None,
                 timeout: Optional[builtins.float] = None):
        """
        :param builtins.str index_prefix: Elasticsearch index prefix. Default: `logs`.
        :param builtins.str url: Elasticsearch connection URL. Example: `https://user:passwd@logs.example.com/`.
        :param builtins.str ca: PEM encoded CA certificate. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        :param builtins.int index_days_max: Maximum number of days of logs to keep. Default: `3`.
        :param builtins.float timeout: Elasticsearch request timeout limit. Default: `10.0`.
        """
        pulumi.set(__self__, "index_prefix", index_prefix)
        pulumi.set(__self__, "url", url)
        if ca is not None:
            pulumi.set(__self__, "ca", ca)
        if index_days_max is not None:
            pulumi.set(__self__, "index_days_max", index_days_max)
        if timeout is not None:
            pulumi.set(__self__, "timeout", timeout)

    @property
    @pulumi.getter(name="indexPrefix")
    def index_prefix(self) -> builtins.str:
        """
        Elasticsearch index prefix. Default: `logs`.
        """
        return pulumi.get(self, "index_prefix")

    @property
    @pulumi.getter
    def url(self) -> builtins.str:
        """
        Elasticsearch connection URL. Example: `https://user:passwd@logs.example.com/`.
        """
        return pulumi.get(self, "url")

    @property
    @pulumi.getter
    def ca(self) -> Optional[builtins.str]:
        """
        PEM encoded CA certificate. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "ca")

    @property
    @pulumi.getter(name="indexDaysMax")
    def index_days_max(self) -> Optional[builtins.int]:
        """
        Maximum number of days of logs to keep. Default: `3`.
        """
        return pulumi.get(self, "index_days_max")

    @property
    @pulumi.getter
    def timeout(self) -> Optional[builtins.float]:
        """
        Elasticsearch request timeout limit. Default: `10.0`.
        """
        return pulumi.get(self, "timeout")


@pulumi.output_type
class ServiceIntegrationEndpointExternalGoogleCloudBigquery(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "projectId":
            suggest = "project_id"
        elif key == "serviceAccountCredentials":
            suggest = "service_account_credentials"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointExternalGoogleCloudBigquery. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointExternalGoogleCloudBigquery.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointExternalGoogleCloudBigquery.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 project_id: builtins.str,
                 service_account_credentials: builtins.str):
        """
        :param builtins.str project_id: GCP project id. Example: `snappy-photon-12345`.
        :param builtins.str service_account_credentials: This is a JSON object with the fields documented in https://cloud.google.com/iam/docs/creating-managing-service-account-keys. Example: `{"type": "service_account", ...`.
        """
        pulumi.set(__self__, "project_id", project_id)
        pulumi.set(__self__, "service_account_credentials", service_account_credentials)

    @property
    @pulumi.getter(name="projectId")
    def project_id(self) -> builtins.str:
        """
        GCP project id. Example: `snappy-photon-12345`.
        """
        return pulumi.get(self, "project_id")

    @property
    @pulumi.getter(name="serviceAccountCredentials")
    def service_account_credentials(self) -> builtins.str:
        """
        This is a JSON object with the fields documented in https://cloud.google.com/iam/docs/creating-managing-service-account-keys. Example: `{"type": "service_account", ...`.
        """
        return pulumi.get(self, "service_account_credentials")


@pulumi.output_type
class ServiceIntegrationEndpointExternalGoogleCloudLoggingUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "logId":
            suggest = "log_id"
        elif key == "projectId":
            suggest = "project_id"
        elif key == "serviceAccountCredentials":
            suggest = "service_account_credentials"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointExternalGoogleCloudLoggingUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointExternalGoogleCloudLoggingUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointExternalGoogleCloudLoggingUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 log_id: builtins.str,
                 project_id: builtins.str,
                 service_account_credentials: builtins.str):
        """
        :param builtins.str log_id: Google Cloud Logging log id. Example: `syslog`.
        :param builtins.str project_id: GCP project id. Example: `snappy-photon-12345`.
        :param builtins.str service_account_credentials: This is a JSON object with the fields documented in https://cloud.google.com/iam/docs/creating-managing-service-account-keys. Example: `{"type": "service_account", ...`.
        """
        pulumi.set(__self__, "log_id", log_id)
        pulumi.set(__self__, "project_id", project_id)
        pulumi.set(__self__, "service_account_credentials", service_account_credentials)

    @property
    @pulumi.getter(name="logId")
    def log_id(self) -> builtins.str:
        """
        Google Cloud Logging log id. Example: `syslog`.
        """
        return pulumi.get(self, "log_id")

    @property
    @pulumi.getter(name="projectId")
    def project_id(self) -> builtins.str:
        """
        GCP project id. Example: `snappy-photon-12345`.
        """
        return pulumi.get(self, "project_id")

    @property
    @pulumi.getter(name="serviceAccountCredentials")
    def service_account_credentials(self) -> builtins.str:
        """
        This is a JSON object with the fields documented in https://cloud.google.com/iam/docs/creating-managing-service-account-keys. Example: `{"type": "service_account", ...`.
        """
        return pulumi.get(self, "service_account_credentials")


@pulumi.output_type
class ServiceIntegrationEndpointExternalKafkaUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "bootstrapServers":
            suggest = "bootstrap_servers"
        elif key == "securityProtocol":
            suggest = "security_protocol"
        elif key == "saslMechanism":
            suggest = "sasl_mechanism"
        elif key == "saslPlainPassword":
            suggest = "sasl_plain_password"
        elif key == "saslPlainUsername":
            suggest = "sasl_plain_username"
        elif key == "sslCaCert":
            suggest = "ssl_ca_cert"
        elif key == "sslClientCert":
            suggest = "ssl_client_cert"
        elif key == "sslClientKey":
            suggest = "ssl_client_key"
        elif key == "sslEndpointIdentificationAlgorithm":
            suggest = "ssl_endpoint_identification_algorithm"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointExternalKafkaUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointExternalKafkaUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointExternalKafkaUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 bootstrap_servers: builtins.str,
                 security_protocol: builtins.str,
                 sasl_mechanism: Optional[builtins.str] = None,
                 sasl_plain_password: Optional[builtins.str] = None,
                 sasl_plain_username: Optional[builtins.str] = None,
                 ssl_ca_cert: Optional[builtins.str] = None,
                 ssl_client_cert: Optional[builtins.str] = None,
                 ssl_client_key: Optional[builtins.str] = None,
                 ssl_endpoint_identification_algorithm: Optional[builtins.str] = None):
        """
        :param builtins.str bootstrap_servers: Bootstrap servers. Example: `10.0.0.1:9092,10.0.0.2:9092`.
        :param builtins.str security_protocol: Enum: `PLAINTEXT`, `SASL_PLAINTEXT`, `SASL_SSL`, `SSL`. Security protocol.
        :param builtins.str sasl_mechanism: Enum: `PLAIN`, `SCRAM-SHA-256`, `SCRAM-SHA-512`. SASL mechanism used for connections to the Kafka server.
        :param builtins.str sasl_plain_password: Password for SASL PLAIN mechanism in the Kafka server. Example: `admin`.
        :param builtins.str sasl_plain_username: Username for SASL PLAIN mechanism in the Kafka server. Example: `admin`.
        :param builtins.str ssl_ca_cert: PEM-encoded CA certificate. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        :param builtins.str ssl_client_cert: PEM-encoded client certificate. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        :param builtins.str ssl_client_key: PEM-encoded client key. Example: `-----BEGIN PRIVATE KEY-----
               ...
               -----END PRIVATE KEY-----
               `.
        :param builtins.str ssl_endpoint_identification_algorithm: Enum: `https`. The endpoint identification algorithm to validate server hostname using server certificate.
        """
        pulumi.set(__self__, "bootstrap_servers", bootstrap_servers)
        pulumi.set(__self__, "security_protocol", security_protocol)
        if sasl_mechanism is not None:
            pulumi.set(__self__, "sasl_mechanism", sasl_mechanism)
        if sasl_plain_password is not None:
            pulumi.set(__self__, "sasl_plain_password", sasl_plain_password)
        if sasl_plain_username is not None:
            pulumi.set(__self__, "sasl_plain_username", sasl_plain_username)
        if ssl_ca_cert is not None:
            pulumi.set(__self__, "ssl_ca_cert", ssl_ca_cert)
        if ssl_client_cert is not None:
            pulumi.set(__self__, "ssl_client_cert", ssl_client_cert)
        if ssl_client_key is not None:
            pulumi.set(__self__, "ssl_client_key", ssl_client_key)
        if ssl_endpoint_identification_algorithm is not None:
            pulumi.set(__self__, "ssl_endpoint_identification_algorithm", ssl_endpoint_identification_algorithm)

    @property
    @pulumi.getter(name="bootstrapServers")
    def bootstrap_servers(self) -> builtins.str:
        """
        Bootstrap servers. Example: `10.0.0.1:9092,10.0.0.2:9092`.
        """
        return pulumi.get(self, "bootstrap_servers")

    @property
    @pulumi.getter(name="securityProtocol")
    def security_protocol(self) -> builtins.str:
        """
        Enum: `PLAINTEXT`, `SASL_PLAINTEXT`, `SASL_SSL`, `SSL`. Security protocol.
        """
        return pulumi.get(self, "security_protocol")

    @property
    @pulumi.getter(name="saslMechanism")
    def sasl_mechanism(self) -> Optional[builtins.str]:
        """
        Enum: `PLAIN`, `SCRAM-SHA-256`, `SCRAM-SHA-512`. SASL mechanism used for connections to the Kafka server.
        """
        return pulumi.get(self, "sasl_mechanism")

    @property
    @pulumi.getter(name="saslPlainPassword")
    def sasl_plain_password(self) -> Optional[builtins.str]:
        """
        Password for SASL PLAIN mechanism in the Kafka server. Example: `admin`.
        """
        return pulumi.get(self, "sasl_plain_password")

    @property
    @pulumi.getter(name="saslPlainUsername")
    def sasl_plain_username(self) -> Optional[builtins.str]:
        """
        Username for SASL PLAIN mechanism in the Kafka server. Example: `admin`.
        """
        return pulumi.get(self, "sasl_plain_username")

    @property
    @pulumi.getter(name="sslCaCert")
    def ssl_ca_cert(self) -> Optional[builtins.str]:
        """
        PEM-encoded CA certificate. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "ssl_ca_cert")

    @property
    @pulumi.getter(name="sslClientCert")
    def ssl_client_cert(self) -> Optional[builtins.str]:
        """
        PEM-encoded client certificate. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "ssl_client_cert")

    @property
    @pulumi.getter(name="sslClientKey")
    def ssl_client_key(self) -> Optional[builtins.str]:
        """
        PEM-encoded client key. Example: `-----BEGIN PRIVATE KEY-----
        ...
        -----END PRIVATE KEY-----
        `.
        """
        return pulumi.get(self, "ssl_client_key")

    @property
    @pulumi.getter(name="sslEndpointIdentificationAlgorithm")
    def ssl_endpoint_identification_algorithm(self) -> Optional[builtins.str]:
        """
        Enum: `https`. The endpoint identification algorithm to validate server hostname using server certificate.
        """
        return pulumi.get(self, "ssl_endpoint_identification_algorithm")


@pulumi.output_type
class ServiceIntegrationEndpointExternalMysqlUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "sslMode":
            suggest = "ssl_mode"
        elif key == "sslRootCert":
            suggest = "ssl_root_cert"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointExternalMysqlUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointExternalMysqlUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointExternalMysqlUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 host: builtins.str,
                 password: builtins.str,
                 port: builtins.int,
                 username: builtins.str,
                 ssl_mode: Optional[builtins.str] = None,
                 ssl_root_cert: Optional[builtins.str] = None):
        """
        :param builtins.str host: Hostname or IP address of the server. Example: `my.server.com`.
        :param builtins.str password: Password. Example: `jjKk45Nnd`.
        :param builtins.int port: Port number of the server. Example: `5432`.
        :param builtins.str username: User name. Example: `myname`.
        :param builtins.str ssl_mode: Enum: `verify-full`. SSL Mode. Default: `verify-full`.
        :param builtins.str ssl_root_cert: SSL Root Cert. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        """
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "username", username)
        if ssl_mode is not None:
            pulumi.set(__self__, "ssl_mode", ssl_mode)
        if ssl_root_cert is not None:
            pulumi.set(__self__, "ssl_root_cert", ssl_root_cert)

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Hostname or IP address of the server. Example: `my.server.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def password(self) -> builtins.str:
        """
        Password. Example: `jjKk45Nnd`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number of the server. Example: `5432`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def username(self) -> builtins.str:
        """
        User name. Example: `myname`.
        """
        return pulumi.get(self, "username")

    @property
    @pulumi.getter(name="sslMode")
    def ssl_mode(self) -> Optional[builtins.str]:
        """
        Enum: `verify-full`. SSL Mode. Default: `verify-full`.
        """
        return pulumi.get(self, "ssl_mode")

    @property
    @pulumi.getter(name="sslRootCert")
    def ssl_root_cert(self) -> Optional[builtins.str]:
        """
        SSL Root Cert. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "ssl_root_cert")


@pulumi.output_type
class ServiceIntegrationEndpointExternalOpensearchLogsUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "indexPrefix":
            suggest = "index_prefix"
        elif key == "indexDaysMax":
            suggest = "index_days_max"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointExternalOpensearchLogsUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointExternalOpensearchLogsUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointExternalOpensearchLogsUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 index_prefix: builtins.str,
                 url: builtins.str,
                 ca: Optional[builtins.str] = None,
                 index_days_max: Optional[builtins.int] = None,
                 timeout: Optional[builtins.float] = None):
        """
        :param builtins.str index_prefix: OpenSearch index prefix. Default: `logs`.
        :param builtins.str url: OpenSearch connection URL. Example: `https://user:passwd@logs.example.com/`.
        :param builtins.str ca: PEM encoded CA certificate. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        :param builtins.int index_days_max: Maximum number of days of logs to keep. Default: `3`.
        :param builtins.float timeout: OpenSearch request timeout limit. Default: `10.0`.
        """
        pulumi.set(__self__, "index_prefix", index_prefix)
        pulumi.set(__self__, "url", url)
        if ca is not None:
            pulumi.set(__self__, "ca", ca)
        if index_days_max is not None:
            pulumi.set(__self__, "index_days_max", index_days_max)
        if timeout is not None:
            pulumi.set(__self__, "timeout", timeout)

    @property
    @pulumi.getter(name="indexPrefix")
    def index_prefix(self) -> builtins.str:
        """
        OpenSearch index prefix. Default: `logs`.
        """
        return pulumi.get(self, "index_prefix")

    @property
    @pulumi.getter
    def url(self) -> builtins.str:
        """
        OpenSearch connection URL. Example: `https://user:passwd@logs.example.com/`.
        """
        return pulumi.get(self, "url")

    @property
    @pulumi.getter
    def ca(self) -> Optional[builtins.str]:
        """
        PEM encoded CA certificate. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "ca")

    @property
    @pulumi.getter(name="indexDaysMax")
    def index_days_max(self) -> Optional[builtins.int]:
        """
        Maximum number of days of logs to keep. Default: `3`.
        """
        return pulumi.get(self, "index_days_max")

    @property
    @pulumi.getter
    def timeout(self) -> Optional[builtins.float]:
        """
        OpenSearch request timeout limit. Default: `10.0`.
        """
        return pulumi.get(self, "timeout")


@pulumi.output_type
class ServiceIntegrationEndpointExternalPostgresql(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "defaultDatabase":
            suggest = "default_database"
        elif key == "sslClientCertificate":
            suggest = "ssl_client_certificate"
        elif key == "sslClientKey":
            suggest = "ssl_client_key"
        elif key == "sslMode":
            suggest = "ssl_mode"
        elif key == "sslRootCert":
            suggest = "ssl_root_cert"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointExternalPostgresql. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointExternalPostgresql.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointExternalPostgresql.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 host: builtins.str,
                 port: builtins.int,
                 username: builtins.str,
                 default_database: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 ssl_client_certificate: Optional[builtins.str] = None,
                 ssl_client_key: Optional[builtins.str] = None,
                 ssl_mode: Optional[builtins.str] = None,
                 ssl_root_cert: Optional[builtins.str] = None):
        """
        :param builtins.str host: Hostname or IP address of the server. Example: `my.server.com`.
        :param builtins.int port: Port number of the server. Example: `5432`.
        :param builtins.str username: User name. Example: `myname`.
        :param builtins.str default_database: Default database. Example: `testdb`.
        :param builtins.str password: Password. Example: `jjKk45Nnd`.
        :param builtins.str ssl_client_certificate: Client certificate. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        :param builtins.str ssl_client_key: Client key. Example: `-----BEGIN PRIVATE KEY-----
               ...
               -----END PRIVATE KEY-----`.
        :param builtins.str ssl_mode: Enum: `allow`, `disable`, `prefer`, `require`, `verify-ca`, `verify-full`. SSL mode to use for the connection.  Please note that Aiven requires TLS for all connections to external PostgreSQL services. Default: `verify-full`.
        :param builtins.str ssl_root_cert: SSL Root Cert. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        """
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "username", username)
        if default_database is not None:
            pulumi.set(__self__, "default_database", default_database)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssl_client_certificate is not None:
            pulumi.set(__self__, "ssl_client_certificate", ssl_client_certificate)
        if ssl_client_key is not None:
            pulumi.set(__self__, "ssl_client_key", ssl_client_key)
        if ssl_mode is not None:
            pulumi.set(__self__, "ssl_mode", ssl_mode)
        if ssl_root_cert is not None:
            pulumi.set(__self__, "ssl_root_cert", ssl_root_cert)

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Hostname or IP address of the server. Example: `my.server.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number of the server. Example: `5432`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def username(self) -> builtins.str:
        """
        User name. Example: `myname`.
        """
        return pulumi.get(self, "username")

    @property
    @pulumi.getter(name="defaultDatabase")
    def default_database(self) -> Optional[builtins.str]:
        """
        Default database. Example: `testdb`.
        """
        return pulumi.get(self, "default_database")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        Password. Example: `jjKk45Nnd`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter(name="sslClientCertificate")
    def ssl_client_certificate(self) -> Optional[builtins.str]:
        """
        Client certificate. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "ssl_client_certificate")

    @property
    @pulumi.getter(name="sslClientKey")
    def ssl_client_key(self) -> Optional[builtins.str]:
        """
        Client key. Example: `-----BEGIN PRIVATE KEY-----
        ...
        -----END PRIVATE KEY-----`.
        """
        return pulumi.get(self, "ssl_client_key")

    @property
    @pulumi.getter(name="sslMode")
    def ssl_mode(self) -> Optional[builtins.str]:
        """
        Enum: `allow`, `disable`, `prefer`, `require`, `verify-ca`, `verify-full`. SSL mode to use for the connection.  Please note that Aiven requires TLS for all connections to external PostgreSQL services. Default: `verify-full`.
        """
        return pulumi.get(self, "ssl_mode")

    @property
    @pulumi.getter(name="sslRootCert")
    def ssl_root_cert(self) -> Optional[builtins.str]:
        """
        SSL Root Cert. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "ssl_root_cert")


@pulumi.output_type
class ServiceIntegrationEndpointExternalPrometheusUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "basicAuthPassword":
            suggest = "basic_auth_password"
        elif key == "basicAuthUsername":
            suggest = "basic_auth_username"
        elif key == "serviceUri":
            suggest = "service_uri"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointExternalPrometheusUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointExternalPrometheusUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointExternalPrometheusUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 basic_auth_password: Optional[builtins.str] = None,
                 basic_auth_username: Optional[builtins.str] = None,
                 service_uri: Optional[builtins.str] = None):
        """
        :param builtins.str basic_auth_password: Prometheus basic authentication password. Example: `fhyFNBjj3R`.
        :param builtins.str basic_auth_username: Prometheus basic authentication username. Example: `prom4851`.
        :param builtins.str service_uri: Prometheus enabled write endpoint. Example: `https://write.example.com/`.
        """
        if basic_auth_password is not None:
            pulumi.set(__self__, "basic_auth_password", basic_auth_password)
        if basic_auth_username is not None:
            pulumi.set(__self__, "basic_auth_username", basic_auth_username)
        if service_uri is not None:
            pulumi.set(__self__, "service_uri", service_uri)

    @property
    @pulumi.getter(name="basicAuthPassword")
    def basic_auth_password(self) -> Optional[builtins.str]:
        """
        Prometheus basic authentication password. Example: `fhyFNBjj3R`.
        """
        return pulumi.get(self, "basic_auth_password")

    @property
    @pulumi.getter(name="basicAuthUsername")
    def basic_auth_username(self) -> Optional[builtins.str]:
        """
        Prometheus basic authentication username. Example: `prom4851`.
        """
        return pulumi.get(self, "basic_auth_username")

    @property
    @pulumi.getter(name="serviceUri")
    def service_uri(self) -> Optional[builtins.str]:
        """
        Prometheus enabled write endpoint. Example: `https://write.example.com/`.
        """
        return pulumi.get(self, "service_uri")


@pulumi.output_type
class ServiceIntegrationEndpointExternalSchemaRegistryUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "basicAuthPassword":
            suggest = "basic_auth_password"
        elif key == "basicAuthUsername":
            suggest = "basic_auth_username"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointExternalSchemaRegistryUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointExternalSchemaRegistryUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointExternalSchemaRegistryUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 authentication: builtins.str,
                 url: builtins.str,
                 basic_auth_password: Optional[builtins.str] = None,
                 basic_auth_username: Optional[builtins.str] = None):
        """
        :param builtins.str authentication: Enum: `basic`, `none`. Authentication method.
        :param builtins.str url: Schema Registry URL. Example: `https://schema-registry.kafka.company.com:28419`.
        :param builtins.str basic_auth_password: Basic authentication password. Example: `Zm9vYg==`.
        :param builtins.str basic_auth_username: Basic authentication user name. Example: `avnadmin`.
        """
        pulumi.set(__self__, "authentication", authentication)
        pulumi.set(__self__, "url", url)
        if basic_auth_password is not None:
            pulumi.set(__self__, "basic_auth_password", basic_auth_password)
        if basic_auth_username is not None:
            pulumi.set(__self__, "basic_auth_username", basic_auth_username)

    @property
    @pulumi.getter
    def authentication(self) -> builtins.str:
        """
        Enum: `basic`, `none`. Authentication method.
        """
        return pulumi.get(self, "authentication")

    @property
    @pulumi.getter
    def url(self) -> builtins.str:
        """
        Schema Registry URL. Example: `https://schema-registry.kafka.company.com:28419`.
        """
        return pulumi.get(self, "url")

    @property
    @pulumi.getter(name="basicAuthPassword")
    def basic_auth_password(self) -> Optional[builtins.str]:
        """
        Basic authentication password. Example: `Zm9vYg==`.
        """
        return pulumi.get(self, "basic_auth_password")

    @property
    @pulumi.getter(name="basicAuthUsername")
    def basic_auth_username(self) -> Optional[builtins.str]:
        """
        Basic authentication user name. Example: `avnadmin`.
        """
        return pulumi.get(self, "basic_auth_username")


@pulumi.output_type
class ServiceIntegrationEndpointJolokiaUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "basicAuthPassword":
            suggest = "basic_auth_password"
        elif key == "basicAuthUsername":
            suggest = "basic_auth_username"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointJolokiaUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointJolokiaUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointJolokiaUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 basic_auth_password: Optional[builtins.str] = None,
                 basic_auth_username: Optional[builtins.str] = None):
        """
        :param builtins.str basic_auth_password: Jolokia basic authentication password. Example: `yhfBNFii4C`.
        :param builtins.str basic_auth_username: Jolokia basic authentication username. Example: `jol48k51`.
        """
        if basic_auth_password is not None:
            pulumi.set(__self__, "basic_auth_password", basic_auth_password)
        if basic_auth_username is not None:
            pulumi.set(__self__, "basic_auth_username", basic_auth_username)

    @property
    @pulumi.getter(name="basicAuthPassword")
    def basic_auth_password(self) -> Optional[builtins.str]:
        """
        Jolokia basic authentication password. Example: `yhfBNFii4C`.
        """
        return pulumi.get(self, "basic_auth_password")

    @property
    @pulumi.getter(name="basicAuthUsername")
    def basic_auth_username(self) -> Optional[builtins.str]:
        """
        Jolokia basic authentication username. Example: `jol48k51`.
        """
        return pulumi.get(self, "basic_auth_username")


@pulumi.output_type
class ServiceIntegrationEndpointPrometheusUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "basicAuthPassword":
            suggest = "basic_auth_password"
        elif key == "basicAuthUsername":
            suggest = "basic_auth_username"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointPrometheusUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointPrometheusUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointPrometheusUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 basic_auth_password: Optional[builtins.str] = None,
                 basic_auth_username: Optional[builtins.str] = None):
        """
        :param builtins.str basic_auth_password: Prometheus basic authentication password. Example: `fhyFNBjj3R`.
        :param builtins.str basic_auth_username: Prometheus basic authentication username. Example: `prom4851`.
        """
        if basic_auth_password is not None:
            pulumi.set(__self__, "basic_auth_password", basic_auth_password)
        if basic_auth_username is not None:
            pulumi.set(__self__, "basic_auth_username", basic_auth_username)

    @property
    @pulumi.getter(name="basicAuthPassword")
    def basic_auth_password(self) -> Optional[builtins.str]:
        """
        Prometheus basic authentication password. Example: `fhyFNBjj3R`.
        """
        return pulumi.get(self, "basic_auth_password")

    @property
    @pulumi.getter(name="basicAuthUsername")
    def basic_auth_username(self) -> Optional[builtins.str]:
        """
        Prometheus basic authentication username. Example: `prom4851`.
        """
        return pulumi.get(self, "basic_auth_username")


@pulumi.output_type
class ServiceIntegrationEndpointRsyslogUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "maxMessageSize":
            suggest = "max_message_size"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationEndpointRsyslogUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationEndpointRsyslogUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationEndpointRsyslogUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 format: builtins.str,
                 port: builtins.int,
                 server: builtins.str,
                 tls: builtins.bool,
                 ca: Optional[builtins.str] = None,
                 cert: Optional[builtins.str] = None,
                 key: Optional[builtins.str] = None,
                 logline: Optional[builtins.str] = None,
                 max_message_size: Optional[builtins.int] = None,
                 sd: Optional[builtins.str] = None):
        """
        :param builtins.str format: Enum: `custom`, `rfc3164`, `rfc5424`. Message format. Default: `rfc5424`.
        :param builtins.int port: Rsyslog server port. Default: `514`.
        :param builtins.str server: Rsyslog server IP address or hostname. Example: `logs.example.com`.
        :param builtins.bool tls: Require TLS. Default: `true`.
        :param builtins.str ca: PEM encoded CA certificate. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        :param builtins.str cert: PEM encoded client certificate. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        :param builtins.str key: PEM encoded client key. Example: `-----BEGIN PRIVATE KEY-----
               ...
               -----END PRIVATE KEY-----
               `.
        :param builtins.str logline: Custom syslog message format. Example: `<%pri%>%timestamp:::date-rfc3339% %HOSTNAME% %app-name% %msg%`.
        :param builtins.int max_message_size: Rsyslog max message size. Default: `8192`.
        :param builtins.str sd: Structured data block for log message. Example: `TOKEN tag="LiteralValue"`.
        """
        pulumi.set(__self__, "format", format)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "tls", tls)
        if ca is not None:
            pulumi.set(__self__, "ca", ca)
        if cert is not None:
            pulumi.set(__self__, "cert", cert)
        if key is not None:
            pulumi.set(__self__, "key", key)
        if logline is not None:
            pulumi.set(__self__, "logline", logline)
        if max_message_size is not None:
            pulumi.set(__self__, "max_message_size", max_message_size)
        if sd is not None:
            pulumi.set(__self__, "sd", sd)

    @property
    @pulumi.getter
    def format(self) -> builtins.str:
        """
        Enum: `custom`, `rfc3164`, `rfc5424`. Message format. Default: `rfc5424`.
        """
        return pulumi.get(self, "format")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Rsyslog server port. Default: `514`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def server(self) -> builtins.str:
        """
        Rsyslog server IP address or hostname. Example: `logs.example.com`.
        """
        return pulumi.get(self, "server")

    @property
    @pulumi.getter
    def tls(self) -> builtins.bool:
        """
        Require TLS. Default: `true`.
        """
        return pulumi.get(self, "tls")

    @property
    @pulumi.getter
    def ca(self) -> Optional[builtins.str]:
        """
        PEM encoded CA certificate. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "ca")

    @property
    @pulumi.getter
    def cert(self) -> Optional[builtins.str]:
        """
        PEM encoded client certificate. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "cert")

    @property
    @pulumi.getter
    def key(self) -> Optional[builtins.str]:
        """
        PEM encoded client key. Example: `-----BEGIN PRIVATE KEY-----
        ...
        -----END PRIVATE KEY-----
        `.
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def logline(self) -> Optional[builtins.str]:
        """
        Custom syslog message format. Example: `<%pri%>%timestamp:::date-rfc3339% %HOSTNAME% %app-name% %msg%`.
        """
        return pulumi.get(self, "logline")

    @property
    @pulumi.getter(name="maxMessageSize")
    def max_message_size(self) -> Optional[builtins.int]:
        """
        Rsyslog max message size. Default: `8192`.
        """
        return pulumi.get(self, "max_message_size")

    @property
    @pulumi.getter
    def sd(self) -> Optional[builtins.str]:
        """
        Structured data block for log message. Example: `TOKEN tag="LiteralValue"`.
        """
        return pulumi.get(self, "sd")


@pulumi.output_type
class ServiceIntegrationExternalAwsCloudwatchLogsUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "selectedLogFields":
            suggest = "selected_log_fields"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationExternalAwsCloudwatchLogsUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationExternalAwsCloudwatchLogsUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationExternalAwsCloudwatchLogsUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 selected_log_fields: Optional[Sequence[builtins.str]] = None):
        """
        :param Sequence[builtins.str] selected_log_fields: The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        if selected_log_fields is not None:
            pulumi.set(__self__, "selected_log_fields", selected_log_fields)

    @property
    @pulumi.getter(name="selectedLogFields")
    def selected_log_fields(self) -> Optional[Sequence[builtins.str]]:
        """
        The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        return pulumi.get(self, "selected_log_fields")


@pulumi.output_type
class ServiceIntegrationExternalAwsCloudwatchMetricsUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "droppedMetrics":
            suggest = "dropped_metrics"
        elif key == "extraMetrics":
            suggest = "extra_metrics"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationExternalAwsCloudwatchMetricsUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationExternalAwsCloudwatchMetricsUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationExternalAwsCloudwatchMetricsUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 dropped_metrics: Optional[Sequence['outputs.ServiceIntegrationExternalAwsCloudwatchMetricsUserConfigDroppedMetric']] = None,
                 extra_metrics: Optional[Sequence['outputs.ServiceIntegrationExternalAwsCloudwatchMetricsUserConfigExtraMetric']] = None):
        """
        :param Sequence['ServiceIntegrationExternalAwsCloudwatchMetricsUserConfigDroppedMetricArgs'] dropped_metrics: Metrics to not send to AWS CloudWatch (takes precedence over extra*metrics)
        :param Sequence['ServiceIntegrationExternalAwsCloudwatchMetricsUserConfigExtraMetricArgs'] extra_metrics: Metrics to allow through to AWS CloudWatch (in addition to default metrics)
        """
        if dropped_metrics is not None:
            pulumi.set(__self__, "dropped_metrics", dropped_metrics)
        if extra_metrics is not None:
            pulumi.set(__self__, "extra_metrics", extra_metrics)

    @property
    @pulumi.getter(name="droppedMetrics")
    def dropped_metrics(self) -> Optional[Sequence['outputs.ServiceIntegrationExternalAwsCloudwatchMetricsUserConfigDroppedMetric']]:
        """
        Metrics to not send to AWS CloudWatch (takes precedence over extra*metrics)
        """
        return pulumi.get(self, "dropped_metrics")

    @property
    @pulumi.getter(name="extraMetrics")
    def extra_metrics(self) -> Optional[Sequence['outputs.ServiceIntegrationExternalAwsCloudwatchMetricsUserConfigExtraMetric']]:
        """
        Metrics to allow through to AWS CloudWatch (in addition to default metrics)
        """
        return pulumi.get(self, "extra_metrics")


@pulumi.output_type
class ServiceIntegrationExternalAwsCloudwatchMetricsUserConfigDroppedMetric(dict):
    def __init__(__self__, *,
                 field: builtins.str,
                 metric: builtins.str):
        """
        :param builtins.str field: Identifier of a value in the metric. Example: `used`.
        :param builtins.str metric: Identifier of the metric. Example: `java.lang:Memory`.
        """
        pulumi.set(__self__, "field", field)
        pulumi.set(__self__, "metric", metric)

    @property
    @pulumi.getter
    def field(self) -> builtins.str:
        """
        Identifier of a value in the metric. Example: `used`.
        """
        return pulumi.get(self, "field")

    @property
    @pulumi.getter
    def metric(self) -> builtins.str:
        """
        Identifier of the metric. Example: `java.lang:Memory`.
        """
        return pulumi.get(self, "metric")


@pulumi.output_type
class ServiceIntegrationExternalAwsCloudwatchMetricsUserConfigExtraMetric(dict):
    def __init__(__self__, *,
                 field: builtins.str,
                 metric: builtins.str):
        """
        :param builtins.str field: Identifier of a value in the metric. Example: `used`.
        :param builtins.str metric: Identifier of the metric. Example: `java.lang:Memory`.
        """
        pulumi.set(__self__, "field", field)
        pulumi.set(__self__, "metric", metric)

    @property
    @pulumi.getter
    def field(self) -> builtins.str:
        """
        Identifier of a value in the metric. Example: `used`.
        """
        return pulumi.get(self, "field")

    @property
    @pulumi.getter
    def metric(self) -> builtins.str:
        """
        Identifier of the metric. Example: `java.lang:Memory`.
        """
        return pulumi.get(self, "metric")


@pulumi.output_type
class ServiceIntegrationExternalElasticsearchLogsUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "selectedLogFields":
            suggest = "selected_log_fields"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationExternalElasticsearchLogsUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationExternalElasticsearchLogsUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationExternalElasticsearchLogsUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 selected_log_fields: Optional[Sequence[builtins.str]] = None):
        """
        :param Sequence[builtins.str] selected_log_fields: The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        if selected_log_fields is not None:
            pulumi.set(__self__, "selected_log_fields", selected_log_fields)

    @property
    @pulumi.getter(name="selectedLogFields")
    def selected_log_fields(self) -> Optional[Sequence[builtins.str]]:
        """
        The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        return pulumi.get(self, "selected_log_fields")


@pulumi.output_type
class ServiceIntegrationExternalOpensearchLogsUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "selectedLogFields":
            suggest = "selected_log_fields"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationExternalOpensearchLogsUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationExternalOpensearchLogsUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationExternalOpensearchLogsUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 selected_log_fields: Optional[Sequence[builtins.str]] = None):
        """
        :param Sequence[builtins.str] selected_log_fields: The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        if selected_log_fields is not None:
            pulumi.set(__self__, "selected_log_fields", selected_log_fields)

    @property
    @pulumi.getter(name="selectedLogFields")
    def selected_log_fields(self) -> Optional[Sequence[builtins.str]]:
        """
        The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        return pulumi.get(self, "selected_log_fields")


@pulumi.output_type
class ServiceIntegrationFlinkExternalPostgresqlUserConfig(dict):
    def __init__(__self__, *,
                 stringtype: Optional[builtins.str] = None):
        """
        :param builtins.str stringtype: Enum: `unspecified`. If stringtype is set to unspecified, parameters will be sent to the server as untyped values.
        """
        if stringtype is not None:
            pulumi.set(__self__, "stringtype", stringtype)

    @property
    @pulumi.getter
    def stringtype(self) -> Optional[builtins.str]:
        """
        Enum: `unspecified`. If stringtype is set to unspecified, parameters will be sent to the server as untyped values.
        """
        return pulumi.get(self, "stringtype")


@pulumi.output_type
class ServiceIntegrationKafkaConnectUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "kafkaConnect":
            suggest = "kafka_connect"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationKafkaConnectUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationKafkaConnectUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationKafkaConnectUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 kafka_connect: Optional['outputs.ServiceIntegrationKafkaConnectUserConfigKafkaConnect'] = None):
        """
        :param 'ServiceIntegrationKafkaConnectUserConfigKafkaConnectArgs' kafka_connect: Kafka Connect service configuration values
        """
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional['outputs.ServiceIntegrationKafkaConnectUserConfigKafkaConnect']:
        """
        Kafka Connect service configuration values
        """
        return pulumi.get(self, "kafka_connect")


@pulumi.output_type
class ServiceIntegrationKafkaConnectUserConfigKafkaConnect(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "configStorageTopic":
            suggest = "config_storage_topic"
        elif key == "groupId":
            suggest = "group_id"
        elif key == "offsetStorageTopic":
            suggest = "offset_storage_topic"
        elif key == "statusStorageTopic":
            suggest = "status_storage_topic"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationKafkaConnectUserConfigKafkaConnect. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationKafkaConnectUserConfigKafkaConnect.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationKafkaConnectUserConfigKafkaConnect.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 config_storage_topic: Optional[builtins.str] = None,
                 group_id: Optional[builtins.str] = None,
                 offset_storage_topic: Optional[builtins.str] = None,
                 status_storage_topic: Optional[builtins.str] = None):
        """
        :param builtins.str config_storage_topic: The name of the topic where connector and task configuration data are stored.This must be the same for all workers with the same group_id. Example: `__connect_configs`.
        :param builtins.str group_id: A unique string that identifies the Connect cluster group this worker belongs to. Example: `connect`.
        :param builtins.str offset_storage_topic: The name of the topic where connector and task configuration offsets are stored.This must be the same for all workers with the same group_id. Example: `__connect_offsets`.
        :param builtins.str status_storage_topic: The name of the topic where connector and task configuration status updates are stored.This must be the same for all workers with the same group_id. Example: `__connect_status`.
        """
        if config_storage_topic is not None:
            pulumi.set(__self__, "config_storage_topic", config_storage_topic)
        if group_id is not None:
            pulumi.set(__self__, "group_id", group_id)
        if offset_storage_topic is not None:
            pulumi.set(__self__, "offset_storage_topic", offset_storage_topic)
        if status_storage_topic is not None:
            pulumi.set(__self__, "status_storage_topic", status_storage_topic)

    @property
    @pulumi.getter(name="configStorageTopic")
    def config_storage_topic(self) -> Optional[builtins.str]:
        """
        The name of the topic where connector and task configuration data are stored.This must be the same for all workers with the same group_id. Example: `__connect_configs`.
        """
        return pulumi.get(self, "config_storage_topic")

    @property
    @pulumi.getter(name="groupId")
    def group_id(self) -> Optional[builtins.str]:
        """
        A unique string that identifies the Connect cluster group this worker belongs to. Example: `connect`.
        """
        return pulumi.get(self, "group_id")

    @property
    @pulumi.getter(name="offsetStorageTopic")
    def offset_storage_topic(self) -> Optional[builtins.str]:
        """
        The name of the topic where connector and task configuration offsets are stored.This must be the same for all workers with the same group_id. Example: `__connect_offsets`.
        """
        return pulumi.get(self, "offset_storage_topic")

    @property
    @pulumi.getter(name="statusStorageTopic")
    def status_storage_topic(self) -> Optional[builtins.str]:
        """
        The name of the topic where connector and task configuration status updates are stored.This must be the same for all workers with the same group_id. Example: `__connect_status`.
        """
        return pulumi.get(self, "status_storage_topic")


@pulumi.output_type
class ServiceIntegrationKafkaLogsUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "kafkaTopic":
            suggest = "kafka_topic"
        elif key == "selectedLogFields":
            suggest = "selected_log_fields"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationKafkaLogsUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationKafkaLogsUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationKafkaLogsUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 kafka_topic: builtins.str,
                 selected_log_fields: Optional[Sequence[builtins.str]] = None):
        """
        :param builtins.str kafka_topic: Topic name. Example: `mytopic`.
        :param Sequence[builtins.str] selected_log_fields: The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        pulumi.set(__self__, "kafka_topic", kafka_topic)
        if selected_log_fields is not None:
            pulumi.set(__self__, "selected_log_fields", selected_log_fields)

    @property
    @pulumi.getter(name="kafkaTopic")
    def kafka_topic(self) -> builtins.str:
        """
        Topic name. Example: `mytopic`.
        """
        return pulumi.get(self, "kafka_topic")

    @property
    @pulumi.getter(name="selectedLogFields")
    def selected_log_fields(self) -> Optional[Sequence[builtins.str]]:
        """
        The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        return pulumi.get(self, "selected_log_fields")


@pulumi.output_type
class ServiceIntegrationKafkaMirrormakerUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "clusterAlias":
            suggest = "cluster_alias"
        elif key == "kafkaMirrormaker":
            suggest = "kafka_mirrormaker"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationKafkaMirrormakerUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationKafkaMirrormakerUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationKafkaMirrormakerUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 cluster_alias: Optional[builtins.str] = None,
                 kafka_mirrormaker: Optional['outputs.ServiceIntegrationKafkaMirrormakerUserConfigKafkaMirrormaker'] = None):
        """
        :param builtins.str cluster_alias: The alias under which the Kafka cluster is known to MirrorMaker. Can contain the following symbols: ASCII alphanumerics, `.`, `_`, and `-`. Example: `kafka-abc`.
        :param 'ServiceIntegrationKafkaMirrormakerUserConfigKafkaMirrormakerArgs' kafka_mirrormaker: Kafka MirrorMaker configuration values
        """
        if cluster_alias is not None:
            pulumi.set(__self__, "cluster_alias", cluster_alias)
        if kafka_mirrormaker is not None:
            pulumi.set(__self__, "kafka_mirrormaker", kafka_mirrormaker)

    @property
    @pulumi.getter(name="clusterAlias")
    def cluster_alias(self) -> Optional[builtins.str]:
        """
        The alias under which the Kafka cluster is known to MirrorMaker. Can contain the following symbols: ASCII alphanumerics, `.`, `_`, and `-`. Example: `kafka-abc`.
        """
        return pulumi.get(self, "cluster_alias")

    @property
    @pulumi.getter(name="kafkaMirrormaker")
    def kafka_mirrormaker(self) -> Optional['outputs.ServiceIntegrationKafkaMirrormakerUserConfigKafkaMirrormaker']:
        """
        Kafka MirrorMaker configuration values
        """
        return pulumi.get(self, "kafka_mirrormaker")


@pulumi.output_type
class ServiceIntegrationKafkaMirrormakerUserConfigKafkaMirrormaker(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "consumerAutoOffsetReset":
            suggest = "consumer_auto_offset_reset"
        elif key == "consumerFetchMinBytes":
            suggest = "consumer_fetch_min_bytes"
        elif key == "consumerMaxPollRecords":
            suggest = "consumer_max_poll_records"
        elif key == "producerBatchSize":
            suggest = "producer_batch_size"
        elif key == "producerBufferMemory":
            suggest = "producer_buffer_memory"
        elif key == "producerCompressionType":
            suggest = "producer_compression_type"
        elif key == "producerLingerMs":
            suggest = "producer_linger_ms"
        elif key == "producerMaxRequestSize":
            suggest = "producer_max_request_size"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationKafkaMirrormakerUserConfigKafkaMirrormaker. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationKafkaMirrormakerUserConfigKafkaMirrormaker.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationKafkaMirrormakerUserConfigKafkaMirrormaker.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 consumer_auto_offset_reset: Optional[builtins.str] = None,
                 consumer_fetch_min_bytes: Optional[builtins.int] = None,
                 consumer_max_poll_records: Optional[builtins.int] = None,
                 producer_batch_size: Optional[builtins.int] = None,
                 producer_buffer_memory: Optional[builtins.int] = None,
                 producer_compression_type: Optional[builtins.str] = None,
                 producer_linger_ms: Optional[builtins.int] = None,
                 producer_max_request_size: Optional[builtins.int] = None):
        """
        :param builtins.str consumer_auto_offset_reset: Enum: `earliest`, `latest`. Set where consumer starts to consume data. Value `earliest`: Start replication from the earliest offset. Value `latest`: Start replication from the latest offset. Default is `earliest`.
        :param builtins.int consumer_fetch_min_bytes: The minimum amount of data the server should return for a fetch request. Example: `1024`.
        :param builtins.int consumer_max_poll_records: Set consumer max.poll.records. The default is 500. Example: `500`.
        :param builtins.int producer_batch_size: The batch size in bytes producer will attempt to collect before publishing to broker. Example: `1024`.
        :param builtins.int producer_buffer_memory: The amount of bytes producer can use for buffering data before publishing to broker. Example: `8388608`.
        :param builtins.str producer_compression_type: Enum: `gzip`, `lz4`, `none`, `snappy`, `zstd`. Specify the default compression type for producers. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `none` which is the default and equivalent to no compression.
        :param builtins.int producer_linger_ms: The linger time (ms) for waiting new data to arrive for publishing. Example: `100`.
        :param builtins.int producer_max_request_size: The maximum request size in bytes. Example: `1048576`.
        """
        if consumer_auto_offset_reset is not None:
            pulumi.set(__self__, "consumer_auto_offset_reset", consumer_auto_offset_reset)
        if consumer_fetch_min_bytes is not None:
            pulumi.set(__self__, "consumer_fetch_min_bytes", consumer_fetch_min_bytes)
        if consumer_max_poll_records is not None:
            pulumi.set(__self__, "consumer_max_poll_records", consumer_max_poll_records)
        if producer_batch_size is not None:
            pulumi.set(__self__, "producer_batch_size", producer_batch_size)
        if producer_buffer_memory is not None:
            pulumi.set(__self__, "producer_buffer_memory", producer_buffer_memory)
        if producer_compression_type is not None:
            pulumi.set(__self__, "producer_compression_type", producer_compression_type)
        if producer_linger_ms is not None:
            pulumi.set(__self__, "producer_linger_ms", producer_linger_ms)
        if producer_max_request_size is not None:
            pulumi.set(__self__, "producer_max_request_size", producer_max_request_size)

    @property
    @pulumi.getter(name="consumerAutoOffsetReset")
    def consumer_auto_offset_reset(self) -> Optional[builtins.str]:
        """
        Enum: `earliest`, `latest`. Set where consumer starts to consume data. Value `earliest`: Start replication from the earliest offset. Value `latest`: Start replication from the latest offset. Default is `earliest`.
        """
        return pulumi.get(self, "consumer_auto_offset_reset")

    @property
    @pulumi.getter(name="consumerFetchMinBytes")
    def consumer_fetch_min_bytes(self) -> Optional[builtins.int]:
        """
        The minimum amount of data the server should return for a fetch request. Example: `1024`.
        """
        return pulumi.get(self, "consumer_fetch_min_bytes")

    @property
    @pulumi.getter(name="consumerMaxPollRecords")
    def consumer_max_poll_records(self) -> Optional[builtins.int]:
        """
        Set consumer max.poll.records. The default is 500. Example: `500`.
        """
        return pulumi.get(self, "consumer_max_poll_records")

    @property
    @pulumi.getter(name="producerBatchSize")
    def producer_batch_size(self) -> Optional[builtins.int]:
        """
        The batch size in bytes producer will attempt to collect before publishing to broker. Example: `1024`.
        """
        return pulumi.get(self, "producer_batch_size")

    @property
    @pulumi.getter(name="producerBufferMemory")
    def producer_buffer_memory(self) -> Optional[builtins.int]:
        """
        The amount of bytes producer can use for buffering data before publishing to broker. Example: `8388608`.
        """
        return pulumi.get(self, "producer_buffer_memory")

    @property
    @pulumi.getter(name="producerCompressionType")
    def producer_compression_type(self) -> Optional[builtins.str]:
        """
        Enum: `gzip`, `lz4`, `none`, `snappy`, `zstd`. Specify the default compression type for producers. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `none` which is the default and equivalent to no compression.
        """
        return pulumi.get(self, "producer_compression_type")

    @property
    @pulumi.getter(name="producerLingerMs")
    def producer_linger_ms(self) -> Optional[builtins.int]:
        """
        The linger time (ms) for waiting new data to arrive for publishing. Example: `100`.
        """
        return pulumi.get(self, "producer_linger_ms")

    @property
    @pulumi.getter(name="producerMaxRequestSize")
    def producer_max_request_size(self) -> Optional[builtins.int]:
        """
        The maximum request size in bytes. Example: `1048576`.
        """
        return pulumi.get(self, "producer_max_request_size")


@pulumi.output_type
class ServiceIntegrationLogsUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "elasticsearchIndexDaysMax":
            suggest = "elasticsearch_index_days_max"
        elif key == "elasticsearchIndexPrefix":
            suggest = "elasticsearch_index_prefix"
        elif key == "selectedLogFields":
            suggest = "selected_log_fields"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationLogsUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationLogsUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationLogsUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 elasticsearch_index_days_max: Optional[builtins.int] = None,
                 elasticsearch_index_prefix: Optional[builtins.str] = None,
                 selected_log_fields: Optional[Sequence[builtins.str]] = None):
        """
        :param builtins.int elasticsearch_index_days_max: Elasticsearch index retention limit. Default: `3`.
        :param builtins.str elasticsearch_index_prefix: Elasticsearch index prefix. Default: `logs`.
        :param Sequence[builtins.str] selected_log_fields: The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        if elasticsearch_index_days_max is not None:
            pulumi.set(__self__, "elasticsearch_index_days_max", elasticsearch_index_days_max)
        if elasticsearch_index_prefix is not None:
            pulumi.set(__self__, "elasticsearch_index_prefix", elasticsearch_index_prefix)
        if selected_log_fields is not None:
            pulumi.set(__self__, "selected_log_fields", selected_log_fields)

    @property
    @pulumi.getter(name="elasticsearchIndexDaysMax")
    def elasticsearch_index_days_max(self) -> Optional[builtins.int]:
        """
        Elasticsearch index retention limit. Default: `3`.
        """
        return pulumi.get(self, "elasticsearch_index_days_max")

    @property
    @pulumi.getter(name="elasticsearchIndexPrefix")
    def elasticsearch_index_prefix(self) -> Optional[builtins.str]:
        """
        Elasticsearch index prefix. Default: `logs`.
        """
        return pulumi.get(self, "elasticsearch_index_prefix")

    @property
    @pulumi.getter(name="selectedLogFields")
    def selected_log_fields(self) -> Optional[Sequence[builtins.str]]:
        """
        The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        return pulumi.get(self, "selected_log_fields")


@pulumi.output_type
class ServiceIntegrationMetricsUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "retentionDays":
            suggest = "retention_days"
        elif key == "roUsername":
            suggest = "ro_username"
        elif key == "sourceMysql":
            suggest = "source_mysql"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationMetricsUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationMetricsUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationMetricsUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 database: Optional[builtins.str] = None,
                 retention_days: Optional[builtins.int] = None,
                 ro_username: Optional[builtins.str] = None,
                 source_mysql: Optional['outputs.ServiceIntegrationMetricsUserConfigSourceMysql'] = None,
                 username: Optional[builtins.str] = None):
        """
        :param builtins.str database: Name of the database where to store metric datapoints. Only affects PostgreSQL destinations. Defaults to `metrics`. Note that this must be the same for all metrics integrations that write data to the same PostgreSQL service.
        :param builtins.int retention_days: Number of days to keep old metrics. Only affects PostgreSQL destinations. Set to 0 for no automatic cleanup. Defaults to 30 days.
        :param builtins.str ro_username: Name of a user that can be used to read metrics. This will be used for Grafana integration (if enabled) to prevent Grafana users from making undesired changes. Only affects PostgreSQL destinations. Defaults to `metrics_reader`. Note that this must be the same for all metrics integrations that write data to the same PostgreSQL service.
        :param 'ServiceIntegrationMetricsUserConfigSourceMysqlArgs' source_mysql: Configuration options for metrics where source service is MySQL
        :param builtins.str username: Name of the user used to write metrics. Only affects PostgreSQL destinations. Defaults to `metrics_writer`. Note that this must be the same for all metrics integrations that write data to the same PostgreSQL service.
        """
        if database is not None:
            pulumi.set(__self__, "database", database)
        if retention_days is not None:
            pulumi.set(__self__, "retention_days", retention_days)
        if ro_username is not None:
            pulumi.set(__self__, "ro_username", ro_username)
        if source_mysql is not None:
            pulumi.set(__self__, "source_mysql", source_mysql)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def database(self) -> Optional[builtins.str]:
        """
        Name of the database where to store metric datapoints. Only affects PostgreSQL destinations. Defaults to `metrics`. Note that this must be the same for all metrics integrations that write data to the same PostgreSQL service.
        """
        return pulumi.get(self, "database")

    @property
    @pulumi.getter(name="retentionDays")
    def retention_days(self) -> Optional[builtins.int]:
        """
        Number of days to keep old metrics. Only affects PostgreSQL destinations. Set to 0 for no automatic cleanup. Defaults to 30 days.
        """
        return pulumi.get(self, "retention_days")

    @property
    @pulumi.getter(name="roUsername")
    def ro_username(self) -> Optional[builtins.str]:
        """
        Name of a user that can be used to read metrics. This will be used for Grafana integration (if enabled) to prevent Grafana users from making undesired changes. Only affects PostgreSQL destinations. Defaults to `metrics_reader`. Note that this must be the same for all metrics integrations that write data to the same PostgreSQL service.
        """
        return pulumi.get(self, "ro_username")

    @property
    @pulumi.getter(name="sourceMysql")
    def source_mysql(self) -> Optional['outputs.ServiceIntegrationMetricsUserConfigSourceMysql']:
        """
        Configuration options for metrics where source service is MySQL
        """
        return pulumi.get(self, "source_mysql")

    @property
    @pulumi.getter
    def username(self) -> Optional[builtins.str]:
        """
        Name of the user used to write metrics. Only affects PostgreSQL destinations. Defaults to `metrics_writer`. Note that this must be the same for all metrics integrations that write data to the same PostgreSQL service.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class ServiceIntegrationMetricsUserConfigSourceMysql(dict):
    def __init__(__self__, *,
                 telegraf: Optional['outputs.ServiceIntegrationMetricsUserConfigSourceMysqlTelegraf'] = None):
        """
        :param 'ServiceIntegrationMetricsUserConfigSourceMysqlTelegrafArgs' telegraf: Configuration options for Telegraf MySQL input plugin
        """
        if telegraf is not None:
            pulumi.set(__self__, "telegraf", telegraf)

    @property
    @pulumi.getter
    def telegraf(self) -> Optional['outputs.ServiceIntegrationMetricsUserConfigSourceMysqlTelegraf']:
        """
        Configuration options for Telegraf MySQL input plugin
        """
        return pulumi.get(self, "telegraf")


@pulumi.output_type
class ServiceIntegrationMetricsUserConfigSourceMysqlTelegraf(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "gatherEventWaits":
            suggest = "gather_event_waits"
        elif key == "gatherFileEventsStats":
            suggest = "gather_file_events_stats"
        elif key == "gatherIndexIoWaits":
            suggest = "gather_index_io_waits"
        elif key == "gatherInfoSchemaAutoInc":
            suggest = "gather_info_schema_auto_inc"
        elif key == "gatherInnodbMetrics":
            suggest = "gather_innodb_metrics"
        elif key == "gatherPerfEventsStatements":
            suggest = "gather_perf_events_statements"
        elif key == "gatherProcessList":
            suggest = "gather_process_list"
        elif key == "gatherSlaveStatus":
            suggest = "gather_slave_status"
        elif key == "gatherTableIoWaits":
            suggest = "gather_table_io_waits"
        elif key == "gatherTableLockWaits":
            suggest = "gather_table_lock_waits"
        elif key == "gatherTableSchema":
            suggest = "gather_table_schema"
        elif key == "perfEventsStatementsDigestTextLimit":
            suggest = "perf_events_statements_digest_text_limit"
        elif key == "perfEventsStatementsLimit":
            suggest = "perf_events_statements_limit"
        elif key == "perfEventsStatementsTimeLimit":
            suggest = "perf_events_statements_time_limit"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationMetricsUserConfigSourceMysqlTelegraf. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationMetricsUserConfigSourceMysqlTelegraf.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationMetricsUserConfigSourceMysqlTelegraf.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 gather_event_waits: Optional[builtins.bool] = None,
                 gather_file_events_stats: Optional[builtins.bool] = None,
                 gather_index_io_waits: Optional[builtins.bool] = None,
                 gather_info_schema_auto_inc: Optional[builtins.bool] = None,
                 gather_innodb_metrics: Optional[builtins.bool] = None,
                 gather_perf_events_statements: Optional[builtins.bool] = None,
                 gather_process_list: Optional[builtins.bool] = None,
                 gather_slave_status: Optional[builtins.bool] = None,
                 gather_table_io_waits: Optional[builtins.bool] = None,
                 gather_table_lock_waits: Optional[builtins.bool] = None,
                 gather_table_schema: Optional[builtins.bool] = None,
                 perf_events_statements_digest_text_limit: Optional[builtins.int] = None,
                 perf_events_statements_limit: Optional[builtins.int] = None,
                 perf_events_statements_time_limit: Optional[builtins.int] = None):
        """
        :param builtins.bool gather_event_waits: Gather metrics from PERFORMANCE*SCHEMA.EVENT*WAITS.
        :param builtins.bool gather_file_events_stats: Gather metrics from PERFORMANCE*SCHEMA.FILE*SUMMARY*BY*EVENT_NAME.
        :param builtins.bool gather_index_io_waits: Gather metrics from PERFORMANCE*SCHEMA.TABLE*IO*WAITS*SUMMARY*BY*INDEX_USAGE.
        :param builtins.bool gather_info_schema_auto_inc: Gather auto_increment columns and max values from information schema.
        :param builtins.bool gather_innodb_metrics: Gather metrics from INFORMATION*SCHEMA.INNODB*METRICS.
        :param builtins.bool gather_perf_events_statements: Gather metrics from PERFORMANCE*SCHEMA.EVENTS*STATEMENTS*SUMMARY*BY_DIGEST.
        :param builtins.bool gather_process_list: Gather thread state counts from INFORMATION_SCHEMA.PROCESSLIST.
        :param builtins.bool gather_slave_status: Gather metrics from SHOW SLAVE STATUS command output.
        :param builtins.bool gather_table_io_waits: Gather metrics from PERFORMANCE*SCHEMA.TABLE*IO*WAITS*SUMMARY*BY*TABLE.
        :param builtins.bool gather_table_lock_waits: Gather metrics from PERFORMANCE*SCHEMA.TABLE*LOCK_WAITS.
        :param builtins.bool gather_table_schema: Gather metrics from INFORMATION_SCHEMA.TABLES.
        :param builtins.int perf_events_statements_digest_text_limit: Truncates digest text from perf*events*statements into this many characters. Example: `120`.
        :param builtins.int perf_events_statements_limit: Limits metrics from perf*events*statements. Example: `250`.
        :param builtins.int perf_events_statements_time_limit: Only include perf*events*statements whose last seen is less than this many seconds. Example: `86400`.
        """
        if gather_event_waits is not None:
            pulumi.set(__self__, "gather_event_waits", gather_event_waits)
        if gather_file_events_stats is not None:
            pulumi.set(__self__, "gather_file_events_stats", gather_file_events_stats)
        if gather_index_io_waits is not None:
            pulumi.set(__self__, "gather_index_io_waits", gather_index_io_waits)
        if gather_info_schema_auto_inc is not None:
            pulumi.set(__self__, "gather_info_schema_auto_inc", gather_info_schema_auto_inc)
        if gather_innodb_metrics is not None:
            pulumi.set(__self__, "gather_innodb_metrics", gather_innodb_metrics)
        if gather_perf_events_statements is not None:
            pulumi.set(__self__, "gather_perf_events_statements", gather_perf_events_statements)
        if gather_process_list is not None:
            pulumi.set(__self__, "gather_process_list", gather_process_list)
        if gather_slave_status is not None:
            pulumi.set(__self__, "gather_slave_status", gather_slave_status)
        if gather_table_io_waits is not None:
            pulumi.set(__self__, "gather_table_io_waits", gather_table_io_waits)
        if gather_table_lock_waits is not None:
            pulumi.set(__self__, "gather_table_lock_waits", gather_table_lock_waits)
        if gather_table_schema is not None:
            pulumi.set(__self__, "gather_table_schema", gather_table_schema)
        if perf_events_statements_digest_text_limit is not None:
            pulumi.set(__self__, "perf_events_statements_digest_text_limit", perf_events_statements_digest_text_limit)
        if perf_events_statements_limit is not None:
            pulumi.set(__self__, "perf_events_statements_limit", perf_events_statements_limit)
        if perf_events_statements_time_limit is not None:
            pulumi.set(__self__, "perf_events_statements_time_limit", perf_events_statements_time_limit)

    @property
    @pulumi.getter(name="gatherEventWaits")
    def gather_event_waits(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE*SCHEMA.EVENT*WAITS.
        """
        return pulumi.get(self, "gather_event_waits")

    @property
    @pulumi.getter(name="gatherFileEventsStats")
    def gather_file_events_stats(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE*SCHEMA.FILE*SUMMARY*BY*EVENT_NAME.
        """
        return pulumi.get(self, "gather_file_events_stats")

    @property
    @pulumi.getter(name="gatherIndexIoWaits")
    def gather_index_io_waits(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE*SCHEMA.TABLE*IO*WAITS*SUMMARY*BY*INDEX_USAGE.
        """
        return pulumi.get(self, "gather_index_io_waits")

    @property
    @pulumi.getter(name="gatherInfoSchemaAutoInc")
    def gather_info_schema_auto_inc(self) -> Optional[builtins.bool]:
        """
        Gather auto_increment columns and max values from information schema.
        """
        return pulumi.get(self, "gather_info_schema_auto_inc")

    @property
    @pulumi.getter(name="gatherInnodbMetrics")
    def gather_innodb_metrics(self) -> Optional[builtins.bool]:
        """
        Gather metrics from INFORMATION*SCHEMA.INNODB*METRICS.
        """
        return pulumi.get(self, "gather_innodb_metrics")

    @property
    @pulumi.getter(name="gatherPerfEventsStatements")
    def gather_perf_events_statements(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE*SCHEMA.EVENTS*STATEMENTS*SUMMARY*BY_DIGEST.
        """
        return pulumi.get(self, "gather_perf_events_statements")

    @property
    @pulumi.getter(name="gatherProcessList")
    def gather_process_list(self) -> Optional[builtins.bool]:
        """
        Gather thread state counts from INFORMATION_SCHEMA.PROCESSLIST.
        """
        return pulumi.get(self, "gather_process_list")

    @property
    @pulumi.getter(name="gatherSlaveStatus")
    def gather_slave_status(self) -> Optional[builtins.bool]:
        """
        Gather metrics from SHOW SLAVE STATUS command output.
        """
        return pulumi.get(self, "gather_slave_status")

    @property
    @pulumi.getter(name="gatherTableIoWaits")
    def gather_table_io_waits(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE*SCHEMA.TABLE*IO*WAITS*SUMMARY*BY*TABLE.
        """
        return pulumi.get(self, "gather_table_io_waits")

    @property
    @pulumi.getter(name="gatherTableLockWaits")
    def gather_table_lock_waits(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE*SCHEMA.TABLE*LOCK_WAITS.
        """
        return pulumi.get(self, "gather_table_lock_waits")

    @property
    @pulumi.getter(name="gatherTableSchema")
    def gather_table_schema(self) -> Optional[builtins.bool]:
        """
        Gather metrics from INFORMATION_SCHEMA.TABLES.
        """
        return pulumi.get(self, "gather_table_schema")

    @property
    @pulumi.getter(name="perfEventsStatementsDigestTextLimit")
    def perf_events_statements_digest_text_limit(self) -> Optional[builtins.int]:
        """
        Truncates digest text from perf*events*statements into this many characters. Example: `120`.
        """
        return pulumi.get(self, "perf_events_statements_digest_text_limit")

    @property
    @pulumi.getter(name="perfEventsStatementsLimit")
    def perf_events_statements_limit(self) -> Optional[builtins.int]:
        """
        Limits metrics from perf*events*statements. Example: `250`.
        """
        return pulumi.get(self, "perf_events_statements_limit")

    @property
    @pulumi.getter(name="perfEventsStatementsTimeLimit")
    def perf_events_statements_time_limit(self) -> Optional[builtins.int]:
        """
        Only include perf*events*statements whose last seen is less than this many seconds. Example: `86400`.
        """
        return pulumi.get(self, "perf_events_statements_time_limit")


@pulumi.output_type
class ServiceIntegrationPrometheusUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "sourceMysql":
            suggest = "source_mysql"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationPrometheusUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationPrometheusUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationPrometheusUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 source_mysql: Optional['outputs.ServiceIntegrationPrometheusUserConfigSourceMysql'] = None):
        """
        :param 'ServiceIntegrationPrometheusUserConfigSourceMysqlArgs' source_mysql: Configuration options for metrics where source service is MySQL
        """
        if source_mysql is not None:
            pulumi.set(__self__, "source_mysql", source_mysql)

    @property
    @pulumi.getter(name="sourceMysql")
    def source_mysql(self) -> Optional['outputs.ServiceIntegrationPrometheusUserConfigSourceMysql']:
        """
        Configuration options for metrics where source service is MySQL
        """
        return pulumi.get(self, "source_mysql")


@pulumi.output_type
class ServiceIntegrationPrometheusUserConfigSourceMysql(dict):
    def __init__(__self__, *,
                 telegraf: Optional['outputs.ServiceIntegrationPrometheusUserConfigSourceMysqlTelegraf'] = None):
        """
        :param 'ServiceIntegrationPrometheusUserConfigSourceMysqlTelegrafArgs' telegraf: Configuration options for Telegraf MySQL input plugin
        """
        if telegraf is not None:
            pulumi.set(__self__, "telegraf", telegraf)

    @property
    @pulumi.getter
    def telegraf(self) -> Optional['outputs.ServiceIntegrationPrometheusUserConfigSourceMysqlTelegraf']:
        """
        Configuration options for Telegraf MySQL input plugin
        """
        return pulumi.get(self, "telegraf")


@pulumi.output_type
class ServiceIntegrationPrometheusUserConfigSourceMysqlTelegraf(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "gatherEventWaits":
            suggest = "gather_event_waits"
        elif key == "gatherFileEventsStats":
            suggest = "gather_file_events_stats"
        elif key == "gatherIndexIoWaits":
            suggest = "gather_index_io_waits"
        elif key == "gatherInfoSchemaAutoInc":
            suggest = "gather_info_schema_auto_inc"
        elif key == "gatherInnodbMetrics":
            suggest = "gather_innodb_metrics"
        elif key == "gatherPerfEventsStatements":
            suggest = "gather_perf_events_statements"
        elif key == "gatherProcessList":
            suggest = "gather_process_list"
        elif key == "gatherSlaveStatus":
            suggest = "gather_slave_status"
        elif key == "gatherTableIoWaits":
            suggest = "gather_table_io_waits"
        elif key == "gatherTableLockWaits":
            suggest = "gather_table_lock_waits"
        elif key == "gatherTableSchema":
            suggest = "gather_table_schema"
        elif key == "perfEventsStatementsDigestTextLimit":
            suggest = "perf_events_statements_digest_text_limit"
        elif key == "perfEventsStatementsLimit":
            suggest = "perf_events_statements_limit"
        elif key == "perfEventsStatementsTimeLimit":
            suggest = "perf_events_statements_time_limit"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ServiceIntegrationPrometheusUserConfigSourceMysqlTelegraf. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ServiceIntegrationPrometheusUserConfigSourceMysqlTelegraf.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ServiceIntegrationPrometheusUserConfigSourceMysqlTelegraf.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 gather_event_waits: Optional[builtins.bool] = None,
                 gather_file_events_stats: Optional[builtins.bool] = None,
                 gather_index_io_waits: Optional[builtins.bool] = None,
                 gather_info_schema_auto_inc: Optional[builtins.bool] = None,
                 gather_innodb_metrics: Optional[builtins.bool] = None,
                 gather_perf_events_statements: Optional[builtins.bool] = None,
                 gather_process_list: Optional[builtins.bool] = None,
                 gather_slave_status: Optional[builtins.bool] = None,
                 gather_table_io_waits: Optional[builtins.bool] = None,
                 gather_table_lock_waits: Optional[builtins.bool] = None,
                 gather_table_schema: Optional[builtins.bool] = None,
                 perf_events_statements_digest_text_limit: Optional[builtins.int] = None,
                 perf_events_statements_limit: Optional[builtins.int] = None,
                 perf_events_statements_time_limit: Optional[builtins.int] = None):
        """
        :param builtins.bool gather_event_waits: Gather metrics from PERFORMANCE*SCHEMA.EVENT*WAITS.
        :param builtins.bool gather_file_events_stats: Gather metrics from PERFORMANCE*SCHEMA.FILE*SUMMARY*BY*EVENT_NAME.
        :param builtins.bool gather_index_io_waits: Gather metrics from PERFORMANCE*SCHEMA.TABLE*IO*WAITS*SUMMARY*BY*INDEX_USAGE.
        :param builtins.bool gather_info_schema_auto_inc: Gather auto_increment columns and max values from information schema.
        :param builtins.bool gather_innodb_metrics: Gather metrics from INFORMATION*SCHEMA.INNODB*METRICS.
        :param builtins.bool gather_perf_events_statements: Gather metrics from PERFORMANCE*SCHEMA.EVENTS*STATEMENTS*SUMMARY*BY_DIGEST.
        :param builtins.bool gather_process_list: Gather thread state counts from INFORMATION_SCHEMA.PROCESSLIST.
        :param builtins.bool gather_slave_status: Gather metrics from SHOW SLAVE STATUS command output.
        :param builtins.bool gather_table_io_waits: Gather metrics from PERFORMANCE*SCHEMA.TABLE*IO*WAITS*SUMMARY*BY*TABLE.
        :param builtins.bool gather_table_lock_waits: Gather metrics from PERFORMANCE*SCHEMA.TABLE*LOCK_WAITS.
        :param builtins.bool gather_table_schema: Gather metrics from INFORMATION_SCHEMA.TABLES.
        :param builtins.int perf_events_statements_digest_text_limit: Truncates digest text from perf*events*statements into this many characters. Example: `120`.
        :param builtins.int perf_events_statements_limit: Limits metrics from perf*events*statements. Example: `250`.
        :param builtins.int perf_events_statements_time_limit: Only include perf*events*statements whose last seen is less than this many seconds. Example: `86400`.
        """
        if gather_event_waits is not None:
            pulumi.set(__self__, "gather_event_waits", gather_event_waits)
        if gather_file_events_stats is not None:
            pulumi.set(__self__, "gather_file_events_stats", gather_file_events_stats)
        if gather_index_io_waits is not None:
            pulumi.set(__self__, "gather_index_io_waits", gather_index_io_waits)
        if gather_info_schema_auto_inc is not None:
            pulumi.set(__self__, "gather_info_schema_auto_inc", gather_info_schema_auto_inc)
        if gather_innodb_metrics is not None:
            pulumi.set(__self__, "gather_innodb_metrics", gather_innodb_metrics)
        if gather_perf_events_statements is not None:
            pulumi.set(__self__, "gather_perf_events_statements", gather_perf_events_statements)
        if gather_process_list is not None:
            pulumi.set(__self__, "gather_process_list", gather_process_list)
        if gather_slave_status is not None:
            pulumi.set(__self__, "gather_slave_status", gather_slave_status)
        if gather_table_io_waits is not None:
            pulumi.set(__self__, "gather_table_io_waits", gather_table_io_waits)
        if gather_table_lock_waits is not None:
            pulumi.set(__self__, "gather_table_lock_waits", gather_table_lock_waits)
        if gather_table_schema is not None:
            pulumi.set(__self__, "gather_table_schema", gather_table_schema)
        if perf_events_statements_digest_text_limit is not None:
            pulumi.set(__self__, "perf_events_statements_digest_text_limit", perf_events_statements_digest_text_limit)
        if perf_events_statements_limit is not None:
            pulumi.set(__self__, "perf_events_statements_limit", perf_events_statements_limit)
        if perf_events_statements_time_limit is not None:
            pulumi.set(__self__, "perf_events_statements_time_limit", perf_events_statements_time_limit)

    @property
    @pulumi.getter(name="gatherEventWaits")
    def gather_event_waits(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE*SCHEMA.EVENT*WAITS.
        """
        return pulumi.get(self, "gather_event_waits")

    @property
    @pulumi.getter(name="gatherFileEventsStats")
    def gather_file_events_stats(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE*SCHEMA.FILE*SUMMARY*BY*EVENT_NAME.
        """
        return pulumi.get(self, "gather_file_events_stats")

    @property
    @pulumi.getter(name="gatherIndexIoWaits")
    def gather_index_io_waits(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE*SCHEMA.TABLE*IO*WAITS*SUMMARY*BY*INDEX_USAGE.
        """
        return pulumi.get(self, "gather_index_io_waits")

    @property
    @pulumi.getter(name="gatherInfoSchemaAutoInc")
    def gather_info_schema_auto_inc(self) -> Optional[builtins.bool]:
        """
        Gather auto_increment columns and max values from information schema.
        """
        return pulumi.get(self, "gather_info_schema_auto_inc")

    @property
    @pulumi.getter(name="gatherInnodbMetrics")
    def gather_innodb_metrics(self) -> Optional[builtins.bool]:
        """
        Gather metrics from INFORMATION*SCHEMA.INNODB*METRICS.
        """
        return pulumi.get(self, "gather_innodb_metrics")

    @property
    @pulumi.getter(name="gatherPerfEventsStatements")
    def gather_perf_events_statements(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE*SCHEMA.EVENTS*STATEMENTS*SUMMARY*BY_DIGEST.
        """
        return pulumi.get(self, "gather_perf_events_statements")

    @property
    @pulumi.getter(name="gatherProcessList")
    def gather_process_list(self) -> Optional[builtins.bool]:
        """
        Gather thread state counts from INFORMATION_SCHEMA.PROCESSLIST.
        """
        return pulumi.get(self, "gather_process_list")

    @property
    @pulumi.getter(name="gatherSlaveStatus")
    def gather_slave_status(self) -> Optional[builtins.bool]:
        """
        Gather metrics from SHOW SLAVE STATUS command output.
        """
        return pulumi.get(self, "gather_slave_status")

    @property
    @pulumi.getter(name="gatherTableIoWaits")
    def gather_table_io_waits(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE*SCHEMA.TABLE*IO*WAITS*SUMMARY*BY*TABLE.
        """
        return pulumi.get(self, "gather_table_io_waits")

    @property
    @pulumi.getter(name="gatherTableLockWaits")
    def gather_table_lock_waits(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE*SCHEMA.TABLE*LOCK_WAITS.
        """
        return pulumi.get(self, "gather_table_lock_waits")

    @property
    @pulumi.getter(name="gatherTableSchema")
    def gather_table_schema(self) -> Optional[builtins.bool]:
        """
        Gather metrics from INFORMATION_SCHEMA.TABLES.
        """
        return pulumi.get(self, "gather_table_schema")

    @property
    @pulumi.getter(name="perfEventsStatementsDigestTextLimit")
    def perf_events_statements_digest_text_limit(self) -> Optional[builtins.int]:
        """
        Truncates digest text from perf*events*statements into this many characters. Example: `120`.
        """
        return pulumi.get(self, "perf_events_statements_digest_text_limit")

    @property
    @pulumi.getter(name="perfEventsStatementsLimit")
    def perf_events_statements_limit(self) -> Optional[builtins.int]:
        """
        Limits metrics from perf*events*statements. Example: `250`.
        """
        return pulumi.get(self, "perf_events_statements_limit")

    @property
    @pulumi.getter(name="perfEventsStatementsTimeLimit")
    def perf_events_statements_time_limit(self) -> Optional[builtins.int]:
        """
        Only include perf*events*statements whose last seen is less than this many seconds. Example: `86400`.
        """
        return pulumi.get(self, "perf_events_statements_time_limit")


@pulumi.output_type
class ThanosComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ThanosComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ThanosComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ThanosComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class ThanosServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ThanosServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ThanosServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ThanosServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class ThanosTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class ThanosTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class ThanosThanos(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "queryFrontendUri":
            suggest = "query_frontend_uri"
        elif key == "queryUri":
            suggest = "query_uri"
        elif key == "receiverRemoteWriteUri":
            suggest = "receiver_remote_write_uri"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ThanosThanos. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ThanosThanos.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ThanosThanos.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 query_frontend_uri: Optional[builtins.str] = None,
                 query_uri: Optional[builtins.str] = None,
                 receiver_remote_write_uri: Optional[builtins.str] = None,
                 uris: Optional[Sequence[builtins.str]] = None):
        """
        :param builtins.str query_frontend_uri: Query frontend URI.
        :param builtins.str query_uri: Query URI.
        :param builtins.str receiver_remote_write_uri: Receiver remote write URI.
        :param Sequence[builtins.str] uris: Thanos server URIs.
        """
        if query_frontend_uri is not None:
            pulumi.set(__self__, "query_frontend_uri", query_frontend_uri)
        if query_uri is not None:
            pulumi.set(__self__, "query_uri", query_uri)
        if receiver_remote_write_uri is not None:
            pulumi.set(__self__, "receiver_remote_write_uri", receiver_remote_write_uri)
        if uris is not None:
            pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter(name="queryFrontendUri")
    def query_frontend_uri(self) -> Optional[builtins.str]:
        """
        Query frontend URI.
        """
        return pulumi.get(self, "query_frontend_uri")

    @property
    @pulumi.getter(name="queryUri")
    def query_uri(self) -> Optional[builtins.str]:
        """
        Query URI.
        """
        return pulumi.get(self, "query_uri")

    @property
    @pulumi.getter(name="receiverRemoteWriteUri")
    def receiver_remote_write_uri(self) -> Optional[builtins.str]:
        """
        Receiver remote write URI.
        """
        return pulumi.get(self, "receiver_remote_write_uri")

    @property
    @pulumi.getter
    def uris(self) -> Optional[Sequence[builtins.str]]:
        """
        Thanos server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class ThanosThanosUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "objectStorageUsageAlertThresholdGb":
            suggest = "object_storage_usage_alert_threshold_gb"
        elif key == "privateAccess":
            suggest = "private_access"
        elif key == "privatelinkAccess":
            suggest = "privatelink_access"
        elif key == "publicAccess":
            suggest = "public_access"
        elif key == "queryFrontend":
            suggest = "query_frontend"
        elif key == "receiverIngesting":
            suggest = "receiver_ingesting"
        elif key == "receiverRouting":
            suggest = "receiver_routing"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "staticIps":
            suggest = "static_ips"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ThanosThanosUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ThanosThanosUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ThanosThanosUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 compactor: Optional['outputs.ThanosThanosUserConfigCompactor'] = None,
                 env: Optional[Mapping[str, builtins.str]] = None,
                 ip_filter_objects: Optional[Sequence['outputs.ThanosThanosUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 object_storage_usage_alert_threshold_gb: Optional[builtins.int] = None,
                 private_access: Optional['outputs.ThanosThanosUserConfigPrivateAccess'] = None,
                 privatelink_access: Optional['outputs.ThanosThanosUserConfigPrivatelinkAccess'] = None,
                 public_access: Optional['outputs.ThanosThanosUserConfigPublicAccess'] = None,
                 query: Optional['outputs.ThanosThanosUserConfigQuery'] = None,
                 query_frontend: Optional['outputs.ThanosThanosUserConfigQueryFrontend'] = None,
                 receiver_ingesting: Optional[Mapping[str, builtins.str]] = None,
                 receiver_routing: Optional[Mapping[str, builtins.str]] = None,
                 ruler: Optional[Mapping[str, builtins.str]] = None,
                 service_log: Optional[builtins.bool] = None,
                 static_ips: Optional[builtins.bool] = None,
                 store: Optional[Mapping[str, builtins.str]] = None):
        """
        :param 'ThanosThanosUserConfigCompactorArgs' compactor: Configuration options for Thanos Compactor
        :param Mapping[str, builtins.str] env: Environmental variables.
        :param Sequence['ThanosThanosUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param builtins.int object_storage_usage_alert_threshold_gb: After exceeding the limit a service alert is going to be raised (0 means not set).
        :param 'ThanosThanosUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'ThanosThanosUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param 'ThanosThanosUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param 'ThanosThanosUserConfigQueryArgs' query: Configuration options for Thanos Query
        :param 'ThanosThanosUserConfigQueryFrontendArgs' query_frontend: Configuration options for Thanos Query Frontend
        :param Mapping[str, builtins.str] receiver_ingesting: Common configuration options for Thanos Receive.
        :param Mapping[str, builtins.str] receiver_routing: Configuration options for Thanos Receive Routing.
        :param Mapping[str, builtins.str] ruler: Configuration options for Thanos Ruler.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.bool static_ips: Use static public IP addresses.
        :param Mapping[str, builtins.str] store: Configuration options for Thanos Store.
        """
        if compactor is not None:
            pulumi.set(__self__, "compactor", compactor)
        if env is not None:
            pulumi.set(__self__, "env", env)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if object_storage_usage_alert_threshold_gb is not None:
            pulumi.set(__self__, "object_storage_usage_alert_threshold_gb", object_storage_usage_alert_threshold_gb)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if query is not None:
            pulumi.set(__self__, "query", query)
        if query_frontend is not None:
            pulumi.set(__self__, "query_frontend", query_frontend)
        if receiver_ingesting is not None:
            pulumi.set(__self__, "receiver_ingesting", receiver_ingesting)
        if receiver_routing is not None:
            pulumi.set(__self__, "receiver_routing", receiver_routing)
        if ruler is not None:
            pulumi.set(__self__, "ruler", ruler)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)
        if store is not None:
            pulumi.set(__self__, "store", store)

    @property
    @pulumi.getter
    def compactor(self) -> Optional['outputs.ThanosThanosUserConfigCompactor']:
        """
        Configuration options for Thanos Compactor
        """
        return pulumi.get(self, "compactor")

    @property
    @pulumi.getter
    @_utilities.deprecated("""This property is deprecated.""")
    def env(self) -> Optional[Mapping[str, builtins.str]]:
        """
        Environmental variables.
        """
        return pulumi.get(self, "env")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.ThanosThanosUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="objectStorageUsageAlertThresholdGb")
    def object_storage_usage_alert_threshold_gb(self) -> Optional[builtins.int]:
        """
        After exceeding the limit a service alert is going to be raised (0 means not set).
        """
        return pulumi.get(self, "object_storage_usage_alert_threshold_gb")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.ThanosThanosUserConfigPrivateAccess']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.ThanosThanosUserConfigPrivatelinkAccess']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.ThanosThanosUserConfigPublicAccess']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter
    def query(self) -> Optional['outputs.ThanosThanosUserConfigQuery']:
        """
        Configuration options for Thanos Query
        """
        return pulumi.get(self, "query")

    @property
    @pulumi.getter(name="queryFrontend")
    def query_frontend(self) -> Optional['outputs.ThanosThanosUserConfigQueryFrontend']:
        """
        Configuration options for Thanos Query Frontend
        """
        return pulumi.get(self, "query_frontend")

    @property
    @pulumi.getter(name="receiverIngesting")
    def receiver_ingesting(self) -> Optional[Mapping[str, builtins.str]]:
        """
        Common configuration options for Thanos Receive.
        """
        return pulumi.get(self, "receiver_ingesting")

    @property
    @pulumi.getter(name="receiverRouting")
    def receiver_routing(self) -> Optional[Mapping[str, builtins.str]]:
        """
        Configuration options for Thanos Receive Routing.
        """
        return pulumi.get(self, "receiver_routing")

    @property
    @pulumi.getter
    def ruler(self) -> Optional[Mapping[str, builtins.str]]:
        """
        Configuration options for Thanos Ruler.
        """
        return pulumi.get(self, "ruler")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")

    @property
    @pulumi.getter
    def store(self) -> Optional[Mapping[str, builtins.str]]:
        """
        Configuration options for Thanos Store.
        """
        return pulumi.get(self, "store")


@pulumi.output_type
class ThanosThanosUserConfigCompactor(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "retentionDays":
            suggest = "retention_days"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ThanosThanosUserConfigCompactor. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ThanosThanosUserConfigCompactor.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ThanosThanosUserConfigCompactor.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 retention_days: Optional[builtins.int] = None):
        """
        :param builtins.int retention_days: Retention time for data in days for each resolution (5m, 1h, raw).
        """
        if retention_days is not None:
            pulumi.set(__self__, "retention_days", retention_days)

    @property
    @pulumi.getter(name="retentionDays")
    def retention_days(self) -> Optional[builtins.int]:
        """
        Retention time for data in days for each resolution (5m, 1h, raw).
        """
        return pulumi.get(self, "retention_days")


@pulumi.output_type
class ThanosThanosUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class ThanosThanosUserConfigPrivateAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "queryFrontend":
            suggest = "query_frontend"
        elif key == "receiverRouting":
            suggest = "receiver_routing"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ThanosThanosUserConfigPrivateAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ThanosThanosUserConfigPrivateAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ThanosThanosUserConfigPrivateAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 query_frontend: Optional[builtins.bool] = None,
                 receiver_routing: Optional[builtins.bool] = None):
        """
        :param builtins.bool query_frontend: Allow clients to connect to query_frontend with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool receiver_routing: Allow clients to connect to receiver_routing with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if query_frontend is not None:
            pulumi.set(__self__, "query_frontend", query_frontend)
        if receiver_routing is not None:
            pulumi.set(__self__, "receiver_routing", receiver_routing)

    @property
    @pulumi.getter(name="queryFrontend")
    def query_frontend(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to query_frontend with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "query_frontend")

    @property
    @pulumi.getter(name="receiverRouting")
    def receiver_routing(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to receiver_routing with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "receiver_routing")


@pulumi.output_type
class ThanosThanosUserConfigPrivatelinkAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "queryFrontend":
            suggest = "query_frontend"
        elif key == "receiverRouting":
            suggest = "receiver_routing"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ThanosThanosUserConfigPrivatelinkAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ThanosThanosUserConfigPrivatelinkAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ThanosThanosUserConfigPrivatelinkAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 query_frontend: Optional[builtins.bool] = None,
                 receiver_routing: Optional[builtins.bool] = None):
        """
        :param builtins.bool query_frontend: Enable query_frontend.
        :param builtins.bool receiver_routing: Enable receiver_routing.
        """
        if query_frontend is not None:
            pulumi.set(__self__, "query_frontend", query_frontend)
        if receiver_routing is not None:
            pulumi.set(__self__, "receiver_routing", receiver_routing)

    @property
    @pulumi.getter(name="queryFrontend")
    def query_frontend(self) -> Optional[builtins.bool]:
        """
        Enable query_frontend.
        """
        return pulumi.get(self, "query_frontend")

    @property
    @pulumi.getter(name="receiverRouting")
    def receiver_routing(self) -> Optional[builtins.bool]:
        """
        Enable receiver_routing.
        """
        return pulumi.get(self, "receiver_routing")


@pulumi.output_type
class ThanosThanosUserConfigPublicAccess(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "queryFrontend":
            suggest = "query_frontend"
        elif key == "receiverIngesting":
            suggest = "receiver_ingesting"
        elif key == "receiverRouting":
            suggest = "receiver_routing"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ThanosThanosUserConfigPublicAccess. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ThanosThanosUserConfigPublicAccess.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ThanosThanosUserConfigPublicAccess.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 compactor: Optional[builtins.bool] = None,
                 query: Optional[builtins.bool] = None,
                 query_frontend: Optional[builtins.bool] = None,
                 receiver_ingesting: Optional[builtins.bool] = None,
                 receiver_routing: Optional[builtins.bool] = None,
                 ruler: Optional[builtins.bool] = None,
                 store: Optional[builtins.bool] = None):
        """
        :param builtins.bool compactor: Allow clients to connect to compactor from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool query: Allow clients to connect to query from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool query_frontend: Allow clients to connect to query_frontend from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool receiver_ingesting: Allow clients to connect to receiver_ingesting from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool receiver_routing: Allow clients to connect to receiver_routing from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool ruler: Allow clients to connect to ruler from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool store: Allow clients to connect to store from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if compactor is not None:
            pulumi.set(__self__, "compactor", compactor)
        if query is not None:
            pulumi.set(__self__, "query", query)
        if query_frontend is not None:
            pulumi.set(__self__, "query_frontend", query_frontend)
        if receiver_ingesting is not None:
            pulumi.set(__self__, "receiver_ingesting", receiver_ingesting)
        if receiver_routing is not None:
            pulumi.set(__self__, "receiver_routing", receiver_routing)
        if ruler is not None:
            pulumi.set(__self__, "ruler", ruler)
        if store is not None:
            pulumi.set(__self__, "store", store)

    @property
    @pulumi.getter
    def compactor(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to compactor from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "compactor")

    @property
    @pulumi.getter
    def query(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to query from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "query")

    @property
    @pulumi.getter(name="queryFrontend")
    def query_frontend(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to query_frontend from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "query_frontend")

    @property
    @pulumi.getter(name="receiverIngesting")
    def receiver_ingesting(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to receiver_ingesting from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "receiver_ingesting")

    @property
    @pulumi.getter(name="receiverRouting")
    def receiver_routing(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to receiver_routing from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "receiver_routing")

    @property
    @pulumi.getter
    def ruler(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to ruler from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "ruler")

    @property
    @pulumi.getter
    def store(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to store from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "store")


@pulumi.output_type
class ThanosThanosUserConfigQuery(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "queryDefaultEvaluationInterval":
            suggest = "query_default_evaluation_interval"
        elif key == "queryLookbackDelta":
            suggest = "query_lookback_delta"
        elif key == "queryMetadataDefaultTimeRange":
            suggest = "query_metadata_default_time_range"
        elif key == "queryTimeout":
            suggest = "query_timeout"
        elif key == "storeLimitsRequestSamples":
            suggest = "store_limits_request_samples"
        elif key == "storeLimitsRequestSeries":
            suggest = "store_limits_request_series"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ThanosThanosUserConfigQuery. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ThanosThanosUserConfigQuery.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ThanosThanosUserConfigQuery.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 query_default_evaluation_interval: Optional[builtins.str] = None,
                 query_lookback_delta: Optional[builtins.str] = None,
                 query_metadata_default_time_range: Optional[builtins.str] = None,
                 query_timeout: Optional[builtins.str] = None,
                 store_limits_request_samples: Optional[builtins.int] = None,
                 store_limits_request_series: Optional[builtins.int] = None):
        """
        :param builtins.str query_default_evaluation_interval: Set the default evaluation interval for subqueries. Default: `1m`.
        :param builtins.str query_lookback_delta: The maximum lookback duration for retrieving metrics during expression evaluations in PromQL. PromQL always evaluates the query for a certain timestamp, and it looks back for the given amount of time to get the latest sample. If it exceeds the maximum lookback delta, it assumes the series is stale and returns none (a gap). The lookback delta should be set to at least 2 times the slowest scrape interval. If unset, it will use the promql default of 5m. Default: `5m`.
        :param builtins.str query_metadata_default_time_range: The default metadata time range duration for retrieving labels through Labels and Series API when the range parameters are not specified. The zero value means the range covers the time since the beginning. Default: `0s`.
        :param builtins.str query_timeout: Maximum time to process a query by the query node. Default: `2m`.
        :param builtins.int store_limits_request_samples: The maximum samples allowed for a single Series request. The Series call fails if this limit is exceeded. Set to 0 for no limit. NOTE: For efficiency, the limit is internally implemented as 'chunks limit' considering each chunk contains a maximum of 120 samples. The default value is 100 * store.limits.request-series. Default: `0`.
        :param builtins.int store_limits_request_series: The maximum series allowed for a single Series request. The Series call fails if this limit is exceeded. Set to 0 for no limit. The default value is 1000 * cpu_count. Default: `0`.
        """
        if query_default_evaluation_interval is not None:
            pulumi.set(__self__, "query_default_evaluation_interval", query_default_evaluation_interval)
        if query_lookback_delta is not None:
            pulumi.set(__self__, "query_lookback_delta", query_lookback_delta)
        if query_metadata_default_time_range is not None:
            pulumi.set(__self__, "query_metadata_default_time_range", query_metadata_default_time_range)
        if query_timeout is not None:
            pulumi.set(__self__, "query_timeout", query_timeout)
        if store_limits_request_samples is not None:
            pulumi.set(__self__, "store_limits_request_samples", store_limits_request_samples)
        if store_limits_request_series is not None:
            pulumi.set(__self__, "store_limits_request_series", store_limits_request_series)

    @property
    @pulumi.getter(name="queryDefaultEvaluationInterval")
    def query_default_evaluation_interval(self) -> Optional[builtins.str]:
        """
        Set the default evaluation interval for subqueries. Default: `1m`.
        """
        return pulumi.get(self, "query_default_evaluation_interval")

    @property
    @pulumi.getter(name="queryLookbackDelta")
    def query_lookback_delta(self) -> Optional[builtins.str]:
        """
        The maximum lookback duration for retrieving metrics during expression evaluations in PromQL. PromQL always evaluates the query for a certain timestamp, and it looks back for the given amount of time to get the latest sample. If it exceeds the maximum lookback delta, it assumes the series is stale and returns none (a gap). The lookback delta should be set to at least 2 times the slowest scrape interval. If unset, it will use the promql default of 5m. Default: `5m`.
        """
        return pulumi.get(self, "query_lookback_delta")

    @property
    @pulumi.getter(name="queryMetadataDefaultTimeRange")
    def query_metadata_default_time_range(self) -> Optional[builtins.str]:
        """
        The default metadata time range duration for retrieving labels through Labels and Series API when the range parameters are not specified. The zero value means the range covers the time since the beginning. Default: `0s`.
        """
        return pulumi.get(self, "query_metadata_default_time_range")

    @property
    @pulumi.getter(name="queryTimeout")
    def query_timeout(self) -> Optional[builtins.str]:
        """
        Maximum time to process a query by the query node. Default: `2m`.
        """
        return pulumi.get(self, "query_timeout")

    @property
    @pulumi.getter(name="storeLimitsRequestSamples")
    def store_limits_request_samples(self) -> Optional[builtins.int]:
        """
        The maximum samples allowed for a single Series request. The Series call fails if this limit is exceeded. Set to 0 for no limit. NOTE: For efficiency, the limit is internally implemented as 'chunks limit' considering each chunk contains a maximum of 120 samples. The default value is 100 * store.limits.request-series. Default: `0`.
        """
        return pulumi.get(self, "store_limits_request_samples")

    @property
    @pulumi.getter(name="storeLimitsRequestSeries")
    def store_limits_request_series(self) -> Optional[builtins.int]:
        """
        The maximum series allowed for a single Series request. The Series call fails if this limit is exceeded. Set to 0 for no limit. The default value is 1000 * cpu_count. Default: `0`.
        """
        return pulumi.get(self, "store_limits_request_series")


@pulumi.output_type
class ThanosThanosUserConfigQueryFrontend(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "queryRangeAlignRangeWithStep":
            suggest = "query_range_align_range_with_step"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ThanosThanosUserConfigQueryFrontend. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ThanosThanosUserConfigQueryFrontend.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ThanosThanosUserConfigQueryFrontend.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 query_range_align_range_with_step: Optional[builtins.bool] = None):
        """
        :param builtins.bool query_range_align_range_with_step: Whether to align the query range boundaries with the step. If enabled, the query range boundaries will be aligned to the step, providing more accurate results for queries with high-resolution data. Default: `true`.
        """
        if query_range_align_range_with_step is not None:
            pulumi.set(__self__, "query_range_align_range_with_step", query_range_align_range_with_step)

    @property
    @pulumi.getter(name="queryRangeAlignRangeWithStep")
    def query_range_align_range_with_step(self) -> Optional[builtins.bool]:
        """
        Whether to align the query range boundaries with the step. If enabled, the query range boundaries will be aligned to the step, providing more accurate results for queries with high-resolution data. Default: `true`.
        """
        return pulumi.get(self, "query_range_align_range_with_step")


@pulumi.output_type
class ValkeyComponent(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectionUri":
            suggest = "connection_uri"
        elif key == "kafkaAuthenticationMethod":
            suggest = "kafka_authentication_method"
        elif key == "kafkaSslCa":
            suggest = "kafka_ssl_ca"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ValkeyComponent. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ValkeyComponent.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ValkeyComponent.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 component: Optional[builtins.str] = None,
                 connection_uri: Optional[builtins.str] = None,
                 host: Optional[builtins.str] = None,
                 kafka_authentication_method: Optional[builtins.str] = None,
                 kafka_ssl_ca: Optional[builtins.str] = None,
                 port: Optional[builtins.int] = None,
                 route: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 usage: Optional[builtins.str] = None):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        if component is not None:
            pulumi.set(__self__, "component", component)
        if connection_uri is not None:
            pulumi.set(__self__, "connection_uri", connection_uri)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if kafka_authentication_method is not None:
            pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        if kafka_ssl_ca is not None:
            pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if route is not None:
            pulumi.set(__self__, "route", route)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if usage is not None:
            pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> Optional[builtins.str]:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> Optional[builtins.str]:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> Optional[builtins.str]:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> Optional[builtins.str]:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> Optional[builtins.str]:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> Optional[builtins.int]:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> Optional[builtins.str]:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> Optional[builtins.str]:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class ValkeyServiceIntegration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "integrationType":
            suggest = "integration_type"
        elif key == "sourceServiceName":
            suggest = "source_service_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ValkeyServiceIntegration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ValkeyServiceIntegration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ValkeyServiceIntegration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration. The possible value is `read_replica`.
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration. The possible value is `read_replica`.
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class ValkeyTag(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class ValkeyTechEmail(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class ValkeyValkey(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "replicaUri":
            suggest = "replica_uri"
        elif key == "slaveUris":
            suggest = "slave_uris"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ValkeyValkey. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ValkeyValkey.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ValkeyValkey.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 password: Optional[builtins.str] = None,
                 replica_uri: Optional[builtins.str] = None,
                 slave_uris: Optional[Sequence[builtins.str]] = None,
                 uris: Optional[Sequence[builtins.str]] = None):
        """
        :param builtins.str password: Valkey password.
        :param builtins.str replica_uri: Valkey replica server URI.
        :param Sequence[builtins.str] slave_uris: Valkey slave server URIs.
        :param Sequence[builtins.str] uris: Valkey server URIs.
        """
        if password is not None:
            pulumi.set(__self__, "password", password)
        if replica_uri is not None:
            pulumi.set(__self__, "replica_uri", replica_uri)
        if slave_uris is not None:
            pulumi.set(__self__, "slave_uris", slave_uris)
        if uris is not None:
            pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        Valkey password.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter(name="replicaUri")
    def replica_uri(self) -> Optional[builtins.str]:
        """
        Valkey replica server URI.
        """
        return pulumi.get(self, "replica_uri")

    @property
    @pulumi.getter(name="slaveUris")
    def slave_uris(self) -> Optional[Sequence[builtins.str]]:
        """
        Valkey slave server URIs.
        """
        return pulumi.get(self, "slave_uris")

    @property
    @pulumi.getter
    def uris(self) -> Optional[Sequence[builtins.str]]:
        """
        Valkey server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class ValkeyValkeyUserConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "additionalBackupRegions":
            suggest = "additional_backup_regions"
        elif key == "backupHour":
            suggest = "backup_hour"
        elif key == "backupMinute":
            suggest = "backup_minute"
        elif key == "enableIpv6":
            suggest = "enable_ipv6"
        elif key == "frequentSnapshots":
            suggest = "frequent_snapshots"
        elif key == "ipFilterObjects":
            suggest = "ip_filter_objects"
        elif key == "ipFilterStrings":
            suggest = "ip_filter_strings"
        elif key == "ipFilters":
            suggest = "ip_filters"
        elif key == "privateAccess":
            suggest = "private_access"
        elif key == "privatelinkAccess":
            suggest = "privatelink_access"
        elif key == "projectToForkFrom":
            suggest = "project_to_fork_from"
        elif key == "publicAccess":
            suggest = "public_access"
        elif key == "recoveryBasebackupName":
            suggest = "recovery_basebackup_name"
        elif key == "serviceLog":
            suggest = "service_log"
        elif key == "serviceToForkFrom":
            suggest = "service_to_fork_from"
        elif key == "staticIps":
            suggest = "static_ips"
        elif key == "valkeyAclChannelsDefault":
            suggest = "valkey_acl_channels_default"
        elif key == "valkeyActiveExpireEffort":
            suggest = "valkey_active_expire_effort"
        elif key == "valkeyIoThreads":
            suggest = "valkey_io_threads"
        elif key == "valkeyLfuDecayTime":
            suggest = "valkey_lfu_decay_time"
        elif key == "valkeyLfuLogFactor":
            suggest = "valkey_lfu_log_factor"
        elif key == "valkeyMaxmemoryPolicy":
            suggest = "valkey_maxmemory_policy"
        elif key == "valkeyNotifyKeyspaceEvents":
            suggest = "valkey_notify_keyspace_events"
        elif key == "valkeyNumberOfDatabases":
            suggest = "valkey_number_of_databases"
        elif key == "valkeyPersistence":
            suggest = "valkey_persistence"
        elif key == "valkeyPubsubClientOutputBufferLimit":
            suggest = "valkey_pubsub_client_output_buffer_limit"
        elif key == "valkeySsl":
            suggest = "valkey_ssl"
        elif key == "valkeyTimeout":
            suggest = "valkey_timeout"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ValkeyValkeyUserConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ValkeyValkeyUserConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ValkeyValkeyUserConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 backup_hour: Optional[builtins.int] = None,
                 backup_minute: Optional[builtins.int] = None,
                 enable_ipv6: Optional[builtins.bool] = None,
                 frequent_snapshots: Optional[builtins.bool] = None,
                 ip_filter_objects: Optional[Sequence['outputs.ValkeyValkeyUserConfigIpFilterObject']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 migration: Optional['outputs.ValkeyValkeyUserConfigMigration'] = None,
                 private_access: Optional['outputs.ValkeyValkeyUserConfigPrivateAccess'] = None,
                 privatelink_access: Optional['outputs.ValkeyValkeyUserConfigPrivatelinkAccess'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.ValkeyValkeyUserConfigPublicAccess'] = None,
                 recovery_basebackup_name: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None,
                 valkey_acl_channels_default: Optional[builtins.str] = None,
                 valkey_active_expire_effort: Optional[builtins.int] = None,
                 valkey_io_threads: Optional[builtins.int] = None,
                 valkey_lfu_decay_time: Optional[builtins.int] = None,
                 valkey_lfu_log_factor: Optional[builtins.int] = None,
                 valkey_maxmemory_policy: Optional[builtins.str] = None,
                 valkey_notify_keyspace_events: Optional[builtins.str] = None,
                 valkey_number_of_databases: Optional[builtins.int] = None,
                 valkey_persistence: Optional[builtins.str] = None,
                 valkey_pubsub_client_output_buffer_limit: Optional[builtins.int] = None,
                 valkey_ssl: Optional[builtins.bool] = None,
                 valkey_timeout: Optional[builtins.int] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.int backup_hour: The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        :param builtins.int backup_minute: The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        :param builtins.bool enable_ipv6: Register AAAA DNS records for the service, and allow IPv6 packets to service ports.
        :param builtins.bool frequent_snapshots: When enabled, Valkey will create frequent local RDB snapshots. When disabled, Valkey will only take RDB snapshots when a backup is created, based on the backup schedule. This setting is ignored when `valkey_persistence` is set to `off`. Default: `true`.
        :param Sequence['ValkeyValkeyUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'ValkeyValkeyUserConfigMigrationArgs' migration: Migrate data from existing server
        :param 'ValkeyValkeyUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'ValkeyValkeyUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'ValkeyValkeyUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_basebackup_name: Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool static_ips: Use static public IP addresses.
        :param builtins.str valkey_acl_channels_default: Enum: `allchannels`, `resetchannels`. Determines default pub/sub channels' ACL for new users if ACL is not supplied. When this option is not defined, all_channels is assumed to keep backward compatibility. This option doesn't affect Valkey configuration acl-pubsub-default.
        :param builtins.int valkey_active_expire_effort: Valkey reclaims expired keys both when accessed and in the background. The background process scans for expired keys to free memory. Increasing the active-expire-effort setting (default 1, max 10) uses more CPU to reclaim expired keys faster, reducing memory usage but potentially increasing latency. Default: `1`.
        :param builtins.int valkey_io_threads: Set Valkey IO thread count. Changing this will cause a restart of the Valkey service. Example: `1`.
        :param builtins.int valkey_lfu_decay_time: LFU maxmemory-policy counter decay time in minutes. Default: `1`.
        :param builtins.int valkey_lfu_log_factor: Counter logarithm factor for volatile-lfu and allkeys-lfu maxmemory-policies. Default: `10`.
        :param builtins.str valkey_maxmemory_policy: Enum: `allkeys-lfu`, `allkeys-lru`, `allkeys-random`, `noeviction`, `volatile-lfu`, `volatile-lru`, `volatile-random`, `volatile-ttl`. Valkey maxmemory-policy. Default: `noeviction`.
        :param builtins.str valkey_notify_keyspace_events: Set notify-keyspace-events option.
        :param builtins.int valkey_number_of_databases: Set number of Valkey databases. Changing this will cause a restart of the Valkey service. Example: `16`.
        :param builtins.str valkey_persistence: Enum: `off`, `rdb`. When persistence is `rdb`, Valkey does RDB dumps each 10 minutes if any key is changed. Also RDB dumps are done according to backup schedule for backup purposes. When persistence is `off`, no RDB dumps and backups are done, so data can be lost at any moment if service is restarted for any reason, or if service is powered off. Also service can't be forked.
        :param builtins.int valkey_pubsub_client_output_buffer_limit: Set output buffer limit for pub / sub clients in MB. The value is the hard limit, the soft limit is 1/4 of the hard limit. When setting the limit, be mindful of the available memory in the selected service plan. Example: `64`.
        :param builtins.bool valkey_ssl: Require SSL to access Valkey. Default: `true`.
        :param builtins.int valkey_timeout: Valkey idle connection timeout in seconds. Default: `300`.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if backup_hour is not None:
            pulumi.set(__self__, "backup_hour", backup_hour)
        if backup_minute is not None:
            pulumi.set(__self__, "backup_minute", backup_minute)
        if enable_ipv6 is not None:
            pulumi.set(__self__, "enable_ipv6", enable_ipv6)
        if frequent_snapshots is not None:
            pulumi.set(__self__, "frequent_snapshots", frequent_snapshots)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if migration is not None:
            pulumi.set(__self__, "migration", migration)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_basebackup_name is not None:
            pulumi.set(__self__, "recovery_basebackup_name", recovery_basebackup_name)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)
        if valkey_acl_channels_default is not None:
            pulumi.set(__self__, "valkey_acl_channels_default", valkey_acl_channels_default)
        if valkey_active_expire_effort is not None:
            pulumi.set(__self__, "valkey_active_expire_effort", valkey_active_expire_effort)
        if valkey_io_threads is not None:
            pulumi.set(__self__, "valkey_io_threads", valkey_io_threads)
        if valkey_lfu_decay_time is not None:
            pulumi.set(__self__, "valkey_lfu_decay_time", valkey_lfu_decay_time)
        if valkey_lfu_log_factor is not None:
            pulumi.set(__self__, "valkey_lfu_log_factor", valkey_lfu_log_factor)
        if valkey_maxmemory_policy is not None:
            pulumi.set(__self__, "valkey_maxmemory_policy", valkey_maxmemory_policy)
        if valkey_notify_keyspace_events is not None:
            pulumi.set(__self__, "valkey_notify_keyspace_events", valkey_notify_keyspace_events)
        if valkey_number_of_databases is not None:
            pulumi.set(__self__, "valkey_number_of_databases", valkey_number_of_databases)
        if valkey_persistence is not None:
            pulumi.set(__self__, "valkey_persistence", valkey_persistence)
        if valkey_pubsub_client_output_buffer_limit is not None:
            pulumi.set(__self__, "valkey_pubsub_client_output_buffer_limit", valkey_pubsub_client_output_buffer_limit)
        if valkey_ssl is not None:
            pulumi.set(__self__, "valkey_ssl", valkey_ssl)
        if valkey_timeout is not None:
            pulumi.set(__self__, "valkey_timeout", valkey_timeout)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="backupHour")
    def backup_hour(self) -> Optional[builtins.int]:
        """
        The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        """
        return pulumi.get(self, "backup_hour")

    @property
    @pulumi.getter(name="backupMinute")
    def backup_minute(self) -> Optional[builtins.int]:
        """
        The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        """
        return pulumi.get(self, "backup_minute")

    @property
    @pulumi.getter(name="enableIpv6")
    def enable_ipv6(self) -> Optional[builtins.bool]:
        """
        Register AAAA DNS records for the service, and allow IPv6 packets to service ports.
        """
        return pulumi.get(self, "enable_ipv6")

    @property
    @pulumi.getter(name="frequentSnapshots")
    def frequent_snapshots(self) -> Optional[builtins.bool]:
        """
        When enabled, Valkey will create frequent local RDB snapshots. When disabled, Valkey will only take RDB snapshots when a backup is created, based on the backup schedule. This setting is ignored when `valkey_persistence` is set to `off`. Default: `true`.
        """
        return pulumi.get(self, "frequent_snapshots")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.ValkeyValkeyUserConfigIpFilterObject']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter
    def migration(self) -> Optional['outputs.ValkeyValkeyUserConfigMigration']:
        """
        Migrate data from existing server
        """
        return pulumi.get(self, "migration")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.ValkeyValkeyUserConfigPrivateAccess']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.ValkeyValkeyUserConfigPrivatelinkAccess']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.ValkeyValkeyUserConfigPublicAccess']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryBasebackupName")
    def recovery_basebackup_name(self) -> Optional[builtins.str]:
        """
        Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        """
        return pulumi.get(self, "recovery_basebackup_name")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")

    @property
    @pulumi.getter(name="valkeyAclChannelsDefault")
    def valkey_acl_channels_default(self) -> Optional[builtins.str]:
        """
        Enum: `allchannels`, `resetchannels`. Determines default pub/sub channels' ACL for new users if ACL is not supplied. When this option is not defined, all_channels is assumed to keep backward compatibility. This option doesn't affect Valkey configuration acl-pubsub-default.
        """
        return pulumi.get(self, "valkey_acl_channels_default")

    @property
    @pulumi.getter(name="valkeyActiveExpireEffort")
    def valkey_active_expire_effort(self) -> Optional[builtins.int]:
        """
        Valkey reclaims expired keys both when accessed and in the background. The background process scans for expired keys to free memory. Increasing the active-expire-effort setting (default 1, max 10) uses more CPU to reclaim expired keys faster, reducing memory usage but potentially increasing latency. Default: `1`.
        """
        return pulumi.get(self, "valkey_active_expire_effort")

    @property
    @pulumi.getter(name="valkeyIoThreads")
    def valkey_io_threads(self) -> Optional[builtins.int]:
        """
        Set Valkey IO thread count. Changing this will cause a restart of the Valkey service. Example: `1`.
        """
        return pulumi.get(self, "valkey_io_threads")

    @property
    @pulumi.getter(name="valkeyLfuDecayTime")
    def valkey_lfu_decay_time(self) -> Optional[builtins.int]:
        """
        LFU maxmemory-policy counter decay time in minutes. Default: `1`.
        """
        return pulumi.get(self, "valkey_lfu_decay_time")

    @property
    @pulumi.getter(name="valkeyLfuLogFactor")
    def valkey_lfu_log_factor(self) -> Optional[builtins.int]:
        """
        Counter logarithm factor for volatile-lfu and allkeys-lfu maxmemory-policies. Default: `10`.
        """
        return pulumi.get(self, "valkey_lfu_log_factor")

    @property
    @pulumi.getter(name="valkeyMaxmemoryPolicy")
    def valkey_maxmemory_policy(self) -> Optional[builtins.str]:
        """
        Enum: `allkeys-lfu`, `allkeys-lru`, `allkeys-random`, `noeviction`, `volatile-lfu`, `volatile-lru`, `volatile-random`, `volatile-ttl`. Valkey maxmemory-policy. Default: `noeviction`.
        """
        return pulumi.get(self, "valkey_maxmemory_policy")

    @property
    @pulumi.getter(name="valkeyNotifyKeyspaceEvents")
    def valkey_notify_keyspace_events(self) -> Optional[builtins.str]:
        """
        Set notify-keyspace-events option.
        """
        return pulumi.get(self, "valkey_notify_keyspace_events")

    @property
    @pulumi.getter(name="valkeyNumberOfDatabases")
    def valkey_number_of_databases(self) -> Optional[builtins.int]:
        """
        Set number of Valkey databases. Changing this will cause a restart of the Valkey service. Example: `16`.
        """
        return pulumi.get(self, "valkey_number_of_databases")

    @property
    @pulumi.getter(name="valkeyPersistence")
    def valkey_persistence(self) -> Optional[builtins.str]:
        """
        Enum: `off`, `rdb`. When persistence is `rdb`, Valkey does RDB dumps each 10 minutes if any key is changed. Also RDB dumps are done according to backup schedule for backup purposes. When persistence is `off`, no RDB dumps and backups are done, so data can be lost at any moment if service is restarted for any reason, or if service is powered off. Also service can't be forked.
        """
        return pulumi.get(self, "valkey_persistence")

    @property
    @pulumi.getter(name="valkeyPubsubClientOutputBufferLimit")
    def valkey_pubsub_client_output_buffer_limit(self) -> Optional[builtins.int]:
        """
        Set output buffer limit for pub / sub clients in MB. The value is the hard limit, the soft limit is 1/4 of the hard limit. When setting the limit, be mindful of the available memory in the selected service plan. Example: `64`.
        """
        return pulumi.get(self, "valkey_pubsub_client_output_buffer_limit")

    @property
    @pulumi.getter(name="valkeySsl")
    def valkey_ssl(self) -> Optional[builtins.bool]:
        """
        Require SSL to access Valkey. Default: `true`.
        """
        return pulumi.get(self, "valkey_ssl")

    @property
    @pulumi.getter(name="valkeyTimeout")
    def valkey_timeout(self) -> Optional[builtins.int]:
        """
        Valkey idle connection timeout in seconds. Default: `300`.
        """
        return pulumi.get(self, "valkey_timeout")


@pulumi.output_type
class ValkeyValkeyUserConfigIpFilterObject(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class ValkeyValkeyUserConfigMigration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "ignoreDbs":
            suggest = "ignore_dbs"
        elif key == "ignoreRoles":
            suggest = "ignore_roles"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ValkeyValkeyUserConfigMigration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ValkeyValkeyUserConfigMigration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ValkeyValkeyUserConfigMigration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 host: builtins.str,
                 port: builtins.int,
                 dbname: Optional[builtins.str] = None,
                 ignore_dbs: Optional[builtins.str] = None,
                 ignore_roles: Optional[builtins.str] = None,
                 method: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 username: Optional[builtins.str] = None):
        """
        :param builtins.str host: Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        :param builtins.int port: Port number of the server where to migrate data from. Example: `1234`.
        :param builtins.str dbname: Database name for bootstrapping the initial connection. Example: `defaultdb`.
        :param builtins.str ignore_dbs: Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        :param builtins.str ignore_roles: Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        :param builtins.str method: Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        :param builtins.str password: Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        :param builtins.bool ssl: The server where to migrate data from is secured with SSL. Default: `true`.
        :param builtins.str username: User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "port", port)
        if dbname is not None:
            pulumi.set(__self__, "dbname", dbname)
        if ignore_dbs is not None:
            pulumi.set(__self__, "ignore_dbs", ignore_dbs)
        if ignore_roles is not None:
            pulumi.set(__self__, "ignore_roles", ignore_roles)
        if method is not None:
            pulumi.set(__self__, "method", method)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number of the server where to migrate data from. Example: `1234`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def dbname(self) -> Optional[builtins.str]:
        """
        Database name for bootstrapping the initial connection. Example: `defaultdb`.
        """
        return pulumi.get(self, "dbname")

    @property
    @pulumi.getter(name="ignoreDbs")
    def ignore_dbs(self) -> Optional[builtins.str]:
        """
        Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        """
        return pulumi.get(self, "ignore_dbs")

    @property
    @pulumi.getter(name="ignoreRoles")
    def ignore_roles(self) -> Optional[builtins.str]:
        """
        Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        """
        return pulumi.get(self, "ignore_roles")

    @property
    @pulumi.getter
    def method(self) -> Optional[builtins.str]:
        """
        Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        """
        return pulumi.get(self, "method")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        The server where to migrate data from is secured with SSL. Default: `true`.
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def username(self) -> Optional[builtins.str]:
        """
        User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class ValkeyValkeyUserConfigPrivateAccess(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None,
                 valkey: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool valkey: Allow clients to connect to valkey with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if valkey is not None:
            pulumi.set(__self__, "valkey", valkey)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter
    def valkey(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to valkey with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "valkey")


@pulumi.output_type
class ValkeyValkeyUserConfigPrivatelinkAccess(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None,
                 valkey: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Enable prometheus.
        :param builtins.bool valkey: Enable valkey.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if valkey is not None:
            pulumi.set(__self__, "valkey", valkey)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter
    def valkey(self) -> Optional[builtins.bool]:
        """
        Enable valkey.
        """
        return pulumi.get(self, "valkey")


@pulumi.output_type
class ValkeyValkeyUserConfigPublicAccess(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None,
                 valkey: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool valkey: Allow clients to connect to valkey from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if valkey is not None:
            pulumi.set(__self__, "valkey", valkey)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter
    def valkey(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to valkey from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "valkey")


@pulumi.output_type
class GetAccountAuthenticationSamlFieldMappingResult(dict):
    def __init__(__self__, *,
                 email: Optional[builtins.str] = None,
                 first_name: Optional[builtins.str] = None,
                 identity: Optional[builtins.str] = None,
                 last_name: Optional[builtins.str] = None,
                 real_name: Optional[builtins.str] = None):
        """
        :param builtins.str email: Field name for user email
        :param builtins.str first_name: Field name for user's first name
        :param builtins.str identity: Field name for user's identity. This field must always exist in responses, and must be immutable and unique. Contents of this field are used to identify the user. Using user ID (such as unix user id) is highly recommended, as email address may change, requiring relinking user to Aiven user.
        :param builtins.str last_name: Field name for user's last name
        :param builtins.str real_name: Field name for user's full name. If specified, first_name and last_name mappings are ignored
        """
        if email is not None:
            pulumi.set(__self__, "email", email)
        if first_name is not None:
            pulumi.set(__self__, "first_name", first_name)
        if identity is not None:
            pulumi.set(__self__, "identity", identity)
        if last_name is not None:
            pulumi.set(__self__, "last_name", last_name)
        if real_name is not None:
            pulumi.set(__self__, "real_name", real_name)

    @property
    @pulumi.getter
    def email(self) -> Optional[builtins.str]:
        """
        Field name for user email
        """
        return pulumi.get(self, "email")

    @property
    @pulumi.getter(name="firstName")
    def first_name(self) -> Optional[builtins.str]:
        """
        Field name for user's first name
        """
        return pulumi.get(self, "first_name")

    @property
    @pulumi.getter
    def identity(self) -> Optional[builtins.str]:
        """
        Field name for user's identity. This field must always exist in responses, and must be immutable and unique. Contents of this field are used to identify the user. Using user ID (such as unix user id) is highly recommended, as email address may change, requiring relinking user to Aiven user.
        """
        return pulumi.get(self, "identity")

    @property
    @pulumi.getter(name="lastName")
    def last_name(self) -> Optional[builtins.str]:
        """
        Field name for user's last name
        """
        return pulumi.get(self, "last_name")

    @property
    @pulumi.getter(name="realName")
    def real_name(self) -> Optional[builtins.str]:
        """
        Field name for user's full name. If specified, first_name and last_name mappings are ignored
        """
        return pulumi.get(self, "real_name")


@pulumi.output_type
class GetAlloydbomniAlloydbomniResult(dict):
    def __init__(__self__, *,
                 bouncer: builtins.str,
                 dbname: builtins.str,
                 host: builtins.str,
                 max_connections: builtins.int,
                 params: Sequence['outputs.GetAlloydbomniAlloydbomniParamResult'],
                 password: builtins.str,
                 port: builtins.int,
                 replica_uri: builtins.str,
                 sslmode: builtins.str,
                 standby_uris: Sequence[builtins.str],
                 syncing_uris: Sequence[builtins.str],
                 uri: builtins.str,
                 uris: Sequence[builtins.str],
                 user: builtins.str):
        """
        :param builtins.str bouncer: PgBouncer connection details for [connection pooling](https://aiven.io/docs/products/postgresql/concepts/pg-connection-pooling).
        :param builtins.str dbname: Primary AlloyDB Omni database name.
        :param builtins.str host: AlloyDB Omni primary node host IP or name.
        :param builtins.int max_connections: The [number of allowed connections](https://aiven.io/docs/products/postgresql/reference/pg-connection-limits). Varies based on the service plan.
        :param Sequence['GetAlloydbomniAlloydbomniParamArgs'] params: AlloyDB Omni connection parameters.
        :param builtins.str password: AlloyDB Omni admin user password.
        :param builtins.int port: AlloyDB Omni port.
        :param builtins.str replica_uri: AlloyDB Omni replica URI for services with a replica.
        :param builtins.str sslmode: AlloyDB Omni SSL mode setting.
        :param Sequence[builtins.str] standby_uris: AlloyDB Omni standby connection URIs.
        :param Sequence[builtins.str] syncing_uris: AlloyDB Omni syncing connection URIs.
        :param builtins.str uri: AlloyDB Omni primary connection URI.
        :param Sequence[builtins.str] uris: AlloyDB Omni primary connection URIs.
        :param builtins.str user: AlloyDB Omni admin user name.
        """
        pulumi.set(__self__, "bouncer", bouncer)
        pulumi.set(__self__, "dbname", dbname)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "max_connections", max_connections)
        pulumi.set(__self__, "params", params)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "replica_uri", replica_uri)
        pulumi.set(__self__, "sslmode", sslmode)
        pulumi.set(__self__, "standby_uris", standby_uris)
        pulumi.set(__self__, "syncing_uris", syncing_uris)
        pulumi.set(__self__, "uri", uri)
        pulumi.set(__self__, "uris", uris)
        pulumi.set(__self__, "user", user)

    @property
    @pulumi.getter
    @_utilities.deprecated("""This field was added by mistake and has never worked. It will be removed in future versions.""")
    def bouncer(self) -> builtins.str:
        """
        PgBouncer connection details for [connection pooling](https://aiven.io/docs/products/postgresql/concepts/pg-connection-pooling).
        """
        return pulumi.get(self, "bouncer")

    @property
    @pulumi.getter
    def dbname(self) -> builtins.str:
        """
        Primary AlloyDB Omni database name.
        """
        return pulumi.get(self, "dbname")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        AlloyDB Omni primary node host IP or name.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="maxConnections")
    def max_connections(self) -> builtins.int:
        """
        The [number of allowed connections](https://aiven.io/docs/products/postgresql/reference/pg-connection-limits). Varies based on the service plan.
        """
        return pulumi.get(self, "max_connections")

    @property
    @pulumi.getter
    def params(self) -> Sequence['outputs.GetAlloydbomniAlloydbomniParamResult']:
        """
        AlloyDB Omni connection parameters.
        """
        return pulumi.get(self, "params")

    @property
    @pulumi.getter
    def password(self) -> builtins.str:
        """
        AlloyDB Omni admin user password.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        AlloyDB Omni port.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter(name="replicaUri")
    def replica_uri(self) -> builtins.str:
        """
        AlloyDB Omni replica URI for services with a replica.
        """
        return pulumi.get(self, "replica_uri")

    @property
    @pulumi.getter
    def sslmode(self) -> builtins.str:
        """
        AlloyDB Omni SSL mode setting.
        """
        return pulumi.get(self, "sslmode")

    @property
    @pulumi.getter(name="standbyUris")
    def standby_uris(self) -> Sequence[builtins.str]:
        """
        AlloyDB Omni standby connection URIs.
        """
        return pulumi.get(self, "standby_uris")

    @property
    @pulumi.getter(name="syncingUris")
    def syncing_uris(self) -> Sequence[builtins.str]:
        """
        AlloyDB Omni syncing connection URIs.
        """
        return pulumi.get(self, "syncing_uris")

    @property
    @pulumi.getter
    def uri(self) -> builtins.str:
        """
        AlloyDB Omni primary connection URI.
        """
        return pulumi.get(self, "uri")

    @property
    @pulumi.getter
    def uris(self) -> Sequence[builtins.str]:
        """
        AlloyDB Omni primary connection URIs.
        """
        return pulumi.get(self, "uris")

    @property
    @pulumi.getter
    def user(self) -> builtins.str:
        """
        AlloyDB Omni admin user name.
        """
        return pulumi.get(self, "user")


@pulumi.output_type
class GetAlloydbomniAlloydbomniParamResult(dict):
    def __init__(__self__, *,
                 database_name: builtins.str,
                 host: builtins.str,
                 password: builtins.str,
                 port: builtins.int,
                 sslmode: builtins.str,
                 user: builtins.str):
        """
        :param builtins.str database_name: Primary AlloyDB Omni database name.
        :param builtins.str host: AlloyDB Omni host IP or name.
        :param builtins.str password: AlloyDB Omni admin user password.
        :param builtins.int port: AlloyDB Omni port.
        :param builtins.str sslmode: AlloyDB Omni SSL mode setting.
        :param builtins.str user: AlloyDB Omni admin user name.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "sslmode", sslmode)
        pulumi.set(__self__, "user", user)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> builtins.str:
        """
        Primary AlloyDB Omni database name.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        AlloyDB Omni host IP or name.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def password(self) -> builtins.str:
        """
        AlloyDB Omni admin user password.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        AlloyDB Omni port.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def sslmode(self) -> builtins.str:
        """
        AlloyDB Omni SSL mode setting.
        """
        return pulumi.get(self, "sslmode")

    @property
    @pulumi.getter
    def user(self) -> builtins.str:
        """
        AlloyDB Omni admin user name.
        """
        return pulumi.get(self, "user")


@pulumi.output_type
class GetAlloydbomniAlloydbomniUserConfigResult(dict):
    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 admin_password: Optional[builtins.str] = None,
                 admin_username: Optional[builtins.str] = None,
                 alloydbomni_version: Optional[builtins.str] = None,
                 backup_hour: Optional[builtins.int] = None,
                 backup_minute: Optional[builtins.int] = None,
                 enable_ipv6: Optional[builtins.bool] = None,
                 google_columnar_engine_enabled: Optional[builtins.bool] = None,
                 google_columnar_engine_memory_size_percentage: Optional[builtins.int] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetAlloydbomniAlloydbomniUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 pg: Optional['outputs.GetAlloydbomniAlloydbomniUserConfigPgResult'] = None,
                 pg_read_replica: Optional[builtins.bool] = None,
                 pg_service_to_fork_from: Optional[builtins.str] = None,
                 pg_version: Optional[builtins.str] = None,
                 pgaudit: Optional['outputs.GetAlloydbomniAlloydbomniUserConfigPgauditResult'] = None,
                 pgbouncer: Optional['outputs.GetAlloydbomniAlloydbomniUserConfigPgbouncerResult'] = None,
                 pglookout: Optional['outputs.GetAlloydbomniAlloydbomniUserConfigPglookoutResult'] = None,
                 private_access: Optional['outputs.GetAlloydbomniAlloydbomniUserConfigPrivateAccessResult'] = None,
                 privatelink_access: Optional['outputs.GetAlloydbomniAlloydbomniUserConfigPrivatelinkAccessResult'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.GetAlloydbomniAlloydbomniUserConfigPublicAccessResult'] = None,
                 recovery_target_time: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 shared_buffers_percentage: Optional[builtins.float] = None,
                 static_ips: Optional[builtins.bool] = None,
                 synchronous_replication: Optional[builtins.str] = None,
                 variant: Optional[builtins.str] = None,
                 work_mem: Optional[builtins.int] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.str admin_password: Custom password for admin user. Defaults to random string. This must be set only when a new service is being created.
        :param builtins.str admin_username: Custom username for admin user. This must be set only when a new service is being created. Example: `avnadmin`.
        :param builtins.str alloydbomni_version: Enum: `15`, and newer. PostgreSQL major version.
        :param builtins.int backup_hour: The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        :param builtins.int backup_minute: The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        :param builtins.bool enable_ipv6: Register AAAA DNS records for the service, and allow IPv6 packets to service ports.
        :param builtins.bool google_columnar_engine_enabled: Enables or disables the columnar engine. When enabled, it accelerates SQL query processing. Default: `true`.
        :param builtins.int google_columnar_engine_memory_size_percentage: Allocate the amount of RAM to store columnar data. Default: `10`.
        :param Sequence['GetAlloydbomniAlloydbomniUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'GetAlloydbomniAlloydbomniUserConfigPgArgs' pg: postgresql.conf configuration values
        :param builtins.bool pg_read_replica: Should the service which is being forked be a read replica (deprecated, use read_replica service integration instead).
        :param builtins.str pg_service_to_fork_from: Name of the PG Service from which to fork (deprecated, use service_to_fork_from). This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.str pg_version: Enum: `15`, and newer. PostgreSQL major version.
        :param 'GetAlloydbomniAlloydbomniUserConfigPgauditArgs' pgaudit: System-wide settings for the pgaudit extension
        :param 'GetAlloydbomniAlloydbomniUserConfigPgbouncerArgs' pgbouncer: PGBouncer connection pooling settings
        :param 'GetAlloydbomniAlloydbomniUserConfigPglookoutArgs' pglookout: System-wide settings for pglookout
        :param 'GetAlloydbomniAlloydbomniUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'GetAlloydbomniAlloydbomniUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'GetAlloydbomniAlloydbomniUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_target_time: Recovery target time when forking a service. This has effect only when a new service is being created. Example: `2019-01-01 23:34:45`.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.float shared_buffers_percentage: Percentage of total RAM that the database server uses for shared memory buffers. Valid range is 20-60 (float), which corresponds to 20% - 60%. This setting adjusts the shared_buffers configuration value. Changing this parameter causes a service restart. Example: `41.5`.
        :param builtins.bool static_ips: Use static public IP addresses.
        :param builtins.str synchronous_replication: Enum: `off`, `quorum`. Synchronous replication type. Note that the service plan also needs to support synchronous replication.
        :param builtins.str variant: Enum: `aiven`, `timescale`. Variant of the PostgreSQL service, may affect the features that are exposed by default.
        :param builtins.int work_mem: Sets the maximum amount of memory to be used by a query operation (such as a sort or hash table) before writing to temporary disk files, in MB. The default is 1MB + 0.075% of total RAM (up to 32MB). Example: `4`.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if admin_password is not None:
            pulumi.set(__self__, "admin_password", admin_password)
        if admin_username is not None:
            pulumi.set(__self__, "admin_username", admin_username)
        if alloydbomni_version is not None:
            pulumi.set(__self__, "alloydbomni_version", alloydbomni_version)
        if backup_hour is not None:
            pulumi.set(__self__, "backup_hour", backup_hour)
        if backup_minute is not None:
            pulumi.set(__self__, "backup_minute", backup_minute)
        if enable_ipv6 is not None:
            pulumi.set(__self__, "enable_ipv6", enable_ipv6)
        if google_columnar_engine_enabled is not None:
            pulumi.set(__self__, "google_columnar_engine_enabled", google_columnar_engine_enabled)
        if google_columnar_engine_memory_size_percentage is not None:
            pulumi.set(__self__, "google_columnar_engine_memory_size_percentage", google_columnar_engine_memory_size_percentage)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if pg is not None:
            pulumi.set(__self__, "pg", pg)
        if pg_read_replica is not None:
            pulumi.set(__self__, "pg_read_replica", pg_read_replica)
        if pg_service_to_fork_from is not None:
            pulumi.set(__self__, "pg_service_to_fork_from", pg_service_to_fork_from)
        if pg_version is not None:
            pulumi.set(__self__, "pg_version", pg_version)
        if pgaudit is not None:
            pulumi.set(__self__, "pgaudit", pgaudit)
        if pgbouncer is not None:
            pulumi.set(__self__, "pgbouncer", pgbouncer)
        if pglookout is not None:
            pulumi.set(__self__, "pglookout", pglookout)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_target_time is not None:
            pulumi.set(__self__, "recovery_target_time", recovery_target_time)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if shared_buffers_percentage is not None:
            pulumi.set(__self__, "shared_buffers_percentage", shared_buffers_percentage)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)
        if synchronous_replication is not None:
            pulumi.set(__self__, "synchronous_replication", synchronous_replication)
        if variant is not None:
            pulumi.set(__self__, "variant", variant)
        if work_mem is not None:
            pulumi.set(__self__, "work_mem", work_mem)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="adminPassword")
    def admin_password(self) -> Optional[builtins.str]:
        """
        Custom password for admin user. Defaults to random string. This must be set only when a new service is being created.
        """
        return pulumi.get(self, "admin_password")

    @property
    @pulumi.getter(name="adminUsername")
    def admin_username(self) -> Optional[builtins.str]:
        """
        Custom username for admin user. This must be set only when a new service is being created. Example: `avnadmin`.
        """
        return pulumi.get(self, "admin_username")

    @property
    @pulumi.getter(name="alloydbomniVersion")
    def alloydbomni_version(self) -> Optional[builtins.str]:
        """
        Enum: `15`, and newer. PostgreSQL major version.
        """
        return pulumi.get(self, "alloydbomni_version")

    @property
    @pulumi.getter(name="backupHour")
    def backup_hour(self) -> Optional[builtins.int]:
        """
        The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        """
        return pulumi.get(self, "backup_hour")

    @property
    @pulumi.getter(name="backupMinute")
    def backup_minute(self) -> Optional[builtins.int]:
        """
        The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        """
        return pulumi.get(self, "backup_minute")

    @property
    @pulumi.getter(name="enableIpv6")
    def enable_ipv6(self) -> Optional[builtins.bool]:
        """
        Register AAAA DNS records for the service, and allow IPv6 packets to service ports.
        """
        return pulumi.get(self, "enable_ipv6")

    @property
    @pulumi.getter(name="googleColumnarEngineEnabled")
    def google_columnar_engine_enabled(self) -> Optional[builtins.bool]:
        """
        Enables or disables the columnar engine. When enabled, it accelerates SQL query processing. Default: `true`.
        """
        return pulumi.get(self, "google_columnar_engine_enabled")

    @property
    @pulumi.getter(name="googleColumnarEngineMemorySizePercentage")
    def google_columnar_engine_memory_size_percentage(self) -> Optional[builtins.int]:
        """
        Allocate the amount of RAM to store columnar data. Default: `10`.
        """
        return pulumi.get(self, "google_columnar_engine_memory_size_percentage")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetAlloydbomniAlloydbomniUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter
    def pg(self) -> Optional['outputs.GetAlloydbomniAlloydbomniUserConfigPgResult']:
        """
        postgresql.conf configuration values
        """
        return pulumi.get(self, "pg")

    @property
    @pulumi.getter(name="pgReadReplica")
    def pg_read_replica(self) -> Optional[builtins.bool]:
        """
        Should the service which is being forked be a read replica (deprecated, use read_replica service integration instead).
        """
        return pulumi.get(self, "pg_read_replica")

    @property
    @pulumi.getter(name="pgServiceToForkFrom")
    def pg_service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of the PG Service from which to fork (deprecated, use service_to_fork_from). This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "pg_service_to_fork_from")

    @property
    @pulumi.getter(name="pgVersion")
    def pg_version(self) -> Optional[builtins.str]:
        """
        Enum: `15`, and newer. PostgreSQL major version.
        """
        return pulumi.get(self, "pg_version")

    @property
    @pulumi.getter
    def pgaudit(self) -> Optional['outputs.GetAlloydbomniAlloydbomniUserConfigPgauditResult']:
        """
        System-wide settings for the pgaudit extension
        """
        return pulumi.get(self, "pgaudit")

    @property
    @pulumi.getter
    def pgbouncer(self) -> Optional['outputs.GetAlloydbomniAlloydbomniUserConfigPgbouncerResult']:
        """
        PGBouncer connection pooling settings
        """
        return pulumi.get(self, "pgbouncer")

    @property
    @pulumi.getter
    def pglookout(self) -> Optional['outputs.GetAlloydbomniAlloydbomniUserConfigPglookoutResult']:
        """
        System-wide settings for pglookout
        """
        return pulumi.get(self, "pglookout")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.GetAlloydbomniAlloydbomniUserConfigPrivateAccessResult']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.GetAlloydbomniAlloydbomniUserConfigPrivatelinkAccessResult']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GetAlloydbomniAlloydbomniUserConfigPublicAccessResult']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryTargetTime")
    def recovery_target_time(self) -> Optional[builtins.str]:
        """
        Recovery target time when forking a service. This has effect only when a new service is being created. Example: `2019-01-01 23:34:45`.
        """
        return pulumi.get(self, "recovery_target_time")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="sharedBuffersPercentage")
    def shared_buffers_percentage(self) -> Optional[builtins.float]:
        """
        Percentage of total RAM that the database server uses for shared memory buffers. Valid range is 20-60 (float), which corresponds to 20% - 60%. This setting adjusts the shared_buffers configuration value. Changing this parameter causes a service restart. Example: `41.5`.
        """
        return pulumi.get(self, "shared_buffers_percentage")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")

    @property
    @pulumi.getter(name="synchronousReplication")
    def synchronous_replication(self) -> Optional[builtins.str]:
        """
        Enum: `off`, `quorum`. Synchronous replication type. Note that the service plan also needs to support synchronous replication.
        """
        return pulumi.get(self, "synchronous_replication")

    @property
    @pulumi.getter
    def variant(self) -> Optional[builtins.str]:
        """
        Enum: `aiven`, `timescale`. Variant of the PostgreSQL service, may affect the features that are exposed by default.
        """
        return pulumi.get(self, "variant")

    @property
    @pulumi.getter(name="workMem")
    def work_mem(self) -> Optional[builtins.int]:
        """
        Sets the maximum amount of memory to be used by a query operation (such as a sort or hash table) before writing to temporary disk files, in MB. The default is 1MB + 0.075% of total RAM (up to 32MB). Example: `4`.
        """
        return pulumi.get(self, "work_mem")


@pulumi.output_type
class GetAlloydbomniAlloydbomniUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetAlloydbomniAlloydbomniUserConfigPgResult(dict):
    def __init__(__self__, *,
                 autovacuum_analyze_scale_factor: Optional[builtins.float] = None,
                 autovacuum_analyze_threshold: Optional[builtins.int] = None,
                 autovacuum_freeze_max_age: Optional[builtins.int] = None,
                 autovacuum_max_workers: Optional[builtins.int] = None,
                 autovacuum_naptime: Optional[builtins.int] = None,
                 autovacuum_vacuum_cost_delay: Optional[builtins.int] = None,
                 autovacuum_vacuum_cost_limit: Optional[builtins.int] = None,
                 autovacuum_vacuum_scale_factor: Optional[builtins.float] = None,
                 autovacuum_vacuum_threshold: Optional[builtins.int] = None,
                 bgwriter_delay: Optional[builtins.int] = None,
                 bgwriter_flush_after: Optional[builtins.int] = None,
                 bgwriter_lru_maxpages: Optional[builtins.int] = None,
                 bgwriter_lru_multiplier: Optional[builtins.float] = None,
                 deadlock_timeout: Optional[builtins.int] = None,
                 default_toast_compression: Optional[builtins.str] = None,
                 idle_in_transaction_session_timeout: Optional[builtins.int] = None,
                 jit: Optional[builtins.bool] = None,
                 log_autovacuum_min_duration: Optional[builtins.int] = None,
                 log_error_verbosity: Optional[builtins.str] = None,
                 log_line_prefix: Optional[builtins.str] = None,
                 log_min_duration_statement: Optional[builtins.int] = None,
                 log_temp_files: Optional[builtins.int] = None,
                 max_files_per_process: Optional[builtins.int] = None,
                 max_locks_per_transaction: Optional[builtins.int] = None,
                 max_logical_replication_workers: Optional[builtins.int] = None,
                 max_parallel_workers: Optional[builtins.int] = None,
                 max_parallel_workers_per_gather: Optional[builtins.int] = None,
                 max_pred_locks_per_transaction: Optional[builtins.int] = None,
                 max_prepared_transactions: Optional[builtins.int] = None,
                 max_replication_slots: Optional[builtins.int] = None,
                 max_slot_wal_keep_size: Optional[builtins.int] = None,
                 max_stack_depth: Optional[builtins.int] = None,
                 max_standby_archive_delay: Optional[builtins.int] = None,
                 max_standby_streaming_delay: Optional[builtins.int] = None,
                 max_wal_senders: Optional[builtins.int] = None,
                 max_worker_processes: Optional[builtins.int] = None,
                 password_encryption: Optional[builtins.str] = None,
                 pg_partman_bgw_dot_interval: Optional[builtins.int] = None,
                 pg_partman_bgw_dot_role: Optional[builtins.str] = None,
                 pg_stat_statements_dot_track: Optional[builtins.str] = None,
                 temp_file_limit: Optional[builtins.int] = None,
                 timezone: Optional[builtins.str] = None,
                 track_activity_query_size: Optional[builtins.int] = None,
                 track_commit_timestamp: Optional[builtins.str] = None,
                 track_functions: Optional[builtins.str] = None,
                 track_io_timing: Optional[builtins.str] = None,
                 wal_sender_timeout: Optional[builtins.int] = None,
                 wal_writer_delay: Optional[builtins.int] = None):
        """
        :param builtins.float autovacuum_analyze_scale_factor: Specifies a fraction of the table size to add to autovacuum_analyze_threshold when deciding whether to trigger an ANALYZE (e.g. `0.2` for 20% of the table size). The default is `0.2`.
        :param builtins.int autovacuum_analyze_threshold: Specifies the minimum number of inserted, updated or deleted tuples needed to trigger an ANALYZE in any one table. The default is `50`.
        :param builtins.int autovacuum_freeze_max_age: Specifies the maximum age (in transactions) that a table's pg_class.relfrozenxid field can attain before a VACUUM operation is forced to prevent transaction ID wraparound within the table. The system launches autovacuum processes to prevent wraparound even when autovacuum is otherwise disabled. Changing this parameter causes a service restart. Example: `200000000`.
        :param builtins.int autovacuum_max_workers: Specifies the maximum number of autovacuum processes (other than the autovacuum launcher) that may be running at any one time. The default is `3`. Changing this parameter causes a service restart.
        :param builtins.int autovacuum_naptime: Specifies the minimum delay between autovacuum runs on any given database. The delay is measured in seconds. The default is `60`.
        :param builtins.int autovacuum_vacuum_cost_delay: Specifies the cost delay value that will be used in automatic VACUUM operations. If `-1` is specified, the regular vacuum_cost_delay value will be used. The default is `2` (upstream default).
        :param builtins.int autovacuum_vacuum_cost_limit: Specifies the cost limit value that will be used in automatic VACUUM operations. If `-1` is specified, the regular vacuum_cost_limit value will be used. The default is `-1` (upstream default).
        :param builtins.float autovacuum_vacuum_scale_factor: Specifies a fraction of the table size to add to autovacuum_vacuum_threshold when deciding whether to trigger a VACUUM (e.g. `0.2` for 20% of the table size). The default is `0.2`.
        :param builtins.int autovacuum_vacuum_threshold: Specifies the minimum number of updated or deleted tuples needed to trigger a VACUUM in any one table. The default is `50`.
        :param builtins.int bgwriter_delay: Specifies the delay between activity rounds for the background writer in milliseconds. The default is `200`. Example: `200`.
        :param builtins.int bgwriter_flush_after: Whenever more than bgwriter_flush_after bytes have been written by the background writer, attempt to force the OS to issue these writes to the underlying storage. Specified in kilobytes. Setting of 0 disables forced writeback. The default is `512`. Example: `512`.
        :param builtins.int bgwriter_lru_maxpages: In each round, no more than this many buffers will be written by the background writer. Setting this to zero disables background writing. The default is `100`. Example: `100`.
        :param builtins.float bgwriter_lru_multiplier: The average recent need for new buffers is multiplied by bgwriter_lru_multiplier to arrive at an estimate of the number that will be needed during the next round, (up to bgwriter_lru_maxpages). 1.0 represents a “just in time” policy of writing exactly the number of buffers predicted to be needed. Larger values provide some cushion against spikes in demand, while smaller values intentionally leave writes to be done by server processes. The default is `2.0`. Example: `2.0`.
        :param builtins.int deadlock_timeout: This is the amount of time, in milliseconds, to wait on a lock before checking to see if there is a deadlock condition. The default is `1000` (upstream default). Example: `1000`.
        :param builtins.str default_toast_compression: Enum: `lz4`, `pglz`. Specifies the default TOAST compression method for values of compressible columns. The default is `lz4`.
        :param builtins.int idle_in_transaction_session_timeout: Time out sessions with open transactions after this number of milliseconds.
        :param builtins.bool jit: Controls system-wide use of Just-in-Time Compilation (JIT).
        :param builtins.int log_autovacuum_min_duration: Causes each action executed by autovacuum to be logged if it ran for at least the specified number of milliseconds. Setting this to zero logs all autovacuum actions. Minus-one disables logging autovacuum actions. The default is `1000`.
        :param builtins.str log_error_verbosity: Enum: `DEFAULT`, `TERSE`, `VERBOSE`. Controls the amount of detail written in the server log for each message that is logged.
        :param builtins.str log_line_prefix: Enum: `'%m [%p] %q[user=%u,db=%d,app=%a] '`, `'%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '`, `'pid=%p,user=%u,db=%d,app=%a,client=%h '`, `'pid=%p,user=%u,db=%d,app=%a,client=%h,txid=%x,qid=%Q '`. Choose from one of the available log formats.
        :param builtins.int log_min_duration_statement: Log statements that take more than this number of milliseconds to run, -1 disables.
        :param builtins.int log_temp_files: Log statements for each temporary file created larger than this number of kilobytes, -1 disables.
        :param builtins.int max_files_per_process: PostgreSQL maximum number of files that can be open per process. The default is `1000` (upstream default). Changing this parameter causes a service restart.
        :param builtins.int max_locks_per_transaction: PostgreSQL maximum locks per transaction. Changing this parameter causes a service restart.
        :param builtins.int max_logical_replication_workers: PostgreSQL maximum logical replication workers (taken from the pool of max_parallel_workers). The default is `4` (upstream default). Changing this parameter causes a service restart.
        :param builtins.int max_parallel_workers: Sets the maximum number of workers that the system can support for parallel queries. The default is `8` (upstream default).
        :param builtins.int max_parallel_workers_per_gather: Sets the maximum number of workers that can be started by a single Gather or Gather Merge node. The default is `2` (upstream default).
        :param builtins.int max_pred_locks_per_transaction: PostgreSQL maximum predicate locks per transaction. The default is `64` (upstream default). Changing this parameter causes a service restart.
        :param builtins.int max_prepared_transactions: PostgreSQL maximum prepared transactions. The default is `0`. Changing this parameter causes a service restart.
        :param builtins.int max_replication_slots: PostgreSQL maximum replication slots. The default is `20`. Changing this parameter causes a service restart.
        :param builtins.int max_slot_wal_keep_size: PostgreSQL maximum WAL size (MB) reserved for replication slots. If `-1` is specified, replication slots may retain an unlimited amount of WAL files. The default is `-1` (upstream default). wal_keep_size minimum WAL size setting takes precedence over this.
        :param builtins.int max_stack_depth: Maximum depth of the stack in bytes. The default is `2097152` (upstream default).
        :param builtins.int max_standby_archive_delay: Max standby archive delay in milliseconds. The default is `30000` (upstream default).
        :param builtins.int max_standby_streaming_delay: Max standby streaming delay in milliseconds. The default is `30000` (upstream default).
        :param builtins.int max_wal_senders: PostgreSQL maximum WAL senders. The default is `20`. Changing this parameter causes a service restart.
        :param builtins.int max_worker_processes: Sets the maximum number of background processes that the system can support. The default is `8`. Changing this parameter causes a service restart.
        :param builtins.str password_encryption: Enum: `md5`, `scram-sha-256`. Chooses the algorithm for encrypting passwords. Default: `md5`.
        :param builtins.int pg_partman_bgw_dot_interval: Sets the time interval in seconds to run pg_partman's scheduled tasks. The default is `3600`. Example: `3600`.
        :param builtins.str pg_partman_bgw_dot_role: Controls which role to use for pg_partman's scheduled background tasks. Example: `myrolename`.
        :param builtins.str pg_stat_statements_dot_track: Enum: `all`, `none`, `top`. Controls which statements are counted. Specify top to track top-level statements (those issued directly by clients), all to also track nested statements (such as statements invoked within functions), or none to disable statement statistics collection. The default is `top`.
        :param builtins.int temp_file_limit: PostgreSQL temporary file limit in KiB, -1 for unlimited. Example: `5000000`.
        :param builtins.str timezone: PostgreSQL service timezone. Example: `Europe/Helsinki`.
        :param builtins.int track_activity_query_size: Specifies the number of bytes reserved to track the currently executing command for each active session. Changing this parameter causes a service restart. Example: `1024`.
        :param builtins.str track_commit_timestamp: Enum: `off`, `on`. Record commit time of transactions. Changing this parameter causes a service restart.
        :param builtins.str track_functions: Enum: `all`, `none`, `pl`. Enables tracking of function call counts and time used.
        :param builtins.str track_io_timing: Enum: `off`, `on`. Enables timing of database I/O calls. The default is `off`. When on, it will repeatedly query the operating system for the current time, which may cause significant overhead on some platforms.
        :param builtins.int wal_sender_timeout: Terminate replication connections that are inactive for longer than this amount of time, in milliseconds. Setting this value to zero disables the timeout. Example: `60000`.
        :param builtins.int wal_writer_delay: WAL flush interval in milliseconds. The default is `200`. Setting this parameter to a lower value may negatively impact performance. Example: `50`.
        """
        if autovacuum_analyze_scale_factor is not None:
            pulumi.set(__self__, "autovacuum_analyze_scale_factor", autovacuum_analyze_scale_factor)
        if autovacuum_analyze_threshold is not None:
            pulumi.set(__self__, "autovacuum_analyze_threshold", autovacuum_analyze_threshold)
        if autovacuum_freeze_max_age is not None:
            pulumi.set(__self__, "autovacuum_freeze_max_age", autovacuum_freeze_max_age)
        if autovacuum_max_workers is not None:
            pulumi.set(__self__, "autovacuum_max_workers", autovacuum_max_workers)
        if autovacuum_naptime is not None:
            pulumi.set(__self__, "autovacuum_naptime", autovacuum_naptime)
        if autovacuum_vacuum_cost_delay is not None:
            pulumi.set(__self__, "autovacuum_vacuum_cost_delay", autovacuum_vacuum_cost_delay)
        if autovacuum_vacuum_cost_limit is not None:
            pulumi.set(__self__, "autovacuum_vacuum_cost_limit", autovacuum_vacuum_cost_limit)
        if autovacuum_vacuum_scale_factor is not None:
            pulumi.set(__self__, "autovacuum_vacuum_scale_factor", autovacuum_vacuum_scale_factor)
        if autovacuum_vacuum_threshold is not None:
            pulumi.set(__self__, "autovacuum_vacuum_threshold", autovacuum_vacuum_threshold)
        if bgwriter_delay is not None:
            pulumi.set(__self__, "bgwriter_delay", bgwriter_delay)
        if bgwriter_flush_after is not None:
            pulumi.set(__self__, "bgwriter_flush_after", bgwriter_flush_after)
        if bgwriter_lru_maxpages is not None:
            pulumi.set(__self__, "bgwriter_lru_maxpages", bgwriter_lru_maxpages)
        if bgwriter_lru_multiplier is not None:
            pulumi.set(__self__, "bgwriter_lru_multiplier", bgwriter_lru_multiplier)
        if deadlock_timeout is not None:
            pulumi.set(__self__, "deadlock_timeout", deadlock_timeout)
        if default_toast_compression is not None:
            pulumi.set(__self__, "default_toast_compression", default_toast_compression)
        if idle_in_transaction_session_timeout is not None:
            pulumi.set(__self__, "idle_in_transaction_session_timeout", idle_in_transaction_session_timeout)
        if jit is not None:
            pulumi.set(__self__, "jit", jit)
        if log_autovacuum_min_duration is not None:
            pulumi.set(__self__, "log_autovacuum_min_duration", log_autovacuum_min_duration)
        if log_error_verbosity is not None:
            pulumi.set(__self__, "log_error_verbosity", log_error_verbosity)
        if log_line_prefix is not None:
            pulumi.set(__self__, "log_line_prefix", log_line_prefix)
        if log_min_duration_statement is not None:
            pulumi.set(__self__, "log_min_duration_statement", log_min_duration_statement)
        if log_temp_files is not None:
            pulumi.set(__self__, "log_temp_files", log_temp_files)
        if max_files_per_process is not None:
            pulumi.set(__self__, "max_files_per_process", max_files_per_process)
        if max_locks_per_transaction is not None:
            pulumi.set(__self__, "max_locks_per_transaction", max_locks_per_transaction)
        if max_logical_replication_workers is not None:
            pulumi.set(__self__, "max_logical_replication_workers", max_logical_replication_workers)
        if max_parallel_workers is not None:
            pulumi.set(__self__, "max_parallel_workers", max_parallel_workers)
        if max_parallel_workers_per_gather is not None:
            pulumi.set(__self__, "max_parallel_workers_per_gather", max_parallel_workers_per_gather)
        if max_pred_locks_per_transaction is not None:
            pulumi.set(__self__, "max_pred_locks_per_transaction", max_pred_locks_per_transaction)
        if max_prepared_transactions is not None:
            pulumi.set(__self__, "max_prepared_transactions", max_prepared_transactions)
        if max_replication_slots is not None:
            pulumi.set(__self__, "max_replication_slots", max_replication_slots)
        if max_slot_wal_keep_size is not None:
            pulumi.set(__self__, "max_slot_wal_keep_size", max_slot_wal_keep_size)
        if max_stack_depth is not None:
            pulumi.set(__self__, "max_stack_depth", max_stack_depth)
        if max_standby_archive_delay is not None:
            pulumi.set(__self__, "max_standby_archive_delay", max_standby_archive_delay)
        if max_standby_streaming_delay is not None:
            pulumi.set(__self__, "max_standby_streaming_delay", max_standby_streaming_delay)
        if max_wal_senders is not None:
            pulumi.set(__self__, "max_wal_senders", max_wal_senders)
        if max_worker_processes is not None:
            pulumi.set(__self__, "max_worker_processes", max_worker_processes)
        if password_encryption is not None:
            pulumi.set(__self__, "password_encryption", password_encryption)
        if pg_partman_bgw_dot_interval is not None:
            pulumi.set(__self__, "pg_partman_bgw_dot_interval", pg_partman_bgw_dot_interval)
        if pg_partman_bgw_dot_role is not None:
            pulumi.set(__self__, "pg_partman_bgw_dot_role", pg_partman_bgw_dot_role)
        if pg_stat_statements_dot_track is not None:
            pulumi.set(__self__, "pg_stat_statements_dot_track", pg_stat_statements_dot_track)
        if temp_file_limit is not None:
            pulumi.set(__self__, "temp_file_limit", temp_file_limit)
        if timezone is not None:
            pulumi.set(__self__, "timezone", timezone)
        if track_activity_query_size is not None:
            pulumi.set(__self__, "track_activity_query_size", track_activity_query_size)
        if track_commit_timestamp is not None:
            pulumi.set(__self__, "track_commit_timestamp", track_commit_timestamp)
        if track_functions is not None:
            pulumi.set(__self__, "track_functions", track_functions)
        if track_io_timing is not None:
            pulumi.set(__self__, "track_io_timing", track_io_timing)
        if wal_sender_timeout is not None:
            pulumi.set(__self__, "wal_sender_timeout", wal_sender_timeout)
        if wal_writer_delay is not None:
            pulumi.set(__self__, "wal_writer_delay", wal_writer_delay)

    @property
    @pulumi.getter(name="autovacuumAnalyzeScaleFactor")
    def autovacuum_analyze_scale_factor(self) -> Optional[builtins.float]:
        """
        Specifies a fraction of the table size to add to autovacuum_analyze_threshold when deciding whether to trigger an ANALYZE (e.g. `0.2` for 20% of the table size). The default is `0.2`.
        """
        return pulumi.get(self, "autovacuum_analyze_scale_factor")

    @property
    @pulumi.getter(name="autovacuumAnalyzeThreshold")
    def autovacuum_analyze_threshold(self) -> Optional[builtins.int]:
        """
        Specifies the minimum number of inserted, updated or deleted tuples needed to trigger an ANALYZE in any one table. The default is `50`.
        """
        return pulumi.get(self, "autovacuum_analyze_threshold")

    @property
    @pulumi.getter(name="autovacuumFreezeMaxAge")
    def autovacuum_freeze_max_age(self) -> Optional[builtins.int]:
        """
        Specifies the maximum age (in transactions) that a table's pg_class.relfrozenxid field can attain before a VACUUM operation is forced to prevent transaction ID wraparound within the table. The system launches autovacuum processes to prevent wraparound even when autovacuum is otherwise disabled. Changing this parameter causes a service restart. Example: `200000000`.
        """
        return pulumi.get(self, "autovacuum_freeze_max_age")

    @property
    @pulumi.getter(name="autovacuumMaxWorkers")
    def autovacuum_max_workers(self) -> Optional[builtins.int]:
        """
        Specifies the maximum number of autovacuum processes (other than the autovacuum launcher) that may be running at any one time. The default is `3`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "autovacuum_max_workers")

    @property
    @pulumi.getter(name="autovacuumNaptime")
    def autovacuum_naptime(self) -> Optional[builtins.int]:
        """
        Specifies the minimum delay between autovacuum runs on any given database. The delay is measured in seconds. The default is `60`.
        """
        return pulumi.get(self, "autovacuum_naptime")

    @property
    @pulumi.getter(name="autovacuumVacuumCostDelay")
    def autovacuum_vacuum_cost_delay(self) -> Optional[builtins.int]:
        """
        Specifies the cost delay value that will be used in automatic VACUUM operations. If `-1` is specified, the regular vacuum_cost_delay value will be used. The default is `2` (upstream default).
        """
        return pulumi.get(self, "autovacuum_vacuum_cost_delay")

    @property
    @pulumi.getter(name="autovacuumVacuumCostLimit")
    def autovacuum_vacuum_cost_limit(self) -> Optional[builtins.int]:
        """
        Specifies the cost limit value that will be used in automatic VACUUM operations. If `-1` is specified, the regular vacuum_cost_limit value will be used. The default is `-1` (upstream default).
        """
        return pulumi.get(self, "autovacuum_vacuum_cost_limit")

    @property
    @pulumi.getter(name="autovacuumVacuumScaleFactor")
    def autovacuum_vacuum_scale_factor(self) -> Optional[builtins.float]:
        """
        Specifies a fraction of the table size to add to autovacuum_vacuum_threshold when deciding whether to trigger a VACUUM (e.g. `0.2` for 20% of the table size). The default is `0.2`.
        """
        return pulumi.get(self, "autovacuum_vacuum_scale_factor")

    @property
    @pulumi.getter(name="autovacuumVacuumThreshold")
    def autovacuum_vacuum_threshold(self) -> Optional[builtins.int]:
        """
        Specifies the minimum number of updated or deleted tuples needed to trigger a VACUUM in any one table. The default is `50`.
        """
        return pulumi.get(self, "autovacuum_vacuum_threshold")

    @property
    @pulumi.getter(name="bgwriterDelay")
    def bgwriter_delay(self) -> Optional[builtins.int]:
        """
        Specifies the delay between activity rounds for the background writer in milliseconds. The default is `200`. Example: `200`.
        """
        return pulumi.get(self, "bgwriter_delay")

    @property
    @pulumi.getter(name="bgwriterFlushAfter")
    def bgwriter_flush_after(self) -> Optional[builtins.int]:
        """
        Whenever more than bgwriter_flush_after bytes have been written by the background writer, attempt to force the OS to issue these writes to the underlying storage. Specified in kilobytes. Setting of 0 disables forced writeback. The default is `512`. Example: `512`.
        """
        return pulumi.get(self, "bgwriter_flush_after")

    @property
    @pulumi.getter(name="bgwriterLruMaxpages")
    def bgwriter_lru_maxpages(self) -> Optional[builtins.int]:
        """
        In each round, no more than this many buffers will be written by the background writer. Setting this to zero disables background writing. The default is `100`. Example: `100`.
        """
        return pulumi.get(self, "bgwriter_lru_maxpages")

    @property
    @pulumi.getter(name="bgwriterLruMultiplier")
    def bgwriter_lru_multiplier(self) -> Optional[builtins.float]:
        """
        The average recent need for new buffers is multiplied by bgwriter_lru_multiplier to arrive at an estimate of the number that will be needed during the next round, (up to bgwriter_lru_maxpages). 1.0 represents a “just in time” policy of writing exactly the number of buffers predicted to be needed. Larger values provide some cushion against spikes in demand, while smaller values intentionally leave writes to be done by server processes. The default is `2.0`. Example: `2.0`.
        """
        return pulumi.get(self, "bgwriter_lru_multiplier")

    @property
    @pulumi.getter(name="deadlockTimeout")
    def deadlock_timeout(self) -> Optional[builtins.int]:
        """
        This is the amount of time, in milliseconds, to wait on a lock before checking to see if there is a deadlock condition. The default is `1000` (upstream default). Example: `1000`.
        """
        return pulumi.get(self, "deadlock_timeout")

    @property
    @pulumi.getter(name="defaultToastCompression")
    def default_toast_compression(self) -> Optional[builtins.str]:
        """
        Enum: `lz4`, `pglz`. Specifies the default TOAST compression method for values of compressible columns. The default is `lz4`.
        """
        return pulumi.get(self, "default_toast_compression")

    @property
    @pulumi.getter(name="idleInTransactionSessionTimeout")
    def idle_in_transaction_session_timeout(self) -> Optional[builtins.int]:
        """
        Time out sessions with open transactions after this number of milliseconds.
        """
        return pulumi.get(self, "idle_in_transaction_session_timeout")

    @property
    @pulumi.getter
    def jit(self) -> Optional[builtins.bool]:
        """
        Controls system-wide use of Just-in-Time Compilation (JIT).
        """
        return pulumi.get(self, "jit")

    @property
    @pulumi.getter(name="logAutovacuumMinDuration")
    def log_autovacuum_min_duration(self) -> Optional[builtins.int]:
        """
        Causes each action executed by autovacuum to be logged if it ran for at least the specified number of milliseconds. Setting this to zero logs all autovacuum actions. Minus-one disables logging autovacuum actions. The default is `1000`.
        """
        return pulumi.get(self, "log_autovacuum_min_duration")

    @property
    @pulumi.getter(name="logErrorVerbosity")
    def log_error_verbosity(self) -> Optional[builtins.str]:
        """
        Enum: `DEFAULT`, `TERSE`, `VERBOSE`. Controls the amount of detail written in the server log for each message that is logged.
        """
        return pulumi.get(self, "log_error_verbosity")

    @property
    @pulumi.getter(name="logLinePrefix")
    def log_line_prefix(self) -> Optional[builtins.str]:
        """
        Enum: `'%m [%p] %q[user=%u,db=%d,app=%a] '`, `'%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '`, `'pid=%p,user=%u,db=%d,app=%a,client=%h '`, `'pid=%p,user=%u,db=%d,app=%a,client=%h,txid=%x,qid=%Q '`. Choose from one of the available log formats.
        """
        return pulumi.get(self, "log_line_prefix")

    @property
    @pulumi.getter(name="logMinDurationStatement")
    def log_min_duration_statement(self) -> Optional[builtins.int]:
        """
        Log statements that take more than this number of milliseconds to run, -1 disables.
        """
        return pulumi.get(self, "log_min_duration_statement")

    @property
    @pulumi.getter(name="logTempFiles")
    def log_temp_files(self) -> Optional[builtins.int]:
        """
        Log statements for each temporary file created larger than this number of kilobytes, -1 disables.
        """
        return pulumi.get(self, "log_temp_files")

    @property
    @pulumi.getter(name="maxFilesPerProcess")
    def max_files_per_process(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum number of files that can be open per process. The default is `1000` (upstream default). Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_files_per_process")

    @property
    @pulumi.getter(name="maxLocksPerTransaction")
    def max_locks_per_transaction(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum locks per transaction. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_locks_per_transaction")

    @property
    @pulumi.getter(name="maxLogicalReplicationWorkers")
    def max_logical_replication_workers(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum logical replication workers (taken from the pool of max_parallel_workers). The default is `4` (upstream default). Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_logical_replication_workers")

    @property
    @pulumi.getter(name="maxParallelWorkers")
    def max_parallel_workers(self) -> Optional[builtins.int]:
        """
        Sets the maximum number of workers that the system can support for parallel queries. The default is `8` (upstream default).
        """
        return pulumi.get(self, "max_parallel_workers")

    @property
    @pulumi.getter(name="maxParallelWorkersPerGather")
    def max_parallel_workers_per_gather(self) -> Optional[builtins.int]:
        """
        Sets the maximum number of workers that can be started by a single Gather or Gather Merge node. The default is `2` (upstream default).
        """
        return pulumi.get(self, "max_parallel_workers_per_gather")

    @property
    @pulumi.getter(name="maxPredLocksPerTransaction")
    def max_pred_locks_per_transaction(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum predicate locks per transaction. The default is `64` (upstream default). Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_pred_locks_per_transaction")

    @property
    @pulumi.getter(name="maxPreparedTransactions")
    def max_prepared_transactions(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum prepared transactions. The default is `0`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_prepared_transactions")

    @property
    @pulumi.getter(name="maxReplicationSlots")
    def max_replication_slots(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum replication slots. The default is `20`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_replication_slots")

    @property
    @pulumi.getter(name="maxSlotWalKeepSize")
    def max_slot_wal_keep_size(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum WAL size (MB) reserved for replication slots. If `-1` is specified, replication slots may retain an unlimited amount of WAL files. The default is `-1` (upstream default). wal_keep_size minimum WAL size setting takes precedence over this.
        """
        return pulumi.get(self, "max_slot_wal_keep_size")

    @property
    @pulumi.getter(name="maxStackDepth")
    def max_stack_depth(self) -> Optional[builtins.int]:
        """
        Maximum depth of the stack in bytes. The default is `2097152` (upstream default).
        """
        return pulumi.get(self, "max_stack_depth")

    @property
    @pulumi.getter(name="maxStandbyArchiveDelay")
    def max_standby_archive_delay(self) -> Optional[builtins.int]:
        """
        Max standby archive delay in milliseconds. The default is `30000` (upstream default).
        """
        return pulumi.get(self, "max_standby_archive_delay")

    @property
    @pulumi.getter(name="maxStandbyStreamingDelay")
    def max_standby_streaming_delay(self) -> Optional[builtins.int]:
        """
        Max standby streaming delay in milliseconds. The default is `30000` (upstream default).
        """
        return pulumi.get(self, "max_standby_streaming_delay")

    @property
    @pulumi.getter(name="maxWalSenders")
    def max_wal_senders(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum WAL senders. The default is `20`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_wal_senders")

    @property
    @pulumi.getter(name="maxWorkerProcesses")
    def max_worker_processes(self) -> Optional[builtins.int]:
        """
        Sets the maximum number of background processes that the system can support. The default is `8`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_worker_processes")

    @property
    @pulumi.getter(name="passwordEncryption")
    def password_encryption(self) -> Optional[builtins.str]:
        """
        Enum: `md5`, `scram-sha-256`. Chooses the algorithm for encrypting passwords. Default: `md5`.
        """
        return pulumi.get(self, "password_encryption")

    @property
    @pulumi.getter(name="pgPartmanBgwDotInterval")
    def pg_partman_bgw_dot_interval(self) -> Optional[builtins.int]:
        """
        Sets the time interval in seconds to run pg_partman's scheduled tasks. The default is `3600`. Example: `3600`.
        """
        return pulumi.get(self, "pg_partman_bgw_dot_interval")

    @property
    @pulumi.getter(name="pgPartmanBgwDotRole")
    def pg_partman_bgw_dot_role(self) -> Optional[builtins.str]:
        """
        Controls which role to use for pg_partman's scheduled background tasks. Example: `myrolename`.
        """
        return pulumi.get(self, "pg_partman_bgw_dot_role")

    @property
    @pulumi.getter(name="pgStatStatementsDotTrack")
    def pg_stat_statements_dot_track(self) -> Optional[builtins.str]:
        """
        Enum: `all`, `none`, `top`. Controls which statements are counted. Specify top to track top-level statements (those issued directly by clients), all to also track nested statements (such as statements invoked within functions), or none to disable statement statistics collection. The default is `top`.
        """
        return pulumi.get(self, "pg_stat_statements_dot_track")

    @property
    @pulumi.getter(name="tempFileLimit")
    def temp_file_limit(self) -> Optional[builtins.int]:
        """
        PostgreSQL temporary file limit in KiB, -1 for unlimited. Example: `5000000`.
        """
        return pulumi.get(self, "temp_file_limit")

    @property
    @pulumi.getter
    def timezone(self) -> Optional[builtins.str]:
        """
        PostgreSQL service timezone. Example: `Europe/Helsinki`.
        """
        return pulumi.get(self, "timezone")

    @property
    @pulumi.getter(name="trackActivityQuerySize")
    def track_activity_query_size(self) -> Optional[builtins.int]:
        """
        Specifies the number of bytes reserved to track the currently executing command for each active session. Changing this parameter causes a service restart. Example: `1024`.
        """
        return pulumi.get(self, "track_activity_query_size")

    @property
    @pulumi.getter(name="trackCommitTimestamp")
    def track_commit_timestamp(self) -> Optional[builtins.str]:
        """
        Enum: `off`, `on`. Record commit time of transactions. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "track_commit_timestamp")

    @property
    @pulumi.getter(name="trackFunctions")
    def track_functions(self) -> Optional[builtins.str]:
        """
        Enum: `all`, `none`, `pl`. Enables tracking of function call counts and time used.
        """
        return pulumi.get(self, "track_functions")

    @property
    @pulumi.getter(name="trackIoTiming")
    def track_io_timing(self) -> Optional[builtins.str]:
        """
        Enum: `off`, `on`. Enables timing of database I/O calls. The default is `off`. When on, it will repeatedly query the operating system for the current time, which may cause significant overhead on some platforms.
        """
        return pulumi.get(self, "track_io_timing")

    @property
    @pulumi.getter(name="walSenderTimeout")
    def wal_sender_timeout(self) -> Optional[builtins.int]:
        """
        Terminate replication connections that are inactive for longer than this amount of time, in milliseconds. Setting this value to zero disables the timeout. Example: `60000`.
        """
        return pulumi.get(self, "wal_sender_timeout")

    @property
    @pulumi.getter(name="walWriterDelay")
    def wal_writer_delay(self) -> Optional[builtins.int]:
        """
        WAL flush interval in milliseconds. The default is `200`. Setting this parameter to a lower value may negatively impact performance. Example: `50`.
        """
        return pulumi.get(self, "wal_writer_delay")


@pulumi.output_type
class GetAlloydbomniAlloydbomniUserConfigPgauditResult(dict):
    def __init__(__self__, *,
                 feature_enabled: Optional[builtins.bool] = None,
                 log_catalog: Optional[builtins.bool] = None,
                 log_client: Optional[builtins.bool] = None,
                 log_level: Optional[builtins.str] = None,
                 log_max_string_length: Optional[builtins.int] = None,
                 log_nested_statements: Optional[builtins.bool] = None,
                 log_parameter: Optional[builtins.bool] = None,
                 log_parameter_max_size: Optional[builtins.int] = None,
                 log_relation: Optional[builtins.bool] = None,
                 log_rows: Optional[builtins.bool] = None,
                 log_statement: Optional[builtins.bool] = None,
                 log_statement_once: Optional[builtins.bool] = None,
                 logs: Optional[Sequence[builtins.str]] = None,
                 role: Optional[builtins.str] = None):
        """
        :param builtins.bool feature_enabled: Enable pgaudit extension. When enabled, pgaudit extension will be automatically installed.Otherwise, extension will be uninstalled but auditing configurations will be preserved. Default: `false`.
        :param builtins.bool log_catalog: Specifies that session logging should be enabled in the casewhere all relations in a statement are in pg_catalog. Default: `true`.
        :param builtins.bool log_client: Specifies whether log messages will be visible to a client process such as psql. Default: `false`.
        :param builtins.str log_level: Enum: `debug1`, `debug2`, `debug3`, `debug4`, `debug5`, `info`, `log`, `notice`, `warning`. Specifies the log level that will be used for log entries. Default: `log`.
        :param builtins.int log_max_string_length: Crop parameters representation and whole statements if they exceed this threshold. A (default) value of -1 disable the truncation. Default: `-1`.
        :param builtins.bool log_nested_statements: This GUC allows to turn off logging nested statements, that is, statements that are executed as part of another ExecutorRun. Default: `true`.
        :param builtins.bool log_parameter: Specifies that audit logging should include the parameters that were passed with the statement. Default: `false`.
        :param builtins.int log_parameter_max_size: Specifies that parameter values longer than this setting (in bytes) should not be logged, but replaced with <long param suppressed>. Default: `0`.
        :param builtins.bool log_relation: Specifies whether session audit logging should create a separate log entry for each relation (TABLE, VIEW, etc.) referenced in a SELECT or DML statement. Default: `false`.
        :param builtins.bool log_rows: Specifies that audit logging should include the rows retrieved or affected by a statement. When enabled the rows field will be included after the parameter field. Default: `false`.
        :param builtins.bool log_statement: Specifies whether logging will include the statement text and parameters (if enabled). Default: `true`.
        :param builtins.bool log_statement_once: Specifies whether logging will include the statement text and parameters with the first log entry for a statement/substatement combination or with every entry. Default: `false`.
        :param Sequence[builtins.str] logs: Specifies which classes of statements will be logged by session audit logging.
        :param builtins.str role: Specifies the master role to use for object audit logging.
        """
        if feature_enabled is not None:
            pulumi.set(__self__, "feature_enabled", feature_enabled)
        if log_catalog is not None:
            pulumi.set(__self__, "log_catalog", log_catalog)
        if log_client is not None:
            pulumi.set(__self__, "log_client", log_client)
        if log_level is not None:
            pulumi.set(__self__, "log_level", log_level)
        if log_max_string_length is not None:
            pulumi.set(__self__, "log_max_string_length", log_max_string_length)
        if log_nested_statements is not None:
            pulumi.set(__self__, "log_nested_statements", log_nested_statements)
        if log_parameter is not None:
            pulumi.set(__self__, "log_parameter", log_parameter)
        if log_parameter_max_size is not None:
            pulumi.set(__self__, "log_parameter_max_size", log_parameter_max_size)
        if log_relation is not None:
            pulumi.set(__self__, "log_relation", log_relation)
        if log_rows is not None:
            pulumi.set(__self__, "log_rows", log_rows)
        if log_statement is not None:
            pulumi.set(__self__, "log_statement", log_statement)
        if log_statement_once is not None:
            pulumi.set(__self__, "log_statement_once", log_statement_once)
        if logs is not None:
            pulumi.set(__self__, "logs", logs)
        if role is not None:
            pulumi.set(__self__, "role", role)

    @property
    @pulumi.getter(name="featureEnabled")
    def feature_enabled(self) -> Optional[builtins.bool]:
        """
        Enable pgaudit extension. When enabled, pgaudit extension will be automatically installed.Otherwise, extension will be uninstalled but auditing configurations will be preserved. Default: `false`.
        """
        return pulumi.get(self, "feature_enabled")

    @property
    @pulumi.getter(name="logCatalog")
    def log_catalog(self) -> Optional[builtins.bool]:
        """
        Specifies that session logging should be enabled in the casewhere all relations in a statement are in pg_catalog. Default: `true`.
        """
        return pulumi.get(self, "log_catalog")

    @property
    @pulumi.getter(name="logClient")
    def log_client(self) -> Optional[builtins.bool]:
        """
        Specifies whether log messages will be visible to a client process such as psql. Default: `false`.
        """
        return pulumi.get(self, "log_client")

    @property
    @pulumi.getter(name="logLevel")
    def log_level(self) -> Optional[builtins.str]:
        """
        Enum: `debug1`, `debug2`, `debug3`, `debug4`, `debug5`, `info`, `log`, `notice`, `warning`. Specifies the log level that will be used for log entries. Default: `log`.
        """
        return pulumi.get(self, "log_level")

    @property
    @pulumi.getter(name="logMaxStringLength")
    def log_max_string_length(self) -> Optional[builtins.int]:
        """
        Crop parameters representation and whole statements if they exceed this threshold. A (default) value of -1 disable the truncation. Default: `-1`.
        """
        return pulumi.get(self, "log_max_string_length")

    @property
    @pulumi.getter(name="logNestedStatements")
    def log_nested_statements(self) -> Optional[builtins.bool]:
        """
        This GUC allows to turn off logging nested statements, that is, statements that are executed as part of another ExecutorRun. Default: `true`.
        """
        return pulumi.get(self, "log_nested_statements")

    @property
    @pulumi.getter(name="logParameter")
    def log_parameter(self) -> Optional[builtins.bool]:
        """
        Specifies that audit logging should include the parameters that were passed with the statement. Default: `false`.
        """
        return pulumi.get(self, "log_parameter")

    @property
    @pulumi.getter(name="logParameterMaxSize")
    def log_parameter_max_size(self) -> Optional[builtins.int]:
        """
        Specifies that parameter values longer than this setting (in bytes) should not be logged, but replaced with <long param suppressed>. Default: `0`.
        """
        return pulumi.get(self, "log_parameter_max_size")

    @property
    @pulumi.getter(name="logRelation")
    def log_relation(self) -> Optional[builtins.bool]:
        """
        Specifies whether session audit logging should create a separate log entry for each relation (TABLE, VIEW, etc.) referenced in a SELECT or DML statement. Default: `false`.
        """
        return pulumi.get(self, "log_relation")

    @property
    @pulumi.getter(name="logRows")
    def log_rows(self) -> Optional[builtins.bool]:
        """
        Specifies that audit logging should include the rows retrieved or affected by a statement. When enabled the rows field will be included after the parameter field. Default: `false`.
        """
        return pulumi.get(self, "log_rows")

    @property
    @pulumi.getter(name="logStatement")
    def log_statement(self) -> Optional[builtins.bool]:
        """
        Specifies whether logging will include the statement text and parameters (if enabled). Default: `true`.
        """
        return pulumi.get(self, "log_statement")

    @property
    @pulumi.getter(name="logStatementOnce")
    def log_statement_once(self) -> Optional[builtins.bool]:
        """
        Specifies whether logging will include the statement text and parameters with the first log entry for a statement/substatement combination or with every entry. Default: `false`.
        """
        return pulumi.get(self, "log_statement_once")

    @property
    @pulumi.getter
    def logs(self) -> Optional[Sequence[builtins.str]]:
        """
        Specifies which classes of statements will be logged by session audit logging.
        """
        return pulumi.get(self, "logs")

    @property
    @pulumi.getter
    def role(self) -> Optional[builtins.str]:
        """
        Specifies the master role to use for object audit logging.
        """
        return pulumi.get(self, "role")


@pulumi.output_type
class GetAlloydbomniAlloydbomniUserConfigPgbouncerResult(dict):
    def __init__(__self__, *,
                 autodb_idle_timeout: Optional[builtins.int] = None,
                 autodb_max_db_connections: Optional[builtins.int] = None,
                 autodb_pool_mode: Optional[builtins.str] = None,
                 autodb_pool_size: Optional[builtins.int] = None,
                 ignore_startup_parameters: Optional[Sequence[builtins.str]] = None,
                 max_prepared_statements: Optional[builtins.int] = None,
                 min_pool_size: Optional[builtins.int] = None,
                 server_idle_timeout: Optional[builtins.int] = None,
                 server_lifetime: Optional[builtins.int] = None,
                 server_reset_query_always: Optional[builtins.bool] = None):
        """
        :param builtins.int autodb_idle_timeout: If the automatically created database pools have been unused this many seconds, they are freed. If 0 then timeout is disabled. (seconds). Default: `3600`.
        :param builtins.int autodb_max_db_connections: Do not allow more than this many server connections per database (regardless of user). Setting it to 0 means unlimited. Example: `0`.
        :param builtins.str autodb_pool_mode: Enum: `session`, `statement`, `transaction`. PGBouncer pool mode. Default: `transaction`.
        :param builtins.int autodb_pool_size: If non-zero then create automatically a pool of that size per user when a pool doesn't exist. Default: `0`.
        :param Sequence[builtins.str] ignore_startup_parameters: List of parameters to ignore when given in startup packet.
        :param builtins.int max_prepared_statements: PgBouncer tracks protocol-level named prepared statements related commands sent by the client in transaction and statement pooling modes when max_prepared_statements is set to a non-zero value. Setting it to 0 disables prepared statements. max_prepared_statements defaults to 100, and its maximum is 3000. Default: `100`.
        :param builtins.int min_pool_size: Add more server connections to pool if below this number. Improves behavior when usual load comes suddenly back after period of total inactivity. The value is effectively capped at the pool size. Default: `0`.
        :param builtins.int server_idle_timeout: If a server connection has been idle more than this many seconds it will be dropped. If 0 then timeout is disabled. (seconds). Default: `600`.
        :param builtins.int server_lifetime: The pooler will close an unused server connection that has been connected longer than this. (seconds). Default: `3600`.
        :param builtins.bool server_reset_query_always: Run server_reset_query (DISCARD ALL) in all pooling modes. Default: `false`.
        """
        if autodb_idle_timeout is not None:
            pulumi.set(__self__, "autodb_idle_timeout", autodb_idle_timeout)
        if autodb_max_db_connections is not None:
            pulumi.set(__self__, "autodb_max_db_connections", autodb_max_db_connections)
        if autodb_pool_mode is not None:
            pulumi.set(__self__, "autodb_pool_mode", autodb_pool_mode)
        if autodb_pool_size is not None:
            pulumi.set(__self__, "autodb_pool_size", autodb_pool_size)
        if ignore_startup_parameters is not None:
            pulumi.set(__self__, "ignore_startup_parameters", ignore_startup_parameters)
        if max_prepared_statements is not None:
            pulumi.set(__self__, "max_prepared_statements", max_prepared_statements)
        if min_pool_size is not None:
            pulumi.set(__self__, "min_pool_size", min_pool_size)
        if server_idle_timeout is not None:
            pulumi.set(__self__, "server_idle_timeout", server_idle_timeout)
        if server_lifetime is not None:
            pulumi.set(__self__, "server_lifetime", server_lifetime)
        if server_reset_query_always is not None:
            pulumi.set(__self__, "server_reset_query_always", server_reset_query_always)

    @property
    @pulumi.getter(name="autodbIdleTimeout")
    def autodb_idle_timeout(self) -> Optional[builtins.int]:
        """
        If the automatically created database pools have been unused this many seconds, they are freed. If 0 then timeout is disabled. (seconds). Default: `3600`.
        """
        return pulumi.get(self, "autodb_idle_timeout")

    @property
    @pulumi.getter(name="autodbMaxDbConnections")
    def autodb_max_db_connections(self) -> Optional[builtins.int]:
        """
        Do not allow more than this many server connections per database (regardless of user). Setting it to 0 means unlimited. Example: `0`.
        """
        return pulumi.get(self, "autodb_max_db_connections")

    @property
    @pulumi.getter(name="autodbPoolMode")
    def autodb_pool_mode(self) -> Optional[builtins.str]:
        """
        Enum: `session`, `statement`, `transaction`. PGBouncer pool mode. Default: `transaction`.
        """
        return pulumi.get(self, "autodb_pool_mode")

    @property
    @pulumi.getter(name="autodbPoolSize")
    def autodb_pool_size(self) -> Optional[builtins.int]:
        """
        If non-zero then create automatically a pool of that size per user when a pool doesn't exist. Default: `0`.
        """
        return pulumi.get(self, "autodb_pool_size")

    @property
    @pulumi.getter(name="ignoreStartupParameters")
    def ignore_startup_parameters(self) -> Optional[Sequence[builtins.str]]:
        """
        List of parameters to ignore when given in startup packet.
        """
        return pulumi.get(self, "ignore_startup_parameters")

    @property
    @pulumi.getter(name="maxPreparedStatements")
    def max_prepared_statements(self) -> Optional[builtins.int]:
        """
        PgBouncer tracks protocol-level named prepared statements related commands sent by the client in transaction and statement pooling modes when max_prepared_statements is set to a non-zero value. Setting it to 0 disables prepared statements. max_prepared_statements defaults to 100, and its maximum is 3000. Default: `100`.
        """
        return pulumi.get(self, "max_prepared_statements")

    @property
    @pulumi.getter(name="minPoolSize")
    def min_pool_size(self) -> Optional[builtins.int]:
        """
        Add more server connections to pool if below this number. Improves behavior when usual load comes suddenly back after period of total inactivity. The value is effectively capped at the pool size. Default: `0`.
        """
        return pulumi.get(self, "min_pool_size")

    @property
    @pulumi.getter(name="serverIdleTimeout")
    def server_idle_timeout(self) -> Optional[builtins.int]:
        """
        If a server connection has been idle more than this many seconds it will be dropped. If 0 then timeout is disabled. (seconds). Default: `600`.
        """
        return pulumi.get(self, "server_idle_timeout")

    @property
    @pulumi.getter(name="serverLifetime")
    def server_lifetime(self) -> Optional[builtins.int]:
        """
        The pooler will close an unused server connection that has been connected longer than this. (seconds). Default: `3600`.
        """
        return pulumi.get(self, "server_lifetime")

    @property
    @pulumi.getter(name="serverResetQueryAlways")
    def server_reset_query_always(self) -> Optional[builtins.bool]:
        """
        Run server_reset_query (DISCARD ALL) in all pooling modes. Default: `false`.
        """
        return pulumi.get(self, "server_reset_query_always")


@pulumi.output_type
class GetAlloydbomniAlloydbomniUserConfigPglookoutResult(dict):
    def __init__(__self__, *,
                 max_failover_replication_time_lag: Optional[builtins.int] = None):
        """
        :param builtins.int max_failover_replication_time_lag: Number of seconds of master unavailability before triggering database failover to standby. Default: `60`.
        """
        if max_failover_replication_time_lag is not None:
            pulumi.set(__self__, "max_failover_replication_time_lag", max_failover_replication_time_lag)

    @property
    @pulumi.getter(name="maxFailoverReplicationTimeLag")
    def max_failover_replication_time_lag(self) -> Optional[builtins.int]:
        """
        Number of seconds of master unavailability before triggering database failover to standby. Default: `60`.
        """
        return pulumi.get(self, "max_failover_replication_time_lag")


@pulumi.output_type
class GetAlloydbomniAlloydbomniUserConfigPrivateAccessResult(dict):
    def __init__(__self__, *,
                 pg: Optional[builtins.bool] = None,
                 pgbouncer: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool pg: Allow clients to connect to pg with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool pgbouncer: Allow clients to connect to pgbouncer with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if pg is not None:
            pulumi.set(__self__, "pg", pg)
        if pgbouncer is not None:
            pulumi.set(__self__, "pgbouncer", pgbouncer)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def pg(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to pg with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "pg")

    @property
    @pulumi.getter
    def pgbouncer(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to pgbouncer with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "pgbouncer")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetAlloydbomniAlloydbomniUserConfigPrivatelinkAccessResult(dict):
    def __init__(__self__, *,
                 pg: Optional[builtins.bool] = None,
                 pgbouncer: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool pg: Enable pg.
        :param builtins.bool pgbouncer: Enable pgbouncer.
        :param builtins.bool prometheus: Enable prometheus.
        """
        if pg is not None:
            pulumi.set(__self__, "pg", pg)
        if pgbouncer is not None:
            pulumi.set(__self__, "pgbouncer", pgbouncer)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def pg(self) -> Optional[builtins.bool]:
        """
        Enable pg.
        """
        return pulumi.get(self, "pg")

    @property
    @pulumi.getter
    def pgbouncer(self) -> Optional[builtins.bool]:
        """
        Enable pgbouncer.
        """
        return pulumi.get(self, "pgbouncer")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetAlloydbomniAlloydbomniUserConfigPublicAccessResult(dict):
    def __init__(__self__, *,
                 pg: Optional[builtins.bool] = None,
                 pgbouncer: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool pg: Allow clients to connect to pg from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool pgbouncer: Allow clients to connect to pgbouncer from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if pg is not None:
            pulumi.set(__self__, "pg", pg)
        if pgbouncer is not None:
            pulumi.set(__self__, "pgbouncer", pgbouncer)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def pg(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to pg from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "pg")

    @property
    @pulumi.getter
    def pgbouncer(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to pgbouncer from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "pgbouncer")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetAlloydbomniComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetAlloydbomniServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration. The possible value is `read_replica`.
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration. The possible value is `read_replica`.
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetAlloydbomniTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetAlloydbomniTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetCassandaCassandraResult(dict):
    def __init__(__self__, *,
                 uris: Sequence[builtins.str]):
        """
        :param Sequence[builtins.str] uris: Cassandra server URIs.
        """
        pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter
    def uris(self) -> Sequence[builtins.str]:
        """
        Cassandra server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class GetCassandaCassandraUserConfigResult(dict):
    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 backup_hour: Optional[builtins.int] = None,
                 backup_minute: Optional[builtins.int] = None,
                 cassandra: Optional['outputs.GetCassandaCassandraUserConfigCassandraResult'] = None,
                 cassandra_version: Optional[builtins.str] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetCassandaCassandraUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 migrate_sstableloader: Optional[builtins.bool] = None,
                 private_access: Optional['outputs.GetCassandaCassandraUserConfigPrivateAccessResult'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.GetCassandaCassandraUserConfigPublicAccessResult'] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 service_to_join_with: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.int backup_hour: The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        :param builtins.int backup_minute: The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        :param 'GetCassandaCassandraUserConfigCassandraArgs' cassandra: Cassandra configuration values
        :param builtins.str cassandra_version: Enum: `3`, `4`, `4.1`, and newer. Cassandra version.
        :param Sequence['GetCassandaCassandraUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param builtins.bool migrate_sstableloader: Sets the service into migration mode enabling the sstableloader utility to be used to upload Cassandra data files. Available only on service create.
        :param 'GetCassandaCassandraUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'GetCassandaCassandraUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.str service_to_join_with: When bootstrapping, instead of creating a new Cassandra cluster try to join an existing one from another service. Can only be set on service creation. Example: `my-test-cassandra`.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if backup_hour is not None:
            pulumi.set(__self__, "backup_hour", backup_hour)
        if backup_minute is not None:
            pulumi.set(__self__, "backup_minute", backup_minute)
        if cassandra is not None:
            pulumi.set(__self__, "cassandra", cassandra)
        if cassandra_version is not None:
            pulumi.set(__self__, "cassandra_version", cassandra_version)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if migrate_sstableloader is not None:
            pulumi.set(__self__, "migrate_sstableloader", migrate_sstableloader)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if service_to_join_with is not None:
            pulumi.set(__self__, "service_to_join_with", service_to_join_with)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="backupHour")
    def backup_hour(self) -> Optional[builtins.int]:
        """
        The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        """
        return pulumi.get(self, "backup_hour")

    @property
    @pulumi.getter(name="backupMinute")
    def backup_minute(self) -> Optional[builtins.int]:
        """
        The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        """
        return pulumi.get(self, "backup_minute")

    @property
    @pulumi.getter
    def cassandra(self) -> Optional['outputs.GetCassandaCassandraUserConfigCassandraResult']:
        """
        Cassandra configuration values
        """
        return pulumi.get(self, "cassandra")

    @property
    @pulumi.getter(name="cassandraVersion")
    def cassandra_version(self) -> Optional[builtins.str]:
        """
        Enum: `3`, `4`, `4.1`, and newer. Cassandra version.
        """
        return pulumi.get(self, "cassandra_version")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetCassandaCassandraUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="migrateSstableloader")
    def migrate_sstableloader(self) -> Optional[builtins.bool]:
        """
        Sets the service into migration mode enabling the sstableloader utility to be used to upload Cassandra data files. Available only on service create.
        """
        return pulumi.get(self, "migrate_sstableloader")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.GetCassandaCassandraUserConfigPrivateAccessResult']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GetCassandaCassandraUserConfigPublicAccessResult']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="serviceToJoinWith")
    def service_to_join_with(self) -> Optional[builtins.str]:
        """
        When bootstrapping, instead of creating a new Cassandra cluster try to join an existing one from another service. Can only be set on service creation. Example: `my-test-cassandra`.
        """
        return pulumi.get(self, "service_to_join_with")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class GetCassandaCassandraUserConfigCassandraResult(dict):
    def __init__(__self__, *,
                 batch_size_fail_threshold_in_kb: Optional[builtins.int] = None,
                 batch_size_warn_threshold_in_kb: Optional[builtins.int] = None,
                 datacenter: Optional[builtins.str] = None,
                 read_request_timeout_in_ms: Optional[builtins.int] = None,
                 write_request_timeout_in_ms: Optional[builtins.int] = None):
        """
        :param builtins.int batch_size_fail_threshold_in_kb: Fail any multiple-partition batch exceeding this value. 50kb (10x warn threshold) by default. Example: `50`.
        :param builtins.int batch_size_warn_threshold_in_kb: Log a warning message on any multiple-partition batch size exceeding this value.5kb per batch by default.Caution should be taken on increasing the size of this thresholdas it can lead to node instability. Example: `5`.
        :param builtins.str datacenter: Name of the datacenter to which nodes of this service belong. Can be set only when creating the service. Example: `my-service-google-west1`.
        :param builtins.int read_request_timeout_in_ms: How long the coordinator waits for read operations to complete before timing it out. 5 seconds by default. Example: `5000`.
        :param builtins.int write_request_timeout_in_ms: How long the coordinator waits for write requests to complete with at least one node in the local datacenter. 2 seconds by default. Example: `2000`.
        """
        if batch_size_fail_threshold_in_kb is not None:
            pulumi.set(__self__, "batch_size_fail_threshold_in_kb", batch_size_fail_threshold_in_kb)
        if batch_size_warn_threshold_in_kb is not None:
            pulumi.set(__self__, "batch_size_warn_threshold_in_kb", batch_size_warn_threshold_in_kb)
        if datacenter is not None:
            pulumi.set(__self__, "datacenter", datacenter)
        if read_request_timeout_in_ms is not None:
            pulumi.set(__self__, "read_request_timeout_in_ms", read_request_timeout_in_ms)
        if write_request_timeout_in_ms is not None:
            pulumi.set(__self__, "write_request_timeout_in_ms", write_request_timeout_in_ms)

    @property
    @pulumi.getter(name="batchSizeFailThresholdInKb")
    def batch_size_fail_threshold_in_kb(self) -> Optional[builtins.int]:
        """
        Fail any multiple-partition batch exceeding this value. 50kb (10x warn threshold) by default. Example: `50`.
        """
        return pulumi.get(self, "batch_size_fail_threshold_in_kb")

    @property
    @pulumi.getter(name="batchSizeWarnThresholdInKb")
    def batch_size_warn_threshold_in_kb(self) -> Optional[builtins.int]:
        """
        Log a warning message on any multiple-partition batch size exceeding this value.5kb per batch by default.Caution should be taken on increasing the size of this thresholdas it can lead to node instability. Example: `5`.
        """
        return pulumi.get(self, "batch_size_warn_threshold_in_kb")

    @property
    @pulumi.getter
    def datacenter(self) -> Optional[builtins.str]:
        """
        Name of the datacenter to which nodes of this service belong. Can be set only when creating the service. Example: `my-service-google-west1`.
        """
        return pulumi.get(self, "datacenter")

    @property
    @pulumi.getter(name="readRequestTimeoutInMs")
    def read_request_timeout_in_ms(self) -> Optional[builtins.int]:
        """
        How long the coordinator waits for read operations to complete before timing it out. 5 seconds by default. Example: `5000`.
        """
        return pulumi.get(self, "read_request_timeout_in_ms")

    @property
    @pulumi.getter(name="writeRequestTimeoutInMs")
    def write_request_timeout_in_ms(self) -> Optional[builtins.int]:
        """
        How long the coordinator waits for write requests to complete with at least one node in the local datacenter. 2 seconds by default. Example: `2000`.
        """
        return pulumi.get(self, "write_request_timeout_in_ms")


@pulumi.output_type
class GetCassandaCassandraUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetCassandaCassandraUserConfigPrivateAccessResult(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetCassandaCassandraUserConfigPublicAccessResult(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetCassandaComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetCassandaServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetCassandaTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetCassandaTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetCassandraCassandraResult(dict):
    def __init__(__self__, *,
                 uris: Sequence[builtins.str]):
        """
        :param Sequence[builtins.str] uris: Cassandra server URIs.
        """
        pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter
    def uris(self) -> Sequence[builtins.str]:
        """
        Cassandra server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class GetCassandraCassandraUserConfigResult(dict):
    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 backup_hour: Optional[builtins.int] = None,
                 backup_minute: Optional[builtins.int] = None,
                 cassandra: Optional['outputs.GetCassandraCassandraUserConfigCassandraResult'] = None,
                 cassandra_version: Optional[builtins.str] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetCassandraCassandraUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 migrate_sstableloader: Optional[builtins.bool] = None,
                 private_access: Optional['outputs.GetCassandraCassandraUserConfigPrivateAccessResult'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.GetCassandraCassandraUserConfigPublicAccessResult'] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 service_to_join_with: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.int backup_hour: The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        :param builtins.int backup_minute: The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        :param 'GetCassandraCassandraUserConfigCassandraArgs' cassandra: Cassandra configuration values
        :param builtins.str cassandra_version: Enum: `3`, `4`, `4.1`, and newer. Cassandra version.
        :param Sequence['GetCassandraCassandraUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param builtins.bool migrate_sstableloader: Sets the service into migration mode enabling the sstableloader utility to be used to upload Cassandra data files. Available only on service create.
        :param 'GetCassandraCassandraUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'GetCassandraCassandraUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.str service_to_join_with: When bootstrapping, instead of creating a new Cassandra cluster try to join an existing one from another service. Can only be set on service creation. Example: `my-test-cassandra`.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if backup_hour is not None:
            pulumi.set(__self__, "backup_hour", backup_hour)
        if backup_minute is not None:
            pulumi.set(__self__, "backup_minute", backup_minute)
        if cassandra is not None:
            pulumi.set(__self__, "cassandra", cassandra)
        if cassandra_version is not None:
            pulumi.set(__self__, "cassandra_version", cassandra_version)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if migrate_sstableloader is not None:
            pulumi.set(__self__, "migrate_sstableloader", migrate_sstableloader)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if service_to_join_with is not None:
            pulumi.set(__self__, "service_to_join_with", service_to_join_with)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="backupHour")
    def backup_hour(self) -> Optional[builtins.int]:
        """
        The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        """
        return pulumi.get(self, "backup_hour")

    @property
    @pulumi.getter(name="backupMinute")
    def backup_minute(self) -> Optional[builtins.int]:
        """
        The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        """
        return pulumi.get(self, "backup_minute")

    @property
    @pulumi.getter
    def cassandra(self) -> Optional['outputs.GetCassandraCassandraUserConfigCassandraResult']:
        """
        Cassandra configuration values
        """
        return pulumi.get(self, "cassandra")

    @property
    @pulumi.getter(name="cassandraVersion")
    def cassandra_version(self) -> Optional[builtins.str]:
        """
        Enum: `3`, `4`, `4.1`, and newer. Cassandra version.
        """
        return pulumi.get(self, "cassandra_version")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetCassandraCassandraUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="migrateSstableloader")
    def migrate_sstableloader(self) -> Optional[builtins.bool]:
        """
        Sets the service into migration mode enabling the sstableloader utility to be used to upload Cassandra data files. Available only on service create.
        """
        return pulumi.get(self, "migrate_sstableloader")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.GetCassandraCassandraUserConfigPrivateAccessResult']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GetCassandraCassandraUserConfigPublicAccessResult']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="serviceToJoinWith")
    def service_to_join_with(self) -> Optional[builtins.str]:
        """
        When bootstrapping, instead of creating a new Cassandra cluster try to join an existing one from another service. Can only be set on service creation. Example: `my-test-cassandra`.
        """
        return pulumi.get(self, "service_to_join_with")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class GetCassandraCassandraUserConfigCassandraResult(dict):
    def __init__(__self__, *,
                 batch_size_fail_threshold_in_kb: Optional[builtins.int] = None,
                 batch_size_warn_threshold_in_kb: Optional[builtins.int] = None,
                 datacenter: Optional[builtins.str] = None,
                 read_request_timeout_in_ms: Optional[builtins.int] = None,
                 write_request_timeout_in_ms: Optional[builtins.int] = None):
        """
        :param builtins.int batch_size_fail_threshold_in_kb: Fail any multiple-partition batch exceeding this value. 50kb (10x warn threshold) by default. Example: `50`.
        :param builtins.int batch_size_warn_threshold_in_kb: Log a warning message on any multiple-partition batch size exceeding this value.5kb per batch by default.Caution should be taken on increasing the size of this thresholdas it can lead to node instability. Example: `5`.
        :param builtins.str datacenter: Name of the datacenter to which nodes of this service belong. Can be set only when creating the service. Example: `my-service-google-west1`.
        :param builtins.int read_request_timeout_in_ms: How long the coordinator waits for read operations to complete before timing it out. 5 seconds by default. Example: `5000`.
        :param builtins.int write_request_timeout_in_ms: How long the coordinator waits for write requests to complete with at least one node in the local datacenter. 2 seconds by default. Example: `2000`.
        """
        if batch_size_fail_threshold_in_kb is not None:
            pulumi.set(__self__, "batch_size_fail_threshold_in_kb", batch_size_fail_threshold_in_kb)
        if batch_size_warn_threshold_in_kb is not None:
            pulumi.set(__self__, "batch_size_warn_threshold_in_kb", batch_size_warn_threshold_in_kb)
        if datacenter is not None:
            pulumi.set(__self__, "datacenter", datacenter)
        if read_request_timeout_in_ms is not None:
            pulumi.set(__self__, "read_request_timeout_in_ms", read_request_timeout_in_ms)
        if write_request_timeout_in_ms is not None:
            pulumi.set(__self__, "write_request_timeout_in_ms", write_request_timeout_in_ms)

    @property
    @pulumi.getter(name="batchSizeFailThresholdInKb")
    def batch_size_fail_threshold_in_kb(self) -> Optional[builtins.int]:
        """
        Fail any multiple-partition batch exceeding this value. 50kb (10x warn threshold) by default. Example: `50`.
        """
        return pulumi.get(self, "batch_size_fail_threshold_in_kb")

    @property
    @pulumi.getter(name="batchSizeWarnThresholdInKb")
    def batch_size_warn_threshold_in_kb(self) -> Optional[builtins.int]:
        """
        Log a warning message on any multiple-partition batch size exceeding this value.5kb per batch by default.Caution should be taken on increasing the size of this thresholdas it can lead to node instability. Example: `5`.
        """
        return pulumi.get(self, "batch_size_warn_threshold_in_kb")

    @property
    @pulumi.getter
    def datacenter(self) -> Optional[builtins.str]:
        """
        Name of the datacenter to which nodes of this service belong. Can be set only when creating the service. Example: `my-service-google-west1`.
        """
        return pulumi.get(self, "datacenter")

    @property
    @pulumi.getter(name="readRequestTimeoutInMs")
    def read_request_timeout_in_ms(self) -> Optional[builtins.int]:
        """
        How long the coordinator waits for read operations to complete before timing it out. 5 seconds by default. Example: `5000`.
        """
        return pulumi.get(self, "read_request_timeout_in_ms")

    @property
    @pulumi.getter(name="writeRequestTimeoutInMs")
    def write_request_timeout_in_ms(self) -> Optional[builtins.int]:
        """
        How long the coordinator waits for write requests to complete with at least one node in the local datacenter. 2 seconds by default. Example: `2000`.
        """
        return pulumi.get(self, "write_request_timeout_in_ms")


@pulumi.output_type
class GetCassandraCassandraUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetCassandraCassandraUserConfigPrivateAccessResult(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetCassandraCassandraUserConfigPublicAccessResult(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetCassandraComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetCassandraServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetCassandraTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetCassandraTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetClickhouseClickhouseResult(dict):
    def __init__(__self__, *,
                 uris: Sequence[builtins.str]):
        """
        :param Sequence[builtins.str] uris: ClickHouse server URIs.
        """
        pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter
    def uris(self) -> Sequence[builtins.str]:
        """
        ClickHouse server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class GetClickhouseClickhouseUserConfigResult(dict):
    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 backup_hour: Optional[builtins.int] = None,
                 backup_minute: Optional[builtins.int] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetClickhouseClickhouseUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 private_access: Optional['outputs.GetClickhouseClickhouseUserConfigPrivateAccessResult'] = None,
                 privatelink_access: Optional['outputs.GetClickhouseClickhouseUserConfigPrivatelinkAccessResult'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.GetClickhouseClickhouseUserConfigPublicAccessResult'] = None,
                 recovery_basebackup_name: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.int backup_hour: The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        :param builtins.int backup_minute: The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        :param Sequence['GetClickhouseClickhouseUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'GetClickhouseClickhouseUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'GetClickhouseClickhouseUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'GetClickhouseClickhouseUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_basebackup_name: Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if backup_hour is not None:
            pulumi.set(__self__, "backup_hour", backup_hour)
        if backup_minute is not None:
            pulumi.set(__self__, "backup_minute", backup_minute)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_basebackup_name is not None:
            pulumi.set(__self__, "recovery_basebackup_name", recovery_basebackup_name)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    @_utilities.deprecated("""This property is deprecated.""")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="backupHour")
    def backup_hour(self) -> Optional[builtins.int]:
        """
        The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        """
        return pulumi.get(self, "backup_hour")

    @property
    @pulumi.getter(name="backupMinute")
    def backup_minute(self) -> Optional[builtins.int]:
        """
        The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        """
        return pulumi.get(self, "backup_minute")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetClickhouseClickhouseUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.GetClickhouseClickhouseUserConfigPrivateAccessResult']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.GetClickhouseClickhouseUserConfigPrivatelinkAccessResult']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GetClickhouseClickhouseUserConfigPublicAccessResult']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryBasebackupName")
    def recovery_basebackup_name(self) -> Optional[builtins.str]:
        """
        Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        """
        return pulumi.get(self, "recovery_basebackup_name")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class GetClickhouseClickhouseUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetClickhouseClickhouseUserConfigPrivateAccessResult(dict):
    def __init__(__self__, *,
                 clickhouse: Optional[builtins.bool] = None,
                 clickhouse_https: Optional[builtins.bool] = None,
                 clickhouse_mysql: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool clickhouse: Allow clients to connect to clickhouse with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool clickhouse_https: Allow clients to connect to clickhouse_https with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool clickhouse_mysql: Allow clients to connect to clickhouse_mysql with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if clickhouse is not None:
            pulumi.set(__self__, "clickhouse", clickhouse)
        if clickhouse_https is not None:
            pulumi.set(__self__, "clickhouse_https", clickhouse_https)
        if clickhouse_mysql is not None:
            pulumi.set(__self__, "clickhouse_mysql", clickhouse_mysql)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def clickhouse(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to clickhouse with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "clickhouse")

    @property
    @pulumi.getter(name="clickhouseHttps")
    def clickhouse_https(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to clickhouse_https with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "clickhouse_https")

    @property
    @pulumi.getter(name="clickhouseMysql")
    def clickhouse_mysql(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to clickhouse_mysql with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "clickhouse_mysql")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetClickhouseClickhouseUserConfigPrivatelinkAccessResult(dict):
    def __init__(__self__, *,
                 clickhouse: Optional[builtins.bool] = None,
                 clickhouse_https: Optional[builtins.bool] = None,
                 clickhouse_mysql: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool clickhouse: Enable clickhouse.
        :param builtins.bool clickhouse_https: Enable clickhouse_https.
        :param builtins.bool clickhouse_mysql: Enable clickhouse_mysql.
        :param builtins.bool prometheus: Enable prometheus.
        """
        if clickhouse is not None:
            pulumi.set(__self__, "clickhouse", clickhouse)
        if clickhouse_https is not None:
            pulumi.set(__self__, "clickhouse_https", clickhouse_https)
        if clickhouse_mysql is not None:
            pulumi.set(__self__, "clickhouse_mysql", clickhouse_mysql)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def clickhouse(self) -> Optional[builtins.bool]:
        """
        Enable clickhouse.
        """
        return pulumi.get(self, "clickhouse")

    @property
    @pulumi.getter(name="clickhouseHttps")
    def clickhouse_https(self) -> Optional[builtins.bool]:
        """
        Enable clickhouse_https.
        """
        return pulumi.get(self, "clickhouse_https")

    @property
    @pulumi.getter(name="clickhouseMysql")
    def clickhouse_mysql(self) -> Optional[builtins.bool]:
        """
        Enable clickhouse_mysql.
        """
        return pulumi.get(self, "clickhouse_mysql")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetClickhouseClickhouseUserConfigPublicAccessResult(dict):
    def __init__(__self__, *,
                 clickhouse: Optional[builtins.bool] = None,
                 clickhouse_https: Optional[builtins.bool] = None,
                 clickhouse_mysql: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool clickhouse: Allow clients to connect to clickhouse from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool clickhouse_https: Allow clients to connect to clickhouse_https from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool clickhouse_mysql: Allow clients to connect to clickhouse_mysql from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if clickhouse is not None:
            pulumi.set(__self__, "clickhouse", clickhouse)
        if clickhouse_https is not None:
            pulumi.set(__self__, "clickhouse_https", clickhouse_https)
        if clickhouse_mysql is not None:
            pulumi.set(__self__, "clickhouse_mysql", clickhouse_mysql)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def clickhouse(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to clickhouse from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "clickhouse")

    @property
    @pulumi.getter(name="clickhouseHttps")
    def clickhouse_https(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to clickhouse_https from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "clickhouse_https")

    @property
    @pulumi.getter(name="clickhouseMysql")
    def clickhouse_mysql(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to clickhouse_mysql from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "clickhouse_mysql")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetClickhouseComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetClickhouseServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetClickhouseTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetClickhouseTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetDragonflyComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetDragonflyDragonflyResult(dict):
    def __init__(__self__, *,
                 password: builtins.str,
                 replica_uri: builtins.str,
                 slave_uris: Sequence[builtins.str],
                 uris: Sequence[builtins.str]):
        """
        :param builtins.str password: Dragonfly password.
        :param builtins.str replica_uri: Dragonfly replica server URI.
        :param Sequence[builtins.str] slave_uris: Dragonfly slave server URIs.
        :param Sequence[builtins.str] uris: Dragonfly server URIs.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "replica_uri", replica_uri)
        pulumi.set(__self__, "slave_uris", slave_uris)
        pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter
    def password(self) -> builtins.str:
        """
        Dragonfly password.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter(name="replicaUri")
    def replica_uri(self) -> builtins.str:
        """
        Dragonfly replica server URI.
        """
        return pulumi.get(self, "replica_uri")

    @property
    @pulumi.getter(name="slaveUris")
    def slave_uris(self) -> Sequence[builtins.str]:
        """
        Dragonfly slave server URIs.
        """
        return pulumi.get(self, "slave_uris")

    @property
    @pulumi.getter
    def uris(self) -> Sequence[builtins.str]:
        """
        Dragonfly server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class GetDragonflyDragonflyUserConfigResult(dict):
    def __init__(__self__, *,
                 cache_mode: Optional[builtins.bool] = None,
                 dragonfly_persistence: Optional[builtins.str] = None,
                 dragonfly_ssl: Optional[builtins.bool] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetDragonflyDragonflyUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 migration: Optional['outputs.GetDragonflyDragonflyUserConfigMigrationResult'] = None,
                 private_access: Optional['outputs.GetDragonflyDragonflyUserConfigPrivateAccessResult'] = None,
                 privatelink_access: Optional['outputs.GetDragonflyDragonflyUserConfigPrivatelinkAccessResult'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.GetDragonflyDragonflyUserConfigPublicAccessResult'] = None,
                 recovery_basebackup_name: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.bool cache_mode: Evict entries when getting close to maxmemory limit. Default: `false`.
        :param builtins.str dragonfly_persistence: Enum: `dfs`, `off`, `rdb`. When persistence is `rdb` or `dfs`, Dragonfly does RDB or DFS dumps every 10 minutes. Dumps are done according to the backup schedule for backup purposes. When persistence is `off`, no RDB/DFS dumps or backups are done, so data can be lost at any moment if the service is restarted for any reason, or if the service is powered off. Also, the service can't be forked.
        :param builtins.bool dragonfly_ssl: Require SSL to access Dragonfly. Default: `true`.
        :param Sequence['GetDragonflyDragonflyUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'GetDragonflyDragonflyUserConfigMigrationArgs' migration: Migrate data from existing server
        :param 'GetDragonflyDragonflyUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'GetDragonflyDragonflyUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'GetDragonflyDragonflyUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_basebackup_name: Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if cache_mode is not None:
            pulumi.set(__self__, "cache_mode", cache_mode)
        if dragonfly_persistence is not None:
            pulumi.set(__self__, "dragonfly_persistence", dragonfly_persistence)
        if dragonfly_ssl is not None:
            pulumi.set(__self__, "dragonfly_ssl", dragonfly_ssl)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if migration is not None:
            pulumi.set(__self__, "migration", migration)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_basebackup_name is not None:
            pulumi.set(__self__, "recovery_basebackup_name", recovery_basebackup_name)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="cacheMode")
    def cache_mode(self) -> Optional[builtins.bool]:
        """
        Evict entries when getting close to maxmemory limit. Default: `false`.
        """
        return pulumi.get(self, "cache_mode")

    @property
    @pulumi.getter(name="dragonflyPersistence")
    def dragonfly_persistence(self) -> Optional[builtins.str]:
        """
        Enum: `dfs`, `off`, `rdb`. When persistence is `rdb` or `dfs`, Dragonfly does RDB or DFS dumps every 10 minutes. Dumps are done according to the backup schedule for backup purposes. When persistence is `off`, no RDB/DFS dumps or backups are done, so data can be lost at any moment if the service is restarted for any reason, or if the service is powered off. Also, the service can't be forked.
        """
        return pulumi.get(self, "dragonfly_persistence")

    @property
    @pulumi.getter(name="dragonflySsl")
    def dragonfly_ssl(self) -> Optional[builtins.bool]:
        """
        Require SSL to access Dragonfly. Default: `true`.
        """
        return pulumi.get(self, "dragonfly_ssl")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetDragonflyDragonflyUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter
    def migration(self) -> Optional['outputs.GetDragonflyDragonflyUserConfigMigrationResult']:
        """
        Migrate data from existing server
        """
        return pulumi.get(self, "migration")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.GetDragonflyDragonflyUserConfigPrivateAccessResult']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.GetDragonflyDragonflyUserConfigPrivatelinkAccessResult']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GetDragonflyDragonflyUserConfigPublicAccessResult']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryBasebackupName")
    def recovery_basebackup_name(self) -> Optional[builtins.str]:
        """
        Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        """
        return pulumi.get(self, "recovery_basebackup_name")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class GetDragonflyDragonflyUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetDragonflyDragonflyUserConfigMigrationResult(dict):
    def __init__(__self__, *,
                 host: builtins.str,
                 port: builtins.int,
                 dbname: Optional[builtins.str] = None,
                 ignore_dbs: Optional[builtins.str] = None,
                 ignore_roles: Optional[builtins.str] = None,
                 method: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 username: Optional[builtins.str] = None):
        """
        :param builtins.str host: Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        :param builtins.int port: Port number of the server where to migrate data from. Example: `1234`.
        :param builtins.str dbname: Database name for bootstrapping the initial connection. Example: `defaultdb`.
        :param builtins.str ignore_dbs: Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        :param builtins.str ignore_roles: Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        :param builtins.str method: Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        :param builtins.str password: Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        :param builtins.bool ssl: The server where to migrate data from is secured with SSL. Default: `true`.
        :param builtins.str username: User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "port", port)
        if dbname is not None:
            pulumi.set(__self__, "dbname", dbname)
        if ignore_dbs is not None:
            pulumi.set(__self__, "ignore_dbs", ignore_dbs)
        if ignore_roles is not None:
            pulumi.set(__self__, "ignore_roles", ignore_roles)
        if method is not None:
            pulumi.set(__self__, "method", method)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number of the server where to migrate data from. Example: `1234`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def dbname(self) -> Optional[builtins.str]:
        """
        Database name for bootstrapping the initial connection. Example: `defaultdb`.
        """
        return pulumi.get(self, "dbname")

    @property
    @pulumi.getter(name="ignoreDbs")
    def ignore_dbs(self) -> Optional[builtins.str]:
        """
        Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        """
        return pulumi.get(self, "ignore_dbs")

    @property
    @pulumi.getter(name="ignoreRoles")
    def ignore_roles(self) -> Optional[builtins.str]:
        """
        Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        """
        return pulumi.get(self, "ignore_roles")

    @property
    @pulumi.getter
    def method(self) -> Optional[builtins.str]:
        """
        Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        """
        return pulumi.get(self, "method")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        The server where to migrate data from is secured with SSL. Default: `true`.
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def username(self) -> Optional[builtins.str]:
        """
        User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class GetDragonflyDragonflyUserConfigPrivateAccessResult(dict):
    def __init__(__self__, *,
                 dragonfly: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool dragonfly: Allow clients to connect to dragonfly with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if dragonfly is not None:
            pulumi.set(__self__, "dragonfly", dragonfly)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def dragonfly(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to dragonfly with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "dragonfly")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetDragonflyDragonflyUserConfigPrivatelinkAccessResult(dict):
    def __init__(__self__, *,
                 dragonfly: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool dragonfly: Enable dragonfly.
        :param builtins.bool prometheus: Enable prometheus.
        """
        if dragonfly is not None:
            pulumi.set(__self__, "dragonfly", dragonfly)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def dragonfly(self) -> Optional[builtins.bool]:
        """
        Enable dragonfly.
        """
        return pulumi.get(self, "dragonfly")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetDragonflyDragonflyUserConfigPublicAccessResult(dict):
    def __init__(__self__, *,
                 dragonfly: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool dragonfly: Allow clients to connect to dragonfly from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if dragonfly is not None:
            pulumi.set(__self__, "dragonfly", dragonfly)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def dragonfly(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to dragonfly from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "dragonfly")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetDragonflyServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetDragonflyTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetDragonflyTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetFlinkApplicationVersionSinkResult(dict):
    def __init__(__self__, *,
                 create_table: builtins.str,
                 integration_id: Optional[builtins.str] = None):
        """
        :param builtins.str create_table: The CREATE TABLE statement
        :param builtins.str integration_id: The integration ID
        """
        pulumi.set(__self__, "create_table", create_table)
        if integration_id is not None:
            pulumi.set(__self__, "integration_id", integration_id)

    @property
    @pulumi.getter(name="createTable")
    def create_table(self) -> builtins.str:
        """
        The CREATE TABLE statement
        """
        return pulumi.get(self, "create_table")

    @property
    @pulumi.getter(name="integrationId")
    def integration_id(self) -> Optional[builtins.str]:
        """
        The integration ID
        """
        return pulumi.get(self, "integration_id")


@pulumi.output_type
class GetFlinkApplicationVersionSourceResult(dict):
    def __init__(__self__, *,
                 create_table: builtins.str,
                 integration_id: Optional[builtins.str] = None):
        """
        :param builtins.str create_table: The CREATE TABLE statement
        :param builtins.str integration_id: The integration ID
        """
        pulumi.set(__self__, "create_table", create_table)
        if integration_id is not None:
            pulumi.set(__self__, "integration_id", integration_id)

    @property
    @pulumi.getter(name="createTable")
    def create_table(self) -> builtins.str:
        """
        The CREATE TABLE statement
        """
        return pulumi.get(self, "create_table")

    @property
    @pulumi.getter(name="integrationId")
    def integration_id(self) -> Optional[builtins.str]:
        """
        The integration ID
        """
        return pulumi.get(self, "integration_id")


@pulumi.output_type
class GetFlinkComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetFlinkFlinkResult(dict):
    def __init__(__self__, *,
                 host_ports: Sequence[builtins.str]):
        """
        :param Sequence[builtins.str] host_ports: The host and port of a Flink server.
        """
        pulumi.set(__self__, "host_ports", host_ports)

    @property
    @pulumi.getter(name="hostPorts")
    def host_ports(self) -> Sequence[builtins.str]:
        """
        The host and port of a Flink server.
        """
        return pulumi.get(self, "host_ports")


@pulumi.output_type
class GetFlinkFlinkUserConfigResult(dict):
    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 custom_code: Optional[builtins.bool] = None,
                 flink_version: Optional[builtins.str] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetFlinkFlinkUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 number_of_task_slots: Optional[builtins.int] = None,
                 pekko_ask_timeout_s: Optional[builtins.int] = None,
                 pekko_framesize_b: Optional[builtins.int] = None,
                 privatelink_access: Optional['outputs.GetFlinkFlinkUserConfigPrivatelinkAccessResult'] = None,
                 public_access: Optional['outputs.GetFlinkFlinkUserConfigPublicAccessResult'] = None,
                 service_log: Optional[builtins.bool] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.bool custom_code: Enable to upload Custom JARs for Flink applications.
        :param builtins.str flink_version: Enum: `1.16`, `1.19`, `1.20`, and newer. Flink major version.
        :param Sequence['GetFlinkFlinkUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param builtins.int number_of_task_slots: Task slots per node. For a 3 node plan, total number of task slots is 3x this value. Example: `1`.
        :param builtins.int pekko_ask_timeout_s: Timeout in seconds used for all futures and blocking Pekko requests. Example: `10`.
        :param builtins.int pekko_framesize_b: Maximum size in bytes for messages exchanged between the JobManager and the TaskManagers. Example: `10485760`.
        :param 'GetFlinkFlinkUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param 'GetFlinkFlinkUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if custom_code is not None:
            pulumi.set(__self__, "custom_code", custom_code)
        if flink_version is not None:
            pulumi.set(__self__, "flink_version", flink_version)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if number_of_task_slots is not None:
            pulumi.set(__self__, "number_of_task_slots", number_of_task_slots)
        if pekko_ask_timeout_s is not None:
            pulumi.set(__self__, "pekko_ask_timeout_s", pekko_ask_timeout_s)
        if pekko_framesize_b is not None:
            pulumi.set(__self__, "pekko_framesize_b", pekko_framesize_b)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    @_utilities.deprecated("""This property is deprecated.""")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="customCode")
    def custom_code(self) -> Optional[builtins.bool]:
        """
        Enable to upload Custom JARs for Flink applications.
        """
        return pulumi.get(self, "custom_code")

    @property
    @pulumi.getter(name="flinkVersion")
    def flink_version(self) -> Optional[builtins.str]:
        """
        Enum: `1.16`, `1.19`, `1.20`, and newer. Flink major version.
        """
        return pulumi.get(self, "flink_version")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetFlinkFlinkUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="numberOfTaskSlots")
    def number_of_task_slots(self) -> Optional[builtins.int]:
        """
        Task slots per node. For a 3 node plan, total number of task slots is 3x this value. Example: `1`.
        """
        return pulumi.get(self, "number_of_task_slots")

    @property
    @pulumi.getter(name="pekkoAskTimeoutS")
    def pekko_ask_timeout_s(self) -> Optional[builtins.int]:
        """
        Timeout in seconds used for all futures and blocking Pekko requests. Example: `10`.
        """
        return pulumi.get(self, "pekko_ask_timeout_s")

    @property
    @pulumi.getter(name="pekkoFramesizeB")
    def pekko_framesize_b(self) -> Optional[builtins.int]:
        """
        Maximum size in bytes for messages exchanged between the JobManager and the TaskManagers. Example: `10485760`.
        """
        return pulumi.get(self, "pekko_framesize_b")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.GetFlinkFlinkUserConfigPrivatelinkAccessResult']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GetFlinkFlinkUserConfigPublicAccessResult']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class GetFlinkFlinkUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetFlinkFlinkUserConfigPrivatelinkAccessResult(dict):
    def __init__(__self__, *,
                 flink: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool flink: Enable flink.
        :param builtins.bool prometheus: Enable prometheus.
        """
        if flink is not None:
            pulumi.set(__self__, "flink", flink)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def flink(self) -> Optional[builtins.bool]:
        """
        Enable flink.
        """
        return pulumi.get(self, "flink")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetFlinkFlinkUserConfigPublicAccessResult(dict):
    def __init__(__self__, *,
                 flink: Optional[builtins.bool] = None):
        """
        :param builtins.bool flink: Allow clients to connect to flink from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if flink is not None:
            pulumi.set(__self__, "flink", flink)

    @property
    @pulumi.getter
    def flink(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to flink from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "flink")


@pulumi.output_type
class GetFlinkServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetFlinkTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetFlinkTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetGrafanaComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetGrafanaGrafanaResult(dict):
    def __init__(__self__, *,
                 uris: Sequence[builtins.str]):
        """
        :param Sequence[builtins.str] uris: Grafana server URIs.
        """
        pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter
    def uris(self) -> Sequence[builtins.str]:
        """
        Grafana server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class GetGrafanaGrafanaUserConfigResult(dict):
    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 alerting_enabled: Optional[builtins.bool] = None,
                 alerting_error_or_timeout: Optional[builtins.str] = None,
                 alerting_max_annotations_to_keep: Optional[builtins.int] = None,
                 alerting_nodata_or_nullvalues: Optional[builtins.str] = None,
                 allow_embedding: Optional[builtins.bool] = None,
                 auth_azuread: Optional['outputs.GetGrafanaGrafanaUserConfigAuthAzureadResult'] = None,
                 auth_basic_enabled: Optional[builtins.bool] = None,
                 auth_generic_oauth: Optional['outputs.GetGrafanaGrafanaUserConfigAuthGenericOauthResult'] = None,
                 auth_github: Optional['outputs.GetGrafanaGrafanaUserConfigAuthGithubResult'] = None,
                 auth_gitlab: Optional['outputs.GetGrafanaGrafanaUserConfigAuthGitlabResult'] = None,
                 auth_google: Optional['outputs.GetGrafanaGrafanaUserConfigAuthGoogleResult'] = None,
                 cookie_samesite: Optional[builtins.str] = None,
                 custom_domain: Optional[builtins.str] = None,
                 dashboard_previews_enabled: Optional[builtins.bool] = None,
                 dashboard_scenes_enabled: Optional[builtins.bool] = None,
                 dashboards_min_refresh_interval: Optional[builtins.str] = None,
                 dashboards_versions_to_keep: Optional[builtins.int] = None,
                 dataproxy_send_user_header: Optional[builtins.bool] = None,
                 dataproxy_timeout: Optional[builtins.int] = None,
                 date_formats: Optional['outputs.GetGrafanaGrafanaUserConfigDateFormatsResult'] = None,
                 disable_gravatar: Optional[builtins.bool] = None,
                 editors_can_admin: Optional[builtins.bool] = None,
                 external_image_storage: Optional['outputs.GetGrafanaGrafanaUserConfigExternalImageStorageResult'] = None,
                 google_analytics_ua_id: Optional[builtins.str] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetGrafanaGrafanaUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 metrics_enabled: Optional[builtins.bool] = None,
                 oauth_allow_insecure_email_lookup: Optional[builtins.bool] = None,
                 private_access: Optional['outputs.GetGrafanaGrafanaUserConfigPrivateAccessResult'] = None,
                 privatelink_access: Optional['outputs.GetGrafanaGrafanaUserConfigPrivatelinkAccessResult'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.GetGrafanaGrafanaUserConfigPublicAccessResult'] = None,
                 recovery_basebackup_name: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 smtp_server: Optional['outputs.GetGrafanaGrafanaUserConfigSmtpServerResult'] = None,
                 static_ips: Optional[builtins.bool] = None,
                 unified_alerting_enabled: Optional[builtins.bool] = None,
                 user_auto_assign_org: Optional[builtins.bool] = None,
                 user_auto_assign_org_role: Optional[builtins.str] = None,
                 viewers_can_edit: Optional[builtins.bool] = None,
                 wal: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.bool alerting_enabled: Setting has no effect with Grafana 11 and onward. Enable or disable Grafana legacy alerting functionality. This should not be enabled with unified_alerting_enabled.
        :param builtins.str alerting_error_or_timeout: Enum: `alerting`, `keep_state`. Default error or timeout setting for new alerting rules.
        :param builtins.int alerting_max_annotations_to_keep: Max number of alert annotations that Grafana stores. 0 (default) keeps all alert annotations. Example: `0`.
        :param builtins.str alerting_nodata_or_nullvalues: Enum: `alerting`, `keep_state`, `no_data`, `ok`. Default value for 'no data or null values' for new alerting rules.
        :param builtins.bool allow_embedding: Allow embedding Grafana dashboards with iframe/frame/object/embed tags. Disabled by default to limit impact of clickjacking.
        :param 'GetGrafanaGrafanaUserConfigAuthAzureadArgs' auth_azuread: Azure AD OAuth integration
        :param builtins.bool auth_basic_enabled: Enable or disable basic authentication form, used by Grafana built-in login.
        :param 'GetGrafanaGrafanaUserConfigAuthGenericOauthArgs' auth_generic_oauth: Generic OAuth integration
        :param 'GetGrafanaGrafanaUserConfigAuthGithubArgs' auth_github: Github Auth integration
        :param 'GetGrafanaGrafanaUserConfigAuthGitlabArgs' auth_gitlab: GitLab Auth integration
        :param 'GetGrafanaGrafanaUserConfigAuthGoogleArgs' auth_google: Google Auth integration
        :param builtins.str cookie_samesite: Enum: `lax`, `none`, `strict`. Cookie SameSite attribute: `strict` prevents sending cookie for cross-site requests, effectively disabling direct linking from other sites to Grafana. `lax` is the default value.
        :param builtins.str custom_domain: Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        :param builtins.bool dashboard_previews_enabled: Enable browsing of dashboards in grid (pictures) mode. This feature is new in Grafana 9 and is quite resource intensive. It may cause low-end plans to work more slowly while the dashboard previews are rendering.
        :param builtins.bool dashboard_scenes_enabled: Enable use of the Grafana Scenes Library as the dashboard engine. i.e. the `dashboardScene` feature flag. Upstream blog post at https://grafana.com/blog/2024/10/31/grafana-dashboards-are-now-powered-by-scenes-big-changes-same-ui/.
        :param builtins.str dashboards_min_refresh_interval: Signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s, 1h. Example: `5s`.
        :param builtins.int dashboards_versions_to_keep: Dashboard versions to keep per dashboard. Example: `20`.
        :param builtins.bool dataproxy_send_user_header: Send `X-Grafana-User` header to data source.
        :param builtins.int dataproxy_timeout: Timeout for data proxy requests in seconds. Example: `30`.
        :param 'GetGrafanaGrafanaUserConfigDateFormatsArgs' date_formats: Grafana date format specifications
        :param builtins.bool disable_gravatar: Set to true to disable gravatar. Defaults to false (gravatar is enabled).
        :param builtins.bool editors_can_admin: Editors can manage folders, teams and dashboards created by them.
        :param 'GetGrafanaGrafanaUserConfigExternalImageStorageArgs' external_image_storage: External image store settings
        :param builtins.str google_analytics_ua_id: Google Analytics ID. Example: `UA-123456-4`.
        :param Sequence['GetGrafanaGrafanaUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param builtins.bool metrics_enabled: Enable Grafana's /metrics endpoint.
        :param builtins.bool oauth_allow_insecure_email_lookup: Enforce user lookup based on email instead of the unique ID provided by the IdP.
        :param 'GetGrafanaGrafanaUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'GetGrafanaGrafanaUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'GetGrafanaGrafanaUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_basebackup_name: Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param 'GetGrafanaGrafanaUserConfigSmtpServerArgs' smtp_server: SMTP server settings
        :param builtins.bool static_ips: Use static public IP addresses.
        :param builtins.bool unified_alerting_enabled: Enable or disable Grafana unified alerting functionality. By default this is enabled and any legacy alerts will be migrated on upgrade to Grafana 9+. To stay on legacy alerting, set unified_alerting_enabled to false and alerting_enabled to true. See https://grafana.com/docs/grafana/latest/alerting/ for more details.
        :param builtins.bool user_auto_assign_org: Auto-assign new users on signup to main organization. Defaults to false.
        :param builtins.str user_auto_assign_org_role: Enum: `Admin`, `Editor`, `Viewer`. Set role for new signups. Defaults to Viewer.
        :param builtins.bool viewers_can_edit: Users with view-only permission can edit but not save dashboards.
        :param builtins.bool wal: Setting to enable/disable Write-Ahead Logging. The default value is false (disabled).
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if alerting_enabled is not None:
            pulumi.set(__self__, "alerting_enabled", alerting_enabled)
        if alerting_error_or_timeout is not None:
            pulumi.set(__self__, "alerting_error_or_timeout", alerting_error_or_timeout)
        if alerting_max_annotations_to_keep is not None:
            pulumi.set(__self__, "alerting_max_annotations_to_keep", alerting_max_annotations_to_keep)
        if alerting_nodata_or_nullvalues is not None:
            pulumi.set(__self__, "alerting_nodata_or_nullvalues", alerting_nodata_or_nullvalues)
        if allow_embedding is not None:
            pulumi.set(__self__, "allow_embedding", allow_embedding)
        if auth_azuread is not None:
            pulumi.set(__self__, "auth_azuread", auth_azuread)
        if auth_basic_enabled is not None:
            pulumi.set(__self__, "auth_basic_enabled", auth_basic_enabled)
        if auth_generic_oauth is not None:
            pulumi.set(__self__, "auth_generic_oauth", auth_generic_oauth)
        if auth_github is not None:
            pulumi.set(__self__, "auth_github", auth_github)
        if auth_gitlab is not None:
            pulumi.set(__self__, "auth_gitlab", auth_gitlab)
        if auth_google is not None:
            pulumi.set(__self__, "auth_google", auth_google)
        if cookie_samesite is not None:
            pulumi.set(__self__, "cookie_samesite", cookie_samesite)
        if custom_domain is not None:
            pulumi.set(__self__, "custom_domain", custom_domain)
        if dashboard_previews_enabled is not None:
            pulumi.set(__self__, "dashboard_previews_enabled", dashboard_previews_enabled)
        if dashboard_scenes_enabled is not None:
            pulumi.set(__self__, "dashboard_scenes_enabled", dashboard_scenes_enabled)
        if dashboards_min_refresh_interval is not None:
            pulumi.set(__self__, "dashboards_min_refresh_interval", dashboards_min_refresh_interval)
        if dashboards_versions_to_keep is not None:
            pulumi.set(__self__, "dashboards_versions_to_keep", dashboards_versions_to_keep)
        if dataproxy_send_user_header is not None:
            pulumi.set(__self__, "dataproxy_send_user_header", dataproxy_send_user_header)
        if dataproxy_timeout is not None:
            pulumi.set(__self__, "dataproxy_timeout", dataproxy_timeout)
        if date_formats is not None:
            pulumi.set(__self__, "date_formats", date_formats)
        if disable_gravatar is not None:
            pulumi.set(__self__, "disable_gravatar", disable_gravatar)
        if editors_can_admin is not None:
            pulumi.set(__self__, "editors_can_admin", editors_can_admin)
        if external_image_storage is not None:
            pulumi.set(__self__, "external_image_storage", external_image_storage)
        if google_analytics_ua_id is not None:
            pulumi.set(__self__, "google_analytics_ua_id", google_analytics_ua_id)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if metrics_enabled is not None:
            pulumi.set(__self__, "metrics_enabled", metrics_enabled)
        if oauth_allow_insecure_email_lookup is not None:
            pulumi.set(__self__, "oauth_allow_insecure_email_lookup", oauth_allow_insecure_email_lookup)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_basebackup_name is not None:
            pulumi.set(__self__, "recovery_basebackup_name", recovery_basebackup_name)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if smtp_server is not None:
            pulumi.set(__self__, "smtp_server", smtp_server)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)
        if unified_alerting_enabled is not None:
            pulumi.set(__self__, "unified_alerting_enabled", unified_alerting_enabled)
        if user_auto_assign_org is not None:
            pulumi.set(__self__, "user_auto_assign_org", user_auto_assign_org)
        if user_auto_assign_org_role is not None:
            pulumi.set(__self__, "user_auto_assign_org_role", user_auto_assign_org_role)
        if viewers_can_edit is not None:
            pulumi.set(__self__, "viewers_can_edit", viewers_can_edit)
        if wal is not None:
            pulumi.set(__self__, "wal", wal)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="alertingEnabled")
    def alerting_enabled(self) -> Optional[builtins.bool]:
        """
        Setting has no effect with Grafana 11 and onward. Enable or disable Grafana legacy alerting functionality. This should not be enabled with unified_alerting_enabled.
        """
        return pulumi.get(self, "alerting_enabled")

    @property
    @pulumi.getter(name="alertingErrorOrTimeout")
    def alerting_error_or_timeout(self) -> Optional[builtins.str]:
        """
        Enum: `alerting`, `keep_state`. Default error or timeout setting for new alerting rules.
        """
        return pulumi.get(self, "alerting_error_or_timeout")

    @property
    @pulumi.getter(name="alertingMaxAnnotationsToKeep")
    def alerting_max_annotations_to_keep(self) -> Optional[builtins.int]:
        """
        Max number of alert annotations that Grafana stores. 0 (default) keeps all alert annotations. Example: `0`.
        """
        return pulumi.get(self, "alerting_max_annotations_to_keep")

    @property
    @pulumi.getter(name="alertingNodataOrNullvalues")
    def alerting_nodata_or_nullvalues(self) -> Optional[builtins.str]:
        """
        Enum: `alerting`, `keep_state`, `no_data`, `ok`. Default value for 'no data or null values' for new alerting rules.
        """
        return pulumi.get(self, "alerting_nodata_or_nullvalues")

    @property
    @pulumi.getter(name="allowEmbedding")
    def allow_embedding(self) -> Optional[builtins.bool]:
        """
        Allow embedding Grafana dashboards with iframe/frame/object/embed tags. Disabled by default to limit impact of clickjacking.
        """
        return pulumi.get(self, "allow_embedding")

    @property
    @pulumi.getter(name="authAzuread")
    def auth_azuread(self) -> Optional['outputs.GetGrafanaGrafanaUserConfigAuthAzureadResult']:
        """
        Azure AD OAuth integration
        """
        return pulumi.get(self, "auth_azuread")

    @property
    @pulumi.getter(name="authBasicEnabled")
    def auth_basic_enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable basic authentication form, used by Grafana built-in login.
        """
        return pulumi.get(self, "auth_basic_enabled")

    @property
    @pulumi.getter(name="authGenericOauth")
    def auth_generic_oauth(self) -> Optional['outputs.GetGrafanaGrafanaUserConfigAuthGenericOauthResult']:
        """
        Generic OAuth integration
        """
        return pulumi.get(self, "auth_generic_oauth")

    @property
    @pulumi.getter(name="authGithub")
    def auth_github(self) -> Optional['outputs.GetGrafanaGrafanaUserConfigAuthGithubResult']:
        """
        Github Auth integration
        """
        return pulumi.get(self, "auth_github")

    @property
    @pulumi.getter(name="authGitlab")
    def auth_gitlab(self) -> Optional['outputs.GetGrafanaGrafanaUserConfigAuthGitlabResult']:
        """
        GitLab Auth integration
        """
        return pulumi.get(self, "auth_gitlab")

    @property
    @pulumi.getter(name="authGoogle")
    def auth_google(self) -> Optional['outputs.GetGrafanaGrafanaUserConfigAuthGoogleResult']:
        """
        Google Auth integration
        """
        return pulumi.get(self, "auth_google")

    @property
    @pulumi.getter(name="cookieSamesite")
    def cookie_samesite(self) -> Optional[builtins.str]:
        """
        Enum: `lax`, `none`, `strict`. Cookie SameSite attribute: `strict` prevents sending cookie for cross-site requests, effectively disabling direct linking from other sites to Grafana. `lax` is the default value.
        """
        return pulumi.get(self, "cookie_samesite")

    @property
    @pulumi.getter(name="customDomain")
    def custom_domain(self) -> Optional[builtins.str]:
        """
        Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        """
        return pulumi.get(self, "custom_domain")

    @property
    @pulumi.getter(name="dashboardPreviewsEnabled")
    def dashboard_previews_enabled(self) -> Optional[builtins.bool]:
        """
        Enable browsing of dashboards in grid (pictures) mode. This feature is new in Grafana 9 and is quite resource intensive. It may cause low-end plans to work more slowly while the dashboard previews are rendering.
        """
        return pulumi.get(self, "dashboard_previews_enabled")

    @property
    @pulumi.getter(name="dashboardScenesEnabled")
    def dashboard_scenes_enabled(self) -> Optional[builtins.bool]:
        """
        Enable use of the Grafana Scenes Library as the dashboard engine. i.e. the `dashboardScene` feature flag. Upstream blog post at https://grafana.com/blog/2024/10/31/grafana-dashboards-are-now-powered-by-scenes-big-changes-same-ui/.
        """
        return pulumi.get(self, "dashboard_scenes_enabled")

    @property
    @pulumi.getter(name="dashboardsMinRefreshInterval")
    def dashboards_min_refresh_interval(self) -> Optional[builtins.str]:
        """
        Signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s, 1h. Example: `5s`.
        """
        return pulumi.get(self, "dashboards_min_refresh_interval")

    @property
    @pulumi.getter(name="dashboardsVersionsToKeep")
    def dashboards_versions_to_keep(self) -> Optional[builtins.int]:
        """
        Dashboard versions to keep per dashboard. Example: `20`.
        """
        return pulumi.get(self, "dashboards_versions_to_keep")

    @property
    @pulumi.getter(name="dataproxySendUserHeader")
    def dataproxy_send_user_header(self) -> Optional[builtins.bool]:
        """
        Send `X-Grafana-User` header to data source.
        """
        return pulumi.get(self, "dataproxy_send_user_header")

    @property
    @pulumi.getter(name="dataproxyTimeout")
    def dataproxy_timeout(self) -> Optional[builtins.int]:
        """
        Timeout for data proxy requests in seconds. Example: `30`.
        """
        return pulumi.get(self, "dataproxy_timeout")

    @property
    @pulumi.getter(name="dateFormats")
    def date_formats(self) -> Optional['outputs.GetGrafanaGrafanaUserConfigDateFormatsResult']:
        """
        Grafana date format specifications
        """
        return pulumi.get(self, "date_formats")

    @property
    @pulumi.getter(name="disableGravatar")
    def disable_gravatar(self) -> Optional[builtins.bool]:
        """
        Set to true to disable gravatar. Defaults to false (gravatar is enabled).
        """
        return pulumi.get(self, "disable_gravatar")

    @property
    @pulumi.getter(name="editorsCanAdmin")
    def editors_can_admin(self) -> Optional[builtins.bool]:
        """
        Editors can manage folders, teams and dashboards created by them.
        """
        return pulumi.get(self, "editors_can_admin")

    @property
    @pulumi.getter(name="externalImageStorage")
    def external_image_storage(self) -> Optional['outputs.GetGrafanaGrafanaUserConfigExternalImageStorageResult']:
        """
        External image store settings
        """
        return pulumi.get(self, "external_image_storage")

    @property
    @pulumi.getter(name="googleAnalyticsUaId")
    def google_analytics_ua_id(self) -> Optional[builtins.str]:
        """
        Google Analytics ID. Example: `UA-123456-4`.
        """
        return pulumi.get(self, "google_analytics_ua_id")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetGrafanaGrafanaUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="metricsEnabled")
    def metrics_enabled(self) -> Optional[builtins.bool]:
        """
        Enable Grafana's /metrics endpoint.
        """
        return pulumi.get(self, "metrics_enabled")

    @property
    @pulumi.getter(name="oauthAllowInsecureEmailLookup")
    def oauth_allow_insecure_email_lookup(self) -> Optional[builtins.bool]:
        """
        Enforce user lookup based on email instead of the unique ID provided by the IdP.
        """
        return pulumi.get(self, "oauth_allow_insecure_email_lookup")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.GetGrafanaGrafanaUserConfigPrivateAccessResult']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.GetGrafanaGrafanaUserConfigPrivatelinkAccessResult']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GetGrafanaGrafanaUserConfigPublicAccessResult']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryBasebackupName")
    def recovery_basebackup_name(self) -> Optional[builtins.str]:
        """
        Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        """
        return pulumi.get(self, "recovery_basebackup_name")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="smtpServer")
    def smtp_server(self) -> Optional['outputs.GetGrafanaGrafanaUserConfigSmtpServerResult']:
        """
        SMTP server settings
        """
        return pulumi.get(self, "smtp_server")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")

    @property
    @pulumi.getter(name="unifiedAlertingEnabled")
    def unified_alerting_enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable Grafana unified alerting functionality. By default this is enabled and any legacy alerts will be migrated on upgrade to Grafana 9+. To stay on legacy alerting, set unified_alerting_enabled to false and alerting_enabled to true. See https://grafana.com/docs/grafana/latest/alerting/ for more details.
        """
        return pulumi.get(self, "unified_alerting_enabled")

    @property
    @pulumi.getter(name="userAutoAssignOrg")
    def user_auto_assign_org(self) -> Optional[builtins.bool]:
        """
        Auto-assign new users on signup to main organization. Defaults to false.
        """
        return pulumi.get(self, "user_auto_assign_org")

    @property
    @pulumi.getter(name="userAutoAssignOrgRole")
    def user_auto_assign_org_role(self) -> Optional[builtins.str]:
        """
        Enum: `Admin`, `Editor`, `Viewer`. Set role for new signups. Defaults to Viewer.
        """
        return pulumi.get(self, "user_auto_assign_org_role")

    @property
    @pulumi.getter(name="viewersCanEdit")
    def viewers_can_edit(self) -> Optional[builtins.bool]:
        """
        Users with view-only permission can edit but not save dashboards.
        """
        return pulumi.get(self, "viewers_can_edit")

    @property
    @pulumi.getter
    def wal(self) -> Optional[builtins.bool]:
        """
        Setting to enable/disable Write-Ahead Logging. The default value is false (disabled).
        """
        return pulumi.get(self, "wal")


@pulumi.output_type
class GetGrafanaGrafanaUserConfigAuthAzureadResult(dict):
    def __init__(__self__, *,
                 auth_url: builtins.str,
                 client_id: builtins.str,
                 client_secret: builtins.str,
                 token_url: builtins.str,
                 allow_sign_up: Optional[builtins.bool] = None,
                 allowed_domains: Optional[Sequence[builtins.str]] = None,
                 allowed_groups: Optional[Sequence[builtins.str]] = None):
        """
        :param builtins.str auth_url: Authorization URL. Example: `https://login.microsoftonline.com/<AZURE_TENANT_ID>/oauth2/v2.0/authorize`.
        :param builtins.str client_id: Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        :param builtins.str client_secret: Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        :param builtins.str token_url: Token URL. Example: `https://login.microsoftonline.com/<AZURE_TENANT_ID>/oauth2/v2.0/token`.
        :param builtins.bool allow_sign_up: Automatically sign-up users on successful sign-in.
        :param Sequence[builtins.str] allowed_domains: Allowed domains.
        :param Sequence[builtins.str] allowed_groups: Require users to belong to one of given groups.
        """
        pulumi.set(__self__, "auth_url", auth_url)
        pulumi.set(__self__, "client_id", client_id)
        pulumi.set(__self__, "client_secret", client_secret)
        pulumi.set(__self__, "token_url", token_url)
        if allow_sign_up is not None:
            pulumi.set(__self__, "allow_sign_up", allow_sign_up)
        if allowed_domains is not None:
            pulumi.set(__self__, "allowed_domains", allowed_domains)
        if allowed_groups is not None:
            pulumi.set(__self__, "allowed_groups", allowed_groups)

    @property
    @pulumi.getter(name="authUrl")
    def auth_url(self) -> builtins.str:
        """
        Authorization URL. Example: `https://login.microsoftonline.com/<AZURE_TENANT_ID>/oauth2/v2.0/authorize`.
        """
        return pulumi.get(self, "auth_url")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> builtins.str:
        """
        Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> builtins.str:
        """
        Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter(name="tokenUrl")
    def token_url(self) -> builtins.str:
        """
        Token URL. Example: `https://login.microsoftonline.com/<AZURE_TENANT_ID>/oauth2/v2.0/token`.
        """
        return pulumi.get(self, "token_url")

    @property
    @pulumi.getter(name="allowSignUp")
    def allow_sign_up(self) -> Optional[builtins.bool]:
        """
        Automatically sign-up users on successful sign-in.
        """
        return pulumi.get(self, "allow_sign_up")

    @property
    @pulumi.getter(name="allowedDomains")
    def allowed_domains(self) -> Optional[Sequence[builtins.str]]:
        """
        Allowed domains.
        """
        return pulumi.get(self, "allowed_domains")

    @property
    @pulumi.getter(name="allowedGroups")
    def allowed_groups(self) -> Optional[Sequence[builtins.str]]:
        """
        Require users to belong to one of given groups.
        """
        return pulumi.get(self, "allowed_groups")


@pulumi.output_type
class GetGrafanaGrafanaUserConfigAuthGenericOauthResult(dict):
    def __init__(__self__, *,
                 api_url: builtins.str,
                 auth_url: builtins.str,
                 client_id: builtins.str,
                 client_secret: builtins.str,
                 token_url: builtins.str,
                 allow_sign_up: Optional[builtins.bool] = None,
                 allowed_domains: Optional[Sequence[builtins.str]] = None,
                 allowed_organizations: Optional[Sequence[builtins.str]] = None,
                 auto_login: Optional[builtins.bool] = None,
                 name: Optional[builtins.str] = None,
                 scopes: Optional[Sequence[builtins.str]] = None,
                 use_refresh_token: Optional[builtins.bool] = None):
        """
        :param builtins.str api_url: API URL. Example: `https://yourprovider.com/api`.
        :param builtins.str auth_url: Authorization URL. Example: `https://yourprovider.com/oauth/authorize`.
        :param builtins.str client_id: Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        :param builtins.str client_secret: Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        :param builtins.str token_url: Token URL. Example: `https://yourprovider.com/oauth/token`.
        :param builtins.bool allow_sign_up: Automatically sign-up users on successful sign-in.
        :param Sequence[builtins.str] allowed_domains: Allowed domains.
        :param Sequence[builtins.str] allowed_organizations: Require user to be member of one of the listed organizations.
        :param builtins.bool auto_login: Allow users to bypass the login screen and automatically log in.
        :param builtins.str name: Name of the OAuth integration. Example: `My authentication`.
        :param Sequence[builtins.str] scopes: OAuth scopes.
        :param builtins.bool use_refresh_token: Set to true to use refresh token and check access token expiration.
        """
        pulumi.set(__self__, "api_url", api_url)
        pulumi.set(__self__, "auth_url", auth_url)
        pulumi.set(__self__, "client_id", client_id)
        pulumi.set(__self__, "client_secret", client_secret)
        pulumi.set(__self__, "token_url", token_url)
        if allow_sign_up is not None:
            pulumi.set(__self__, "allow_sign_up", allow_sign_up)
        if allowed_domains is not None:
            pulumi.set(__self__, "allowed_domains", allowed_domains)
        if allowed_organizations is not None:
            pulumi.set(__self__, "allowed_organizations", allowed_organizations)
        if auto_login is not None:
            pulumi.set(__self__, "auto_login", auto_login)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if scopes is not None:
            pulumi.set(__self__, "scopes", scopes)
        if use_refresh_token is not None:
            pulumi.set(__self__, "use_refresh_token", use_refresh_token)

    @property
    @pulumi.getter(name="apiUrl")
    def api_url(self) -> builtins.str:
        """
        API URL. Example: `https://yourprovider.com/api`.
        """
        return pulumi.get(self, "api_url")

    @property
    @pulumi.getter(name="authUrl")
    def auth_url(self) -> builtins.str:
        """
        Authorization URL. Example: `https://yourprovider.com/oauth/authorize`.
        """
        return pulumi.get(self, "auth_url")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> builtins.str:
        """
        Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> builtins.str:
        """
        Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter(name="tokenUrl")
    def token_url(self) -> builtins.str:
        """
        Token URL. Example: `https://yourprovider.com/oauth/token`.
        """
        return pulumi.get(self, "token_url")

    @property
    @pulumi.getter(name="allowSignUp")
    def allow_sign_up(self) -> Optional[builtins.bool]:
        """
        Automatically sign-up users on successful sign-in.
        """
        return pulumi.get(self, "allow_sign_up")

    @property
    @pulumi.getter(name="allowedDomains")
    def allowed_domains(self) -> Optional[Sequence[builtins.str]]:
        """
        Allowed domains.
        """
        return pulumi.get(self, "allowed_domains")

    @property
    @pulumi.getter(name="allowedOrganizations")
    def allowed_organizations(self) -> Optional[Sequence[builtins.str]]:
        """
        Require user to be member of one of the listed organizations.
        """
        return pulumi.get(self, "allowed_organizations")

    @property
    @pulumi.getter(name="autoLogin")
    def auto_login(self) -> Optional[builtins.bool]:
        """
        Allow users to bypass the login screen and automatically log in.
        """
        return pulumi.get(self, "auto_login")

    @property
    @pulumi.getter
    def name(self) -> Optional[builtins.str]:
        """
        Name of the OAuth integration. Example: `My authentication`.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def scopes(self) -> Optional[Sequence[builtins.str]]:
        """
        OAuth scopes.
        """
        return pulumi.get(self, "scopes")

    @property
    @pulumi.getter(name="useRefreshToken")
    def use_refresh_token(self) -> Optional[builtins.bool]:
        """
        Set to true to use refresh token and check access token expiration.
        """
        return pulumi.get(self, "use_refresh_token")


@pulumi.output_type
class GetGrafanaGrafanaUserConfigAuthGithubResult(dict):
    def __init__(__self__, *,
                 client_id: builtins.str,
                 client_secret: builtins.str,
                 allow_sign_up: Optional[builtins.bool] = None,
                 allowed_organizations: Optional[Sequence[builtins.str]] = None,
                 auto_login: Optional[builtins.bool] = None,
                 skip_org_role_sync: Optional[builtins.bool] = None,
                 team_ids: Optional[Sequence[builtins.int]] = None):
        """
        :param builtins.str client_id: Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        :param builtins.str client_secret: Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        :param builtins.bool allow_sign_up: Automatically sign-up users on successful sign-in.
        :param Sequence[builtins.str] allowed_organizations: Require users to belong to one of given organizations.
        :param builtins.bool auto_login: Allow users to bypass the login screen and automatically log in.
        :param builtins.bool skip_org_role_sync: Stop automatically syncing user roles.
        :param Sequence[builtins.int] team_ids: Require users to belong to one of given team IDs.
        """
        pulumi.set(__self__, "client_id", client_id)
        pulumi.set(__self__, "client_secret", client_secret)
        if allow_sign_up is not None:
            pulumi.set(__self__, "allow_sign_up", allow_sign_up)
        if allowed_organizations is not None:
            pulumi.set(__self__, "allowed_organizations", allowed_organizations)
        if auto_login is not None:
            pulumi.set(__self__, "auto_login", auto_login)
        if skip_org_role_sync is not None:
            pulumi.set(__self__, "skip_org_role_sync", skip_org_role_sync)
        if team_ids is not None:
            pulumi.set(__self__, "team_ids", team_ids)

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> builtins.str:
        """
        Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> builtins.str:
        """
        Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter(name="allowSignUp")
    def allow_sign_up(self) -> Optional[builtins.bool]:
        """
        Automatically sign-up users on successful sign-in.
        """
        return pulumi.get(self, "allow_sign_up")

    @property
    @pulumi.getter(name="allowedOrganizations")
    def allowed_organizations(self) -> Optional[Sequence[builtins.str]]:
        """
        Require users to belong to one of given organizations.
        """
        return pulumi.get(self, "allowed_organizations")

    @property
    @pulumi.getter(name="autoLogin")
    def auto_login(self) -> Optional[builtins.bool]:
        """
        Allow users to bypass the login screen and automatically log in.
        """
        return pulumi.get(self, "auto_login")

    @property
    @pulumi.getter(name="skipOrgRoleSync")
    def skip_org_role_sync(self) -> Optional[builtins.bool]:
        """
        Stop automatically syncing user roles.
        """
        return pulumi.get(self, "skip_org_role_sync")

    @property
    @pulumi.getter(name="teamIds")
    def team_ids(self) -> Optional[Sequence[builtins.int]]:
        """
        Require users to belong to one of given team IDs.
        """
        return pulumi.get(self, "team_ids")


@pulumi.output_type
class GetGrafanaGrafanaUserConfigAuthGitlabResult(dict):
    def __init__(__self__, *,
                 allowed_groups: Sequence[builtins.str],
                 client_id: builtins.str,
                 client_secret: builtins.str,
                 allow_sign_up: Optional[builtins.bool] = None,
                 api_url: Optional[builtins.str] = None,
                 auth_url: Optional[builtins.str] = None,
                 token_url: Optional[builtins.str] = None):
        """
        :param Sequence[builtins.str] allowed_groups: Require users to belong to one of given groups.
        :param builtins.str client_id: Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        :param builtins.str client_secret: Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        :param builtins.bool allow_sign_up: Automatically sign-up users on successful sign-in.
        :param builtins.str api_url: This only needs to be set when using self hosted GitLab. Example: `https://gitlab.com/api/v4`.
        :param builtins.str auth_url: This only needs to be set when using self hosted GitLab. Example: `https://gitlab.com/oauth/authorize`.
        :param builtins.str token_url: This only needs to be set when using self hosted GitLab. Example: `https://gitlab.com/oauth/token`.
        """
        pulumi.set(__self__, "allowed_groups", allowed_groups)
        pulumi.set(__self__, "client_id", client_id)
        pulumi.set(__self__, "client_secret", client_secret)
        if allow_sign_up is not None:
            pulumi.set(__self__, "allow_sign_up", allow_sign_up)
        if api_url is not None:
            pulumi.set(__self__, "api_url", api_url)
        if auth_url is not None:
            pulumi.set(__self__, "auth_url", auth_url)
        if token_url is not None:
            pulumi.set(__self__, "token_url", token_url)

    @property
    @pulumi.getter(name="allowedGroups")
    def allowed_groups(self) -> Sequence[builtins.str]:
        """
        Require users to belong to one of given groups.
        """
        return pulumi.get(self, "allowed_groups")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> builtins.str:
        """
        Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> builtins.str:
        """
        Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter(name="allowSignUp")
    def allow_sign_up(self) -> Optional[builtins.bool]:
        """
        Automatically sign-up users on successful sign-in.
        """
        return pulumi.get(self, "allow_sign_up")

    @property
    @pulumi.getter(name="apiUrl")
    def api_url(self) -> Optional[builtins.str]:
        """
        This only needs to be set when using self hosted GitLab. Example: `https://gitlab.com/api/v4`.
        """
        return pulumi.get(self, "api_url")

    @property
    @pulumi.getter(name="authUrl")
    def auth_url(self) -> Optional[builtins.str]:
        """
        This only needs to be set when using self hosted GitLab. Example: `https://gitlab.com/oauth/authorize`.
        """
        return pulumi.get(self, "auth_url")

    @property
    @pulumi.getter(name="tokenUrl")
    def token_url(self) -> Optional[builtins.str]:
        """
        This only needs to be set when using self hosted GitLab. Example: `https://gitlab.com/oauth/token`.
        """
        return pulumi.get(self, "token_url")


@pulumi.output_type
class GetGrafanaGrafanaUserConfigAuthGoogleResult(dict):
    def __init__(__self__, *,
                 allowed_domains: Sequence[builtins.str],
                 client_id: builtins.str,
                 client_secret: builtins.str,
                 allow_sign_up: Optional[builtins.bool] = None):
        """
        :param Sequence[builtins.str] allowed_domains: Domains allowed to sign-in to this Grafana.
        :param builtins.str client_id: Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        :param builtins.str client_secret: Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        :param builtins.bool allow_sign_up: Automatically sign-up users on successful sign-in.
        """
        pulumi.set(__self__, "allowed_domains", allowed_domains)
        pulumi.set(__self__, "client_id", client_id)
        pulumi.set(__self__, "client_secret", client_secret)
        if allow_sign_up is not None:
            pulumi.set(__self__, "allow_sign_up", allow_sign_up)

    @property
    @pulumi.getter(name="allowedDomains")
    def allowed_domains(self) -> Sequence[builtins.str]:
        """
        Domains allowed to sign-in to this Grafana.
        """
        return pulumi.get(self, "allowed_domains")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> builtins.str:
        """
        Client ID from provider. Example: `b1ba0bf54a4c2c0a1c29`.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> builtins.str:
        """
        Client secret from provider. Example: `bfa6gea4f129076761dcba8ce5e1e406bd83af7b`.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter(name="allowSignUp")
    def allow_sign_up(self) -> Optional[builtins.bool]:
        """
        Automatically sign-up users on successful sign-in.
        """
        return pulumi.get(self, "allow_sign_up")


@pulumi.output_type
class GetGrafanaGrafanaUserConfigDateFormatsResult(dict):
    def __init__(__self__, *,
                 default_timezone: Optional[builtins.str] = None,
                 full_date: Optional[builtins.str] = None,
                 interval_day: Optional[builtins.str] = None,
                 interval_hour: Optional[builtins.str] = None,
                 interval_minute: Optional[builtins.str] = None,
                 interval_month: Optional[builtins.str] = None,
                 interval_second: Optional[builtins.str] = None,
                 interval_year: Optional[builtins.str] = None):
        """
        :param builtins.str default_timezone: Default time zone for user preferences. Value `browser` uses browser local time zone. Example: `Europe/Helsinki`.
        :param builtins.str full_date: Moment.js style format string for cases where full date is shown. Example: `YYYY MM DD`.
        :param builtins.str interval_day: Moment.js style format string used when a time requiring day accuracy is shown. Example: `MM/DD`.
        :param builtins.str interval_hour: Moment.js style format string used when a time requiring hour accuracy is shown. Example: `MM/DD HH:mm`.
        :param builtins.str interval_minute: Moment.js style format string used when a time requiring minute accuracy is shown. Example: `HH:mm`.
        :param builtins.str interval_month: Moment.js style format string used when a time requiring month accuracy is shown. Example: `YYYY-MM`.
        :param builtins.str interval_second: Moment.js style format string used when a time requiring second accuracy is shown. Example: `HH:mm:ss`.
        :param builtins.str interval_year: Moment.js style format string used when a time requiring year accuracy is shown. Example: `YYYY`.
        """
        if default_timezone is not None:
            pulumi.set(__self__, "default_timezone", default_timezone)
        if full_date is not None:
            pulumi.set(__self__, "full_date", full_date)
        if interval_day is not None:
            pulumi.set(__self__, "interval_day", interval_day)
        if interval_hour is not None:
            pulumi.set(__self__, "interval_hour", interval_hour)
        if interval_minute is not None:
            pulumi.set(__self__, "interval_minute", interval_minute)
        if interval_month is not None:
            pulumi.set(__self__, "interval_month", interval_month)
        if interval_second is not None:
            pulumi.set(__self__, "interval_second", interval_second)
        if interval_year is not None:
            pulumi.set(__self__, "interval_year", interval_year)

    @property
    @pulumi.getter(name="defaultTimezone")
    def default_timezone(self) -> Optional[builtins.str]:
        """
        Default time zone for user preferences. Value `browser` uses browser local time zone. Example: `Europe/Helsinki`.
        """
        return pulumi.get(self, "default_timezone")

    @property
    @pulumi.getter(name="fullDate")
    def full_date(self) -> Optional[builtins.str]:
        """
        Moment.js style format string for cases where full date is shown. Example: `YYYY MM DD`.
        """
        return pulumi.get(self, "full_date")

    @property
    @pulumi.getter(name="intervalDay")
    def interval_day(self) -> Optional[builtins.str]:
        """
        Moment.js style format string used when a time requiring day accuracy is shown. Example: `MM/DD`.
        """
        return pulumi.get(self, "interval_day")

    @property
    @pulumi.getter(name="intervalHour")
    def interval_hour(self) -> Optional[builtins.str]:
        """
        Moment.js style format string used when a time requiring hour accuracy is shown. Example: `MM/DD HH:mm`.
        """
        return pulumi.get(self, "interval_hour")

    @property
    @pulumi.getter(name="intervalMinute")
    def interval_minute(self) -> Optional[builtins.str]:
        """
        Moment.js style format string used when a time requiring minute accuracy is shown. Example: `HH:mm`.
        """
        return pulumi.get(self, "interval_minute")

    @property
    @pulumi.getter(name="intervalMonth")
    def interval_month(self) -> Optional[builtins.str]:
        """
        Moment.js style format string used when a time requiring month accuracy is shown. Example: `YYYY-MM`.
        """
        return pulumi.get(self, "interval_month")

    @property
    @pulumi.getter(name="intervalSecond")
    def interval_second(self) -> Optional[builtins.str]:
        """
        Moment.js style format string used when a time requiring second accuracy is shown. Example: `HH:mm:ss`.
        """
        return pulumi.get(self, "interval_second")

    @property
    @pulumi.getter(name="intervalYear")
    def interval_year(self) -> Optional[builtins.str]:
        """
        Moment.js style format string used when a time requiring year accuracy is shown. Example: `YYYY`.
        """
        return pulumi.get(self, "interval_year")


@pulumi.output_type
class GetGrafanaGrafanaUserConfigExternalImageStorageResult(dict):
    def __init__(__self__, *,
                 access_key: builtins.str,
                 bucket_url: builtins.str,
                 provider: builtins.str,
                 secret_key: builtins.str):
        """
        :param builtins.str access_key: S3 access key. Requires permissions to the S3 bucket for the s3:PutObject and s3:PutObjectAcl actions. Example: `AAAAAAAAAAAAAAAAAAA`.
        :param builtins.str bucket_url: Bucket URL for S3. Example: `https://grafana.s3-ap-southeast-2.amazonaws.com/`.
        :param builtins.str provider: Enum: `s3`. External image store provider.
        :param builtins.str secret_key: S3 secret key. Example: `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`.
        """
        pulumi.set(__self__, "access_key", access_key)
        pulumi.set(__self__, "bucket_url", bucket_url)
        pulumi.set(__self__, "provider", provider)
        pulumi.set(__self__, "secret_key", secret_key)

    @property
    @pulumi.getter(name="accessKey")
    def access_key(self) -> builtins.str:
        """
        S3 access key. Requires permissions to the S3 bucket for the s3:PutObject and s3:PutObjectAcl actions. Example: `AAAAAAAAAAAAAAAAAAA`.
        """
        return pulumi.get(self, "access_key")

    @property
    @pulumi.getter(name="bucketUrl")
    def bucket_url(self) -> builtins.str:
        """
        Bucket URL for S3. Example: `https://grafana.s3-ap-southeast-2.amazonaws.com/`.
        """
        return pulumi.get(self, "bucket_url")

    @property
    @pulumi.getter
    def provider(self) -> builtins.str:
        """
        Enum: `s3`. External image store provider.
        """
        return pulumi.get(self, "provider")

    @property
    @pulumi.getter(name="secretKey")
    def secret_key(self) -> builtins.str:
        """
        S3 secret key. Example: `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`.
        """
        return pulumi.get(self, "secret_key")


@pulumi.output_type
class GetGrafanaGrafanaUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetGrafanaGrafanaUserConfigPrivateAccessResult(dict):
    def __init__(__self__, *,
                 grafana: Optional[builtins.bool] = None):
        """
        :param builtins.bool grafana: Allow clients to connect to grafana with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if grafana is not None:
            pulumi.set(__self__, "grafana", grafana)

    @property
    @pulumi.getter
    def grafana(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to grafana with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "grafana")


@pulumi.output_type
class GetGrafanaGrafanaUserConfigPrivatelinkAccessResult(dict):
    def __init__(__self__, *,
                 grafana: Optional[builtins.bool] = None):
        """
        :param builtins.bool grafana: Enable grafana.
        """
        if grafana is not None:
            pulumi.set(__self__, "grafana", grafana)

    @property
    @pulumi.getter
    def grafana(self) -> Optional[builtins.bool]:
        """
        Enable grafana.
        """
        return pulumi.get(self, "grafana")


@pulumi.output_type
class GetGrafanaGrafanaUserConfigPublicAccessResult(dict):
    def __init__(__self__, *,
                 grafana: Optional[builtins.bool] = None):
        """
        :param builtins.bool grafana: Allow clients to connect to grafana from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if grafana is not None:
            pulumi.set(__self__, "grafana", grafana)

    @property
    @pulumi.getter
    def grafana(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to grafana from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "grafana")


@pulumi.output_type
class GetGrafanaGrafanaUserConfigSmtpServerResult(dict):
    def __init__(__self__, *,
                 from_address: builtins.str,
                 host: builtins.str,
                 port: builtins.int,
                 from_name: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 skip_verify: Optional[builtins.bool] = None,
                 starttls_policy: Optional[builtins.str] = None,
                 username: Optional[builtins.str] = None):
        """
        :param builtins.str from_address: Address used for sending emails. Example: `yourgrafanauser@yourdomain.example.com`.
        :param builtins.str host: Server hostname or IP. Example: `smtp.example.com`.
        :param builtins.int port: SMTP server port. Example: `25`.
        :param builtins.str from_name: Name used in outgoing emails, defaults to Grafana.
        :param builtins.str password: Password for SMTP authentication. Example: `ein0eemeev5eeth3Ahfu`.
        :param builtins.bool skip_verify: Skip verifying server certificate. Defaults to false.
        :param builtins.str starttls_policy: Enum: `MandatoryStartTLS`, `NoStartTLS`, `OpportunisticStartTLS`. Either OpportunisticStartTLS, MandatoryStartTLS or NoStartTLS. Default is OpportunisticStartTLS.
        :param builtins.str username: Username for SMTP authentication. Example: `smtpuser`.
        """
        pulumi.set(__self__, "from_address", from_address)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "port", port)
        if from_name is not None:
            pulumi.set(__self__, "from_name", from_name)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if skip_verify is not None:
            pulumi.set(__self__, "skip_verify", skip_verify)
        if starttls_policy is not None:
            pulumi.set(__self__, "starttls_policy", starttls_policy)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="fromAddress")
    def from_address(self) -> builtins.str:
        """
        Address used for sending emails. Example: `yourgrafanauser@yourdomain.example.com`.
        """
        return pulumi.get(self, "from_address")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Server hostname or IP. Example: `smtp.example.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        SMTP server port. Example: `25`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter(name="fromName")
    def from_name(self) -> Optional[builtins.str]:
        """
        Name used in outgoing emails, defaults to Grafana.
        """
        return pulumi.get(self, "from_name")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        Password for SMTP authentication. Example: `ein0eemeev5eeth3Ahfu`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter(name="skipVerify")
    def skip_verify(self) -> Optional[builtins.bool]:
        """
        Skip verifying server certificate. Defaults to false.
        """
        return pulumi.get(self, "skip_verify")

    @property
    @pulumi.getter(name="starttlsPolicy")
    def starttls_policy(self) -> Optional[builtins.str]:
        """
        Enum: `MandatoryStartTLS`, `NoStartTLS`, `OpportunisticStartTLS`. Either OpportunisticStartTLS, MandatoryStartTLS or NoStartTLS. Default is OpportunisticStartTLS.
        """
        return pulumi.get(self, "starttls_policy")

    @property
    @pulumi.getter
    def username(self) -> Optional[builtins.str]:
        """
        Username for SMTP authentication. Example: `smtpuser`.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class GetGrafanaServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetGrafanaTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetGrafanaTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetInfluxDbComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetInfluxDbInfluxdbResult(dict):
    def __init__(__self__, *,
                 database_name: builtins.str,
                 password: builtins.str,
                 uris: Sequence[builtins.str],
                 username: builtins.str):
        """
        :param builtins.str database_name: Name of the default InfluxDB database
        :param builtins.str password: InfluxDB password
        :param Sequence[builtins.str] uris: InfluxDB server URIs.
        :param builtins.str username: InfluxDB username
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "uris", uris)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> builtins.str:
        """
        Name of the default InfluxDB database
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> builtins.str:
        """
        InfluxDB password
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def uris(self) -> Sequence[builtins.str]:
        """
        InfluxDB server URIs.
        """
        return pulumi.get(self, "uris")

    @property
    @pulumi.getter
    def username(self) -> builtins.str:
        """
        InfluxDB username
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class GetInfluxDbInfluxdbUserConfigResult(dict):
    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 custom_domain: Optional[builtins.str] = None,
                 influxdb: Optional['outputs.GetInfluxDbInfluxdbUserConfigInfluxdbResult'] = None,
                 influxdb_version: Optional[builtins.str] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetInfluxDbInfluxdbUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 private_access: Optional['outputs.GetInfluxDbInfluxdbUserConfigPrivateAccessResult'] = None,
                 privatelink_access: Optional['outputs.GetInfluxDbInfluxdbUserConfigPrivatelinkAccessResult'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.GetInfluxDbInfluxdbUserConfigPublicAccessResult'] = None,
                 recovery_basebackup_name: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.str custom_domain: Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        :param 'GetInfluxDbInfluxdbUserConfigInfluxdbArgs' influxdb: influxdb.conf configuration values
        :param builtins.str influxdb_version: Enum: `1.8`, and newer. InfluxDB major version. Default: `1.8`.
        :param Sequence['GetInfluxDbInfluxdbUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'GetInfluxDbInfluxdbUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'GetInfluxDbInfluxdbUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'GetInfluxDbInfluxdbUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_basebackup_name: Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if custom_domain is not None:
            pulumi.set(__self__, "custom_domain", custom_domain)
        if influxdb is not None:
            pulumi.set(__self__, "influxdb", influxdb)
        if influxdb_version is not None:
            pulumi.set(__self__, "influxdb_version", influxdb_version)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_basebackup_name is not None:
            pulumi.set(__self__, "recovery_basebackup_name", recovery_basebackup_name)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    @_utilities.deprecated("""This property is deprecated.""")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="customDomain")
    def custom_domain(self) -> Optional[builtins.str]:
        """
        Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        """
        return pulumi.get(self, "custom_domain")

    @property
    @pulumi.getter
    def influxdb(self) -> Optional['outputs.GetInfluxDbInfluxdbUserConfigInfluxdbResult']:
        """
        influxdb.conf configuration values
        """
        return pulumi.get(self, "influxdb")

    @property
    @pulumi.getter(name="influxdbVersion")
    def influxdb_version(self) -> Optional[builtins.str]:
        """
        Enum: `1.8`, and newer. InfluxDB major version. Default: `1.8`.
        """
        return pulumi.get(self, "influxdb_version")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetInfluxDbInfluxdbUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.GetInfluxDbInfluxdbUserConfigPrivateAccessResult']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.GetInfluxDbInfluxdbUserConfigPrivatelinkAccessResult']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GetInfluxDbInfluxdbUserConfigPublicAccessResult']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryBasebackupName")
    def recovery_basebackup_name(self) -> Optional[builtins.str]:
        """
        Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        """
        return pulumi.get(self, "recovery_basebackup_name")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class GetInfluxDbInfluxdbUserConfigInfluxdbResult(dict):
    def __init__(__self__, *,
                 log_queries_after: Optional[builtins.int] = None,
                 max_connection_limit: Optional[builtins.int] = None,
                 max_row_limit: Optional[builtins.int] = None,
                 max_select_buckets: Optional[builtins.int] = None,
                 max_select_point: Optional[builtins.int] = None,
                 query_log_enabled: Optional[builtins.bool] = None,
                 query_timeout: Optional[builtins.int] = None):
        """
        :param builtins.int log_queries_after: The maximum duration in seconds before a query is logged as a slow query. Setting this to 0 (the default) will never log slow queries.
        :param builtins.int max_connection_limit: Maximum number of connections to InfluxDB. Setting this to 0 (default) means no limit. If using max_connection_limit, it is recommended to set the value to be large enough in order to not block clients unnecessarily.
        :param builtins.int max_row_limit: The maximum number of rows returned in a non-chunked query. Setting this to 0 (the default) allows an unlimited number to be returned.
        :param builtins.int max_select_buckets: The maximum number of `GROUP BY time()` buckets that can be processed in a query. Setting this to 0 (the default) allows an unlimited number to be processed.
        :param builtins.int max_select_point: The maximum number of points that can be processed in a SELECT statement. Setting this to 0 (the default) allows an unlimited number to be processed.
        :param builtins.bool query_log_enabled: Whether queries should be logged before execution. May log sensitive data contained within a query.
        :param builtins.int query_timeout: The maximum duration in seconds before a query is killed. Setting this to 0 (the default) will never kill slow queries.
        """
        if log_queries_after is not None:
            pulumi.set(__self__, "log_queries_after", log_queries_after)
        if max_connection_limit is not None:
            pulumi.set(__self__, "max_connection_limit", max_connection_limit)
        if max_row_limit is not None:
            pulumi.set(__self__, "max_row_limit", max_row_limit)
        if max_select_buckets is not None:
            pulumi.set(__self__, "max_select_buckets", max_select_buckets)
        if max_select_point is not None:
            pulumi.set(__self__, "max_select_point", max_select_point)
        if query_log_enabled is not None:
            pulumi.set(__self__, "query_log_enabled", query_log_enabled)
        if query_timeout is not None:
            pulumi.set(__self__, "query_timeout", query_timeout)

    @property
    @pulumi.getter(name="logQueriesAfter")
    def log_queries_after(self) -> Optional[builtins.int]:
        """
        The maximum duration in seconds before a query is logged as a slow query. Setting this to 0 (the default) will never log slow queries.
        """
        return pulumi.get(self, "log_queries_after")

    @property
    @pulumi.getter(name="maxConnectionLimit")
    def max_connection_limit(self) -> Optional[builtins.int]:
        """
        Maximum number of connections to InfluxDB. Setting this to 0 (default) means no limit. If using max_connection_limit, it is recommended to set the value to be large enough in order to not block clients unnecessarily.
        """
        return pulumi.get(self, "max_connection_limit")

    @property
    @pulumi.getter(name="maxRowLimit")
    def max_row_limit(self) -> Optional[builtins.int]:
        """
        The maximum number of rows returned in a non-chunked query. Setting this to 0 (the default) allows an unlimited number to be returned.
        """
        return pulumi.get(self, "max_row_limit")

    @property
    @pulumi.getter(name="maxSelectBuckets")
    def max_select_buckets(self) -> Optional[builtins.int]:
        """
        The maximum number of `GROUP BY time()` buckets that can be processed in a query. Setting this to 0 (the default) allows an unlimited number to be processed.
        """
        return pulumi.get(self, "max_select_buckets")

    @property
    @pulumi.getter(name="maxSelectPoint")
    def max_select_point(self) -> Optional[builtins.int]:
        """
        The maximum number of points that can be processed in a SELECT statement. Setting this to 0 (the default) allows an unlimited number to be processed.
        """
        return pulumi.get(self, "max_select_point")

    @property
    @pulumi.getter(name="queryLogEnabled")
    def query_log_enabled(self) -> Optional[builtins.bool]:
        """
        Whether queries should be logged before execution. May log sensitive data contained within a query.
        """
        return pulumi.get(self, "query_log_enabled")

    @property
    @pulumi.getter(name="queryTimeout")
    def query_timeout(self) -> Optional[builtins.int]:
        """
        The maximum duration in seconds before a query is killed. Setting this to 0 (the default) will never kill slow queries.
        """
        return pulumi.get(self, "query_timeout")


@pulumi.output_type
class GetInfluxDbInfluxdbUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetInfluxDbInfluxdbUserConfigPrivateAccessResult(dict):
    def __init__(__self__, *,
                 influxdb: Optional[builtins.bool] = None,
                 user_backup: Optional[builtins.bool] = None):
        """
        :param builtins.bool influxdb: Allow clients to connect to influxdb with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool user_backup: Allow clients to connect to user_backup with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if influxdb is not None:
            pulumi.set(__self__, "influxdb", influxdb)
        if user_backup is not None:
            pulumi.set(__self__, "user_backup", user_backup)

    @property
    @pulumi.getter
    def influxdb(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to influxdb with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "influxdb")

    @property
    @pulumi.getter(name="userBackup")
    def user_backup(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to user_backup with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "user_backup")


@pulumi.output_type
class GetInfluxDbInfluxdbUserConfigPrivatelinkAccessResult(dict):
    def __init__(__self__, *,
                 influxdb: Optional[builtins.bool] = None,
                 user_backup: Optional[builtins.bool] = None):
        """
        :param builtins.bool influxdb: Enable influxdb.
        :param builtins.bool user_backup: Enable user_backup.
        """
        if influxdb is not None:
            pulumi.set(__self__, "influxdb", influxdb)
        if user_backup is not None:
            pulumi.set(__self__, "user_backup", user_backup)

    @property
    @pulumi.getter
    def influxdb(self) -> Optional[builtins.bool]:
        """
        Enable influxdb.
        """
        return pulumi.get(self, "influxdb")

    @property
    @pulumi.getter(name="userBackup")
    def user_backup(self) -> Optional[builtins.bool]:
        """
        Enable user_backup.
        """
        return pulumi.get(self, "user_backup")


@pulumi.output_type
class GetInfluxDbInfluxdbUserConfigPublicAccessResult(dict):
    def __init__(__self__, *,
                 influxdb: Optional[builtins.bool] = None,
                 user_backup: Optional[builtins.bool] = None):
        """
        :param builtins.bool influxdb: Allow clients to connect to influxdb from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool user_backup: Allow clients to connect to user_backup from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if influxdb is not None:
            pulumi.set(__self__, "influxdb", influxdb)
        if user_backup is not None:
            pulumi.set(__self__, "user_backup", user_backup)

    @property
    @pulumi.getter
    def influxdb(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to influxdb from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "influxdb")

    @property
    @pulumi.getter(name="userBackup")
    def user_backup(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to user_backup from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "user_backup")


@pulumi.output_type
class GetInfluxDbServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetInfluxDbTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetInfluxDbTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetKafkaComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetKafkaConnectComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetKafkaConnectKafkaConnectUserConfigResult(dict):
    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetKafkaConnectKafkaConnectUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 kafka_connect: Optional['outputs.GetKafkaConnectKafkaConnectUserConfigKafkaConnectResult'] = None,
                 plugin_versions: Optional[Sequence['outputs.GetKafkaConnectKafkaConnectUserConfigPluginVersionResult']] = None,
                 private_access: Optional['outputs.GetKafkaConnectKafkaConnectUserConfigPrivateAccessResult'] = None,
                 privatelink_access: Optional['outputs.GetKafkaConnectKafkaConnectUserConfigPrivatelinkAccessResult'] = None,
                 public_access: Optional['outputs.GetKafkaConnectKafkaConnectUserConfigPublicAccessResult'] = None,
                 secret_providers: Optional[Sequence['outputs.GetKafkaConnectKafkaConnectUserConfigSecretProviderResult']] = None,
                 service_log: Optional[builtins.bool] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param Sequence['GetKafkaConnectKafkaConnectUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'GetKafkaConnectKafkaConnectUserConfigKafkaConnectArgs' kafka_connect: Kafka Connect configuration values
        :param Sequence['GetKafkaConnectKafkaConnectUserConfigPluginVersionArgs'] plugin_versions: The plugin selected by the user
        :param 'GetKafkaConnectKafkaConnectUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'GetKafkaConnectKafkaConnectUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param 'GetKafkaConnectKafkaConnectUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)
        if plugin_versions is not None:
            pulumi.set(__self__, "plugin_versions", plugin_versions)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if secret_providers is not None:
            pulumi.set(__self__, "secret_providers", secret_providers)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    @_utilities.deprecated("""This property is deprecated.""")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetKafkaConnectKafkaConnectUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional['outputs.GetKafkaConnectKafkaConnectUserConfigKafkaConnectResult']:
        """
        Kafka Connect configuration values
        """
        return pulumi.get(self, "kafka_connect")

    @property
    @pulumi.getter(name="pluginVersions")
    def plugin_versions(self) -> Optional[Sequence['outputs.GetKafkaConnectKafkaConnectUserConfigPluginVersionResult']]:
        """
        The plugin selected by the user
        """
        return pulumi.get(self, "plugin_versions")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.GetKafkaConnectKafkaConnectUserConfigPrivateAccessResult']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.GetKafkaConnectKafkaConnectUserConfigPrivatelinkAccessResult']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GetKafkaConnectKafkaConnectUserConfigPublicAccessResult']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="secretProviders")
    def secret_providers(self) -> Optional[Sequence['outputs.GetKafkaConnectKafkaConnectUserConfigSecretProviderResult']]:
        return pulumi.get(self, "secret_providers")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class GetKafkaConnectKafkaConnectUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetKafkaConnectKafkaConnectUserConfigKafkaConnectResult(dict):
    def __init__(__self__, *,
                 connector_client_config_override_policy: Optional[builtins.str] = None,
                 consumer_auto_offset_reset: Optional[builtins.str] = None,
                 consumer_fetch_max_bytes: Optional[builtins.int] = None,
                 consumer_isolation_level: Optional[builtins.str] = None,
                 consumer_max_partition_fetch_bytes: Optional[builtins.int] = None,
                 consumer_max_poll_interval_ms: Optional[builtins.int] = None,
                 consumer_max_poll_records: Optional[builtins.int] = None,
                 offset_flush_interval_ms: Optional[builtins.int] = None,
                 offset_flush_timeout_ms: Optional[builtins.int] = None,
                 producer_batch_size: Optional[builtins.int] = None,
                 producer_buffer_memory: Optional[builtins.int] = None,
                 producer_compression_type: Optional[builtins.str] = None,
                 producer_linger_ms: Optional[builtins.int] = None,
                 producer_max_request_size: Optional[builtins.int] = None,
                 scheduled_rebalance_max_delay_ms: Optional[builtins.int] = None,
                 session_timeout_ms: Optional[builtins.int] = None):
        """
        :param builtins.str connector_client_config_override_policy: Enum: `All`, `None`. Defines what client configurations can be overridden by the connector. Default is None.
        :param builtins.str consumer_auto_offset_reset: Enum: `earliest`, `latest`. What to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server. Default is earliest.
        :param builtins.int consumer_fetch_max_bytes: Records are fetched in batches by the consumer, and if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that the consumer can make progress. As such, this is not a absolute maximum. Example: `52428800`.
        :param builtins.str consumer_isolation_level: Enum: `read_committed`, `read_uncommitted`. Transaction read isolation level. read_uncommitted is the default, but read_committed can be used if consume-exactly-once behavior is desired.
        :param builtins.int consumer_max_partition_fetch_bytes: Records are fetched in batches by the consumer.If the first record batch in the first non-empty partition of the fetch is larger than this limit, the batch will still be returned to ensure that the consumer can make progress. Example: `1048576`.
        :param builtins.int consumer_max_poll_interval_ms: The maximum delay in milliseconds between invocations of poll() when using consumer group management (defaults to 300000).
        :param builtins.int consumer_max_poll_records: The maximum number of records returned in a single call to poll() (defaults to 500).
        :param builtins.int offset_flush_interval_ms: The interval at which to try committing offsets for tasks (defaults to 60000).
        :param builtins.int offset_flush_timeout_ms: Maximum number of milliseconds to wait for records to flush and partition offset data to be committed to offset storage before cancelling the process and restoring the offset data to be committed in a future attempt (defaults to 5000).
        :param builtins.int producer_batch_size: This setting gives the upper bound of the batch size to be sent. If there are fewer than this many bytes accumulated for this partition, the producer will `linger` for the linger.ms time waiting for more records to show up. A batch size of zero will disable batching entirely (defaults to 16384).
        :param builtins.int producer_buffer_memory: The total bytes of memory the producer can use to buffer records waiting to be sent to the broker (defaults to 33554432).
        :param builtins.str producer_compression_type: Enum: `gzip`, `lz4`, `none`, `snappy`, `zstd`. Specify the default compression type for producers. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `none` which is the default and equivalent to no compression.
        :param builtins.int producer_linger_ms: This setting gives the upper bound on the delay for batching: once there is batch.size worth of records for a partition it will be sent immediately regardless of this setting, however if there are fewer than this many bytes accumulated for this partition the producer will `linger` for the specified time waiting for more records to show up. Defaults to 0.
        :param builtins.int producer_max_request_size: This setting will limit the number of record batches the producer will send in a single request to avoid sending huge requests. Example: `1048576`.
        :param builtins.int scheduled_rebalance_max_delay_ms: The maximum delay that is scheduled in order to wait for the return of one or more departed workers before rebalancing and reassigning their connectors and tasks to the group. During this period the connectors and tasks of the departed workers remain unassigned. Defaults to 5 minutes.
        :param builtins.int session_timeout_ms: The timeout in milliseconds used to detect failures when using Kafka’s group management facilities (defaults to 10000).
        """
        if connector_client_config_override_policy is not None:
            pulumi.set(__self__, "connector_client_config_override_policy", connector_client_config_override_policy)
        if consumer_auto_offset_reset is not None:
            pulumi.set(__self__, "consumer_auto_offset_reset", consumer_auto_offset_reset)
        if consumer_fetch_max_bytes is not None:
            pulumi.set(__self__, "consumer_fetch_max_bytes", consumer_fetch_max_bytes)
        if consumer_isolation_level is not None:
            pulumi.set(__self__, "consumer_isolation_level", consumer_isolation_level)
        if consumer_max_partition_fetch_bytes is not None:
            pulumi.set(__self__, "consumer_max_partition_fetch_bytes", consumer_max_partition_fetch_bytes)
        if consumer_max_poll_interval_ms is not None:
            pulumi.set(__self__, "consumer_max_poll_interval_ms", consumer_max_poll_interval_ms)
        if consumer_max_poll_records is not None:
            pulumi.set(__self__, "consumer_max_poll_records", consumer_max_poll_records)
        if offset_flush_interval_ms is not None:
            pulumi.set(__self__, "offset_flush_interval_ms", offset_flush_interval_ms)
        if offset_flush_timeout_ms is not None:
            pulumi.set(__self__, "offset_flush_timeout_ms", offset_flush_timeout_ms)
        if producer_batch_size is not None:
            pulumi.set(__self__, "producer_batch_size", producer_batch_size)
        if producer_buffer_memory is not None:
            pulumi.set(__self__, "producer_buffer_memory", producer_buffer_memory)
        if producer_compression_type is not None:
            pulumi.set(__self__, "producer_compression_type", producer_compression_type)
        if producer_linger_ms is not None:
            pulumi.set(__self__, "producer_linger_ms", producer_linger_ms)
        if producer_max_request_size is not None:
            pulumi.set(__self__, "producer_max_request_size", producer_max_request_size)
        if scheduled_rebalance_max_delay_ms is not None:
            pulumi.set(__self__, "scheduled_rebalance_max_delay_ms", scheduled_rebalance_max_delay_ms)
        if session_timeout_ms is not None:
            pulumi.set(__self__, "session_timeout_ms", session_timeout_ms)

    @property
    @pulumi.getter(name="connectorClientConfigOverridePolicy")
    def connector_client_config_override_policy(self) -> Optional[builtins.str]:
        """
        Enum: `All`, `None`. Defines what client configurations can be overridden by the connector. Default is None.
        """
        return pulumi.get(self, "connector_client_config_override_policy")

    @property
    @pulumi.getter(name="consumerAutoOffsetReset")
    def consumer_auto_offset_reset(self) -> Optional[builtins.str]:
        """
        Enum: `earliest`, `latest`. What to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server. Default is earliest.
        """
        return pulumi.get(self, "consumer_auto_offset_reset")

    @property
    @pulumi.getter(name="consumerFetchMaxBytes")
    def consumer_fetch_max_bytes(self) -> Optional[builtins.int]:
        """
        Records are fetched in batches by the consumer, and if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that the consumer can make progress. As such, this is not a absolute maximum. Example: `52428800`.
        """
        return pulumi.get(self, "consumer_fetch_max_bytes")

    @property
    @pulumi.getter(name="consumerIsolationLevel")
    def consumer_isolation_level(self) -> Optional[builtins.str]:
        """
        Enum: `read_committed`, `read_uncommitted`. Transaction read isolation level. read_uncommitted is the default, but read_committed can be used if consume-exactly-once behavior is desired.
        """
        return pulumi.get(self, "consumer_isolation_level")

    @property
    @pulumi.getter(name="consumerMaxPartitionFetchBytes")
    def consumer_max_partition_fetch_bytes(self) -> Optional[builtins.int]:
        """
        Records are fetched in batches by the consumer.If the first record batch in the first non-empty partition of the fetch is larger than this limit, the batch will still be returned to ensure that the consumer can make progress. Example: `1048576`.
        """
        return pulumi.get(self, "consumer_max_partition_fetch_bytes")

    @property
    @pulumi.getter(name="consumerMaxPollIntervalMs")
    def consumer_max_poll_interval_ms(self) -> Optional[builtins.int]:
        """
        The maximum delay in milliseconds between invocations of poll() when using consumer group management (defaults to 300000).
        """
        return pulumi.get(self, "consumer_max_poll_interval_ms")

    @property
    @pulumi.getter(name="consumerMaxPollRecords")
    def consumer_max_poll_records(self) -> Optional[builtins.int]:
        """
        The maximum number of records returned in a single call to poll() (defaults to 500).
        """
        return pulumi.get(self, "consumer_max_poll_records")

    @property
    @pulumi.getter(name="offsetFlushIntervalMs")
    def offset_flush_interval_ms(self) -> Optional[builtins.int]:
        """
        The interval at which to try committing offsets for tasks (defaults to 60000).
        """
        return pulumi.get(self, "offset_flush_interval_ms")

    @property
    @pulumi.getter(name="offsetFlushTimeoutMs")
    def offset_flush_timeout_ms(self) -> Optional[builtins.int]:
        """
        Maximum number of milliseconds to wait for records to flush and partition offset data to be committed to offset storage before cancelling the process and restoring the offset data to be committed in a future attempt (defaults to 5000).
        """
        return pulumi.get(self, "offset_flush_timeout_ms")

    @property
    @pulumi.getter(name="producerBatchSize")
    def producer_batch_size(self) -> Optional[builtins.int]:
        """
        This setting gives the upper bound of the batch size to be sent. If there are fewer than this many bytes accumulated for this partition, the producer will `linger` for the linger.ms time waiting for more records to show up. A batch size of zero will disable batching entirely (defaults to 16384).
        """
        return pulumi.get(self, "producer_batch_size")

    @property
    @pulumi.getter(name="producerBufferMemory")
    def producer_buffer_memory(self) -> Optional[builtins.int]:
        """
        The total bytes of memory the producer can use to buffer records waiting to be sent to the broker (defaults to 33554432).
        """
        return pulumi.get(self, "producer_buffer_memory")

    @property
    @pulumi.getter(name="producerCompressionType")
    def producer_compression_type(self) -> Optional[builtins.str]:
        """
        Enum: `gzip`, `lz4`, `none`, `snappy`, `zstd`. Specify the default compression type for producers. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `none` which is the default and equivalent to no compression.
        """
        return pulumi.get(self, "producer_compression_type")

    @property
    @pulumi.getter(name="producerLingerMs")
    def producer_linger_ms(self) -> Optional[builtins.int]:
        """
        This setting gives the upper bound on the delay for batching: once there is batch.size worth of records for a partition it will be sent immediately regardless of this setting, however if there are fewer than this many bytes accumulated for this partition the producer will `linger` for the specified time waiting for more records to show up. Defaults to 0.
        """
        return pulumi.get(self, "producer_linger_ms")

    @property
    @pulumi.getter(name="producerMaxRequestSize")
    def producer_max_request_size(self) -> Optional[builtins.int]:
        """
        This setting will limit the number of record batches the producer will send in a single request to avoid sending huge requests. Example: `1048576`.
        """
        return pulumi.get(self, "producer_max_request_size")

    @property
    @pulumi.getter(name="scheduledRebalanceMaxDelayMs")
    def scheduled_rebalance_max_delay_ms(self) -> Optional[builtins.int]:
        """
        The maximum delay that is scheduled in order to wait for the return of one or more departed workers before rebalancing and reassigning their connectors and tasks to the group. During this period the connectors and tasks of the departed workers remain unassigned. Defaults to 5 minutes.
        """
        return pulumi.get(self, "scheduled_rebalance_max_delay_ms")

    @property
    @pulumi.getter(name="sessionTimeoutMs")
    def session_timeout_ms(self) -> Optional[builtins.int]:
        """
        The timeout in milliseconds used to detect failures when using Kafka’s group management facilities (defaults to 10000).
        """
        return pulumi.get(self, "session_timeout_ms")


@pulumi.output_type
class GetKafkaConnectKafkaConnectUserConfigPluginVersionResult(dict):
    def __init__(__self__, *,
                 plugin_name: builtins.str,
                 version: builtins.str):
        """
        :param builtins.str plugin_name: The name of the plugin. Example: `debezium-connector`.
        :param builtins.str version: The version of the plugin. Example: `2.5.0`.
        """
        pulumi.set(__self__, "plugin_name", plugin_name)
        pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter(name="pluginName")
    def plugin_name(self) -> builtins.str:
        """
        The name of the plugin. Example: `debezium-connector`.
        """
        return pulumi.get(self, "plugin_name")

    @property
    @pulumi.getter
    def version(self) -> builtins.str:
        """
        The version of the plugin. Example: `2.5.0`.
        """
        return pulumi.get(self, "version")


@pulumi.output_type
class GetKafkaConnectKafkaConnectUserConfigPrivateAccessResult(dict):
    def __init__(__self__, *,
                 kafka_connect: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool kafka_connect: Allow clients to connect to kafka_connect with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to kafka_connect with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "kafka_connect")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetKafkaConnectKafkaConnectUserConfigPrivatelinkAccessResult(dict):
    def __init__(__self__, *,
                 jolokia: Optional[builtins.bool] = None,
                 kafka_connect: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool jolokia: Enable jolokia.
        :param builtins.bool kafka_connect: Enable kafka_connect.
        :param builtins.bool prometheus: Enable prometheus.
        """
        if jolokia is not None:
            pulumi.set(__self__, "jolokia", jolokia)
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def jolokia(self) -> Optional[builtins.bool]:
        """
        Enable jolokia.
        """
        return pulumi.get(self, "jolokia")

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional[builtins.bool]:
        """
        Enable kafka_connect.
        """
        return pulumi.get(self, "kafka_connect")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetKafkaConnectKafkaConnectUserConfigPublicAccessResult(dict):
    def __init__(__self__, *,
                 kafka_connect: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool kafka_connect: Allow clients to connect to kafka_connect from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to kafka_connect from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "kafka_connect")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetKafkaConnectKafkaConnectUserConfigSecretProviderResult(dict):
    def __init__(__self__, *,
                 name: builtins.str,
                 aws: Optional['outputs.GetKafkaConnectKafkaConnectUserConfigSecretProviderAwsResult'] = None,
                 vault: Optional['outputs.GetKafkaConnectKafkaConnectUserConfigSecretProviderVaultResult'] = None):
        """
        :param builtins.str name: Name of the secret provider. Used to reference secrets in connector config.
        :param 'GetKafkaConnectKafkaConnectUserConfigSecretProviderAwsArgs' aws: AWS secret provider configuration
        :param 'GetKafkaConnectKafkaConnectUserConfigSecretProviderVaultArgs' vault: Vault secret provider configuration
        """
        pulumi.set(__self__, "name", name)
        if aws is not None:
            pulumi.set(__self__, "aws", aws)
        if vault is not None:
            pulumi.set(__self__, "vault", vault)

    @property
    @pulumi.getter
    def name(self) -> builtins.str:
        """
        Name of the secret provider. Used to reference secrets in connector config.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def aws(self) -> Optional['outputs.GetKafkaConnectKafkaConnectUserConfigSecretProviderAwsResult']:
        """
        AWS secret provider configuration
        """
        return pulumi.get(self, "aws")

    @property
    @pulumi.getter
    def vault(self) -> Optional['outputs.GetKafkaConnectKafkaConnectUserConfigSecretProviderVaultResult']:
        """
        Vault secret provider configuration
        """
        return pulumi.get(self, "vault")


@pulumi.output_type
class GetKafkaConnectKafkaConnectUserConfigSecretProviderAwsResult(dict):
    def __init__(__self__, *,
                 auth_method: builtins.str,
                 region: builtins.str,
                 access_key: Optional[builtins.str] = None,
                 secret_key: Optional[builtins.str] = None):
        """
        :param builtins.str auth_method: Enum: `credentials`. Auth method of the vault secret provider.
        :param builtins.str region: Region used to lookup secrets with AWS SecretManager.
        :param builtins.str access_key: Access key used to authenticate with aws.
        :param builtins.str secret_key: Secret key used to authenticate with aws.
        """
        pulumi.set(__self__, "auth_method", auth_method)
        pulumi.set(__self__, "region", region)
        if access_key is not None:
            pulumi.set(__self__, "access_key", access_key)
        if secret_key is not None:
            pulumi.set(__self__, "secret_key", secret_key)

    @property
    @pulumi.getter(name="authMethod")
    def auth_method(self) -> builtins.str:
        """
        Enum: `credentials`. Auth method of the vault secret provider.
        """
        return pulumi.get(self, "auth_method")

    @property
    @pulumi.getter
    def region(self) -> builtins.str:
        """
        Region used to lookup secrets with AWS SecretManager.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="accessKey")
    def access_key(self) -> Optional[builtins.str]:
        """
        Access key used to authenticate with aws.
        """
        return pulumi.get(self, "access_key")

    @property
    @pulumi.getter(name="secretKey")
    def secret_key(self) -> Optional[builtins.str]:
        """
        Secret key used to authenticate with aws.
        """
        return pulumi.get(self, "secret_key")


@pulumi.output_type
class GetKafkaConnectKafkaConnectUserConfigSecretProviderVaultResult(dict):
    def __init__(__self__, *,
                 address: builtins.str,
                 auth_method: builtins.str,
                 engine_version: Optional[builtins.int] = None,
                 prefix_path_depth: Optional[builtins.int] = None,
                 token: Optional[builtins.str] = None):
        """
        :param builtins.str address: Address of the Vault server.
        :param builtins.str auth_method: Enum: `token`. Auth method of the vault secret provider.
        :param builtins.int engine_version: Enum: `1`, `2`, and newer. KV Secrets Engine version of the Vault server instance.
        :param builtins.int prefix_path_depth: Prefix path depth of the secrets Engine. Default is 1. If the secrets engine path has more than one segment it has to be increased to the number of segments.
        :param builtins.str token: Token used to authenticate with vault and auth method `token`.
        """
        pulumi.set(__self__, "address", address)
        pulumi.set(__self__, "auth_method", auth_method)
        if engine_version is not None:
            pulumi.set(__self__, "engine_version", engine_version)
        if prefix_path_depth is not None:
            pulumi.set(__self__, "prefix_path_depth", prefix_path_depth)
        if token is not None:
            pulumi.set(__self__, "token", token)

    @property
    @pulumi.getter
    def address(self) -> builtins.str:
        """
        Address of the Vault server.
        """
        return pulumi.get(self, "address")

    @property
    @pulumi.getter(name="authMethod")
    def auth_method(self) -> builtins.str:
        """
        Enum: `token`. Auth method of the vault secret provider.
        """
        return pulumi.get(self, "auth_method")

    @property
    @pulumi.getter(name="engineVersion")
    def engine_version(self) -> Optional[builtins.int]:
        """
        Enum: `1`, `2`, and newer. KV Secrets Engine version of the Vault server instance.
        """
        return pulumi.get(self, "engine_version")

    @property
    @pulumi.getter(name="prefixPathDepth")
    def prefix_path_depth(self) -> Optional[builtins.int]:
        """
        Prefix path depth of the secrets Engine. Default is 1. If the secrets engine path has more than one segment it has to be increased to the number of segments.
        """
        return pulumi.get(self, "prefix_path_depth")

    @property
    @pulumi.getter
    def token(self) -> Optional[builtins.str]:
        """
        Token used to authenticate with vault and auth method `token`.
        """
        return pulumi.get(self, "token")


@pulumi.output_type
class GetKafkaConnectServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetKafkaConnectTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetKafkaConnectTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetKafkaConnectorTaskResult(dict):
    def __init__(__self__, *,
                 connector: builtins.str,
                 task: builtins.int):
        """
        :param builtins.str connector: The name of the related connector.
        :param builtins.int task: The task ID of the task.
        """
        pulumi.set(__self__, "connector", connector)
        pulumi.set(__self__, "task", task)

    @property
    @pulumi.getter
    def connector(self) -> builtins.str:
        """
        The name of the related connector.
        """
        return pulumi.get(self, "connector")

    @property
    @pulumi.getter
    def task(self) -> builtins.int:
        """
        The task ID of the task.
        """
        return pulumi.get(self, "task")


@pulumi.output_type
class GetKafkaKafkaResult(dict):
    def __init__(__self__, *,
                 access_cert: builtins.str,
                 access_key: builtins.str,
                 connect_uri: builtins.str,
                 rest_uri: builtins.str,
                 schema_registry_uri: builtins.str,
                 uris: Sequence[builtins.str]):
        """
        :param builtins.str access_cert: The Kafka client certificate.
        :param builtins.str access_key: The Kafka client certificate key.
        :param builtins.str connect_uri: The Kafka Connect URI.
        :param builtins.str rest_uri: The Kafka REST URI.
        :param builtins.str schema_registry_uri: The Schema Registry URI.
        :param Sequence[builtins.str] uris: Kafka server URIs.
        """
        pulumi.set(__self__, "access_cert", access_cert)
        pulumi.set(__self__, "access_key", access_key)
        pulumi.set(__self__, "connect_uri", connect_uri)
        pulumi.set(__self__, "rest_uri", rest_uri)
        pulumi.set(__self__, "schema_registry_uri", schema_registry_uri)
        pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter(name="accessCert")
    def access_cert(self) -> builtins.str:
        """
        The Kafka client certificate.
        """
        return pulumi.get(self, "access_cert")

    @property
    @pulumi.getter(name="accessKey")
    def access_key(self) -> builtins.str:
        """
        The Kafka client certificate key.
        """
        return pulumi.get(self, "access_key")

    @property
    @pulumi.getter(name="connectUri")
    def connect_uri(self) -> builtins.str:
        """
        The Kafka Connect URI.
        """
        return pulumi.get(self, "connect_uri")

    @property
    @pulumi.getter(name="restUri")
    def rest_uri(self) -> builtins.str:
        """
        The Kafka REST URI.
        """
        return pulumi.get(self, "rest_uri")

    @property
    @pulumi.getter(name="schemaRegistryUri")
    def schema_registry_uri(self) -> builtins.str:
        """
        The Schema Registry URI.
        """
        return pulumi.get(self, "schema_registry_uri")

    @property
    @pulumi.getter
    def uris(self) -> Sequence[builtins.str]:
        """
        Kafka server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class GetKafkaKafkaUserConfigResult(dict):
    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 aiven_kafka_topic_messages: Optional[builtins.bool] = None,
                 custom_domain: Optional[builtins.str] = None,
                 follower_fetching: Optional['outputs.GetKafkaKafkaUserConfigFollowerFetchingResult'] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetKafkaKafkaUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 kafka: Optional['outputs.GetKafkaKafkaUserConfigKafkaResult'] = None,
                 kafka_authentication_methods: Optional['outputs.GetKafkaKafkaUserConfigKafkaAuthenticationMethodsResult'] = None,
                 kafka_connect: Optional[builtins.bool] = None,
                 kafka_connect_config: Optional['outputs.GetKafkaKafkaUserConfigKafkaConnectConfigResult'] = None,
                 kafka_connect_plugin_versions: Optional[Sequence['outputs.GetKafkaKafkaUserConfigKafkaConnectPluginVersionResult']] = None,
                 kafka_connect_secret_providers: Optional[Sequence['outputs.GetKafkaKafkaUserConfigKafkaConnectSecretProviderResult']] = None,
                 kafka_rest: Optional[builtins.bool] = None,
                 kafka_rest_authorization: Optional[builtins.bool] = None,
                 kafka_rest_config: Optional['outputs.GetKafkaKafkaUserConfigKafkaRestConfigResult'] = None,
                 kafka_sasl_mechanisms: Optional['outputs.GetKafkaKafkaUserConfigKafkaSaslMechanismsResult'] = None,
                 kafka_version: Optional[builtins.str] = None,
                 letsencrypt_sasl_privatelink: Optional[builtins.bool] = None,
                 private_access: Optional['outputs.GetKafkaKafkaUserConfigPrivateAccessResult'] = None,
                 privatelink_access: Optional['outputs.GetKafkaKafkaUserConfigPrivatelinkAccessResult'] = None,
                 public_access: Optional['outputs.GetKafkaKafkaUserConfigPublicAccessResult'] = None,
                 schema_registry: Optional[builtins.bool] = None,
                 schema_registry_config: Optional['outputs.GetKafkaKafkaUserConfigSchemaRegistryConfigResult'] = None,
                 service_log: Optional[builtins.bool] = None,
                 single_zone: Optional['outputs.GetKafkaKafkaUserConfigSingleZoneResult'] = None,
                 static_ips: Optional[builtins.bool] = None,
                 tiered_storage: Optional['outputs.GetKafkaKafkaUserConfigTieredStorageResult'] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.bool aiven_kafka_topic_messages: Allow access to read Kafka topic messages in the Aiven Console and REST API.
        :param builtins.str custom_domain: Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        :param 'GetKafkaKafkaUserConfigFollowerFetchingArgs' follower_fetching: Enable follower fetching
        :param Sequence['GetKafkaKafkaUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'GetKafkaKafkaUserConfigKafkaArgs' kafka: Kafka broker configuration values
        :param 'GetKafkaKafkaUserConfigKafkaAuthenticationMethodsArgs' kafka_authentication_methods: Kafka authentication methods
        :param builtins.bool kafka_connect: Enable Kafka Connect service. Default: `false`.
        :param 'GetKafkaKafkaUserConfigKafkaConnectConfigArgs' kafka_connect_config: Kafka Connect configuration values
        :param Sequence['GetKafkaKafkaUserConfigKafkaConnectPluginVersionArgs'] kafka_connect_plugin_versions: The plugin selected by the user
        :param builtins.bool kafka_rest: Enable Kafka-REST service. Default: `false`.
        :param builtins.bool kafka_rest_authorization: Enable authorization in Kafka-REST service.
        :param 'GetKafkaKafkaUserConfigKafkaRestConfigArgs' kafka_rest_config: Kafka REST configuration
        :param 'GetKafkaKafkaUserConfigKafkaSaslMechanismsArgs' kafka_sasl_mechanisms: Kafka SASL mechanisms
        :param builtins.str kafka_version: Enum: `3.1`, `3.2`, `3.3`, `3.4`, `3.5`, `3.6`, `3.7`, `3.8`, `3.9`, and newer. Kafka major version.
        :param builtins.bool letsencrypt_sasl_privatelink: Use Letsencrypt CA for Kafka SASL via Privatelink.
        :param 'GetKafkaKafkaUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'GetKafkaKafkaUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param 'GetKafkaKafkaUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.bool schema_registry: Enable Schema-Registry service. Default: `false`.
        :param 'GetKafkaKafkaUserConfigSchemaRegistryConfigArgs' schema_registry_config: Schema Registry configuration
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param 'GetKafkaKafkaUserConfigSingleZoneArgs' single_zone: Single-zone configuration
        :param builtins.bool static_ips: Use static public IP addresses.
        :param 'GetKafkaKafkaUserConfigTieredStorageArgs' tiered_storage: Tiered storage configuration
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if aiven_kafka_topic_messages is not None:
            pulumi.set(__self__, "aiven_kafka_topic_messages", aiven_kafka_topic_messages)
        if custom_domain is not None:
            pulumi.set(__self__, "custom_domain", custom_domain)
        if follower_fetching is not None:
            pulumi.set(__self__, "follower_fetching", follower_fetching)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if kafka is not None:
            pulumi.set(__self__, "kafka", kafka)
        if kafka_authentication_methods is not None:
            pulumi.set(__self__, "kafka_authentication_methods", kafka_authentication_methods)
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)
        if kafka_connect_config is not None:
            pulumi.set(__self__, "kafka_connect_config", kafka_connect_config)
        if kafka_connect_plugin_versions is not None:
            pulumi.set(__self__, "kafka_connect_plugin_versions", kafka_connect_plugin_versions)
        if kafka_connect_secret_providers is not None:
            pulumi.set(__self__, "kafka_connect_secret_providers", kafka_connect_secret_providers)
        if kafka_rest is not None:
            pulumi.set(__self__, "kafka_rest", kafka_rest)
        if kafka_rest_authorization is not None:
            pulumi.set(__self__, "kafka_rest_authorization", kafka_rest_authorization)
        if kafka_rest_config is not None:
            pulumi.set(__self__, "kafka_rest_config", kafka_rest_config)
        if kafka_sasl_mechanisms is not None:
            pulumi.set(__self__, "kafka_sasl_mechanisms", kafka_sasl_mechanisms)
        if kafka_version is not None:
            pulumi.set(__self__, "kafka_version", kafka_version)
        if letsencrypt_sasl_privatelink is not None:
            pulumi.set(__self__, "letsencrypt_sasl_privatelink", letsencrypt_sasl_privatelink)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if schema_registry is not None:
            pulumi.set(__self__, "schema_registry", schema_registry)
        if schema_registry_config is not None:
            pulumi.set(__self__, "schema_registry_config", schema_registry_config)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if single_zone is not None:
            pulumi.set(__self__, "single_zone", single_zone)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)
        if tiered_storage is not None:
            pulumi.set(__self__, "tiered_storage", tiered_storage)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    @_utilities.deprecated("""This property is deprecated.""")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="aivenKafkaTopicMessages")
    def aiven_kafka_topic_messages(self) -> Optional[builtins.bool]:
        """
        Allow access to read Kafka topic messages in the Aiven Console and REST API.
        """
        return pulumi.get(self, "aiven_kafka_topic_messages")

    @property
    @pulumi.getter(name="customDomain")
    def custom_domain(self) -> Optional[builtins.str]:
        """
        Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        """
        return pulumi.get(self, "custom_domain")

    @property
    @pulumi.getter(name="followerFetching")
    def follower_fetching(self) -> Optional['outputs.GetKafkaKafkaUserConfigFollowerFetchingResult']:
        """
        Enable follower fetching
        """
        return pulumi.get(self, "follower_fetching")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetKafkaKafkaUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter
    def kafka(self) -> Optional['outputs.GetKafkaKafkaUserConfigKafkaResult']:
        """
        Kafka broker configuration values
        """
        return pulumi.get(self, "kafka")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethods")
    def kafka_authentication_methods(self) -> Optional['outputs.GetKafkaKafkaUserConfigKafkaAuthenticationMethodsResult']:
        """
        Kafka authentication methods
        """
        return pulumi.get(self, "kafka_authentication_methods")

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional[builtins.bool]:
        """
        Enable Kafka Connect service. Default: `false`.
        """
        return pulumi.get(self, "kafka_connect")

    @property
    @pulumi.getter(name="kafkaConnectConfig")
    def kafka_connect_config(self) -> Optional['outputs.GetKafkaKafkaUserConfigKafkaConnectConfigResult']:
        """
        Kafka Connect configuration values
        """
        return pulumi.get(self, "kafka_connect_config")

    @property
    @pulumi.getter(name="kafkaConnectPluginVersions")
    def kafka_connect_plugin_versions(self) -> Optional[Sequence['outputs.GetKafkaKafkaUserConfigKafkaConnectPluginVersionResult']]:
        """
        The plugin selected by the user
        """
        return pulumi.get(self, "kafka_connect_plugin_versions")

    @property
    @pulumi.getter(name="kafkaConnectSecretProviders")
    def kafka_connect_secret_providers(self) -> Optional[Sequence['outputs.GetKafkaKafkaUserConfigKafkaConnectSecretProviderResult']]:
        return pulumi.get(self, "kafka_connect_secret_providers")

    @property
    @pulumi.getter(name="kafkaRest")
    def kafka_rest(self) -> Optional[builtins.bool]:
        """
        Enable Kafka-REST service. Default: `false`.
        """
        return pulumi.get(self, "kafka_rest")

    @property
    @pulumi.getter(name="kafkaRestAuthorization")
    def kafka_rest_authorization(self) -> Optional[builtins.bool]:
        """
        Enable authorization in Kafka-REST service.
        """
        return pulumi.get(self, "kafka_rest_authorization")

    @property
    @pulumi.getter(name="kafkaRestConfig")
    def kafka_rest_config(self) -> Optional['outputs.GetKafkaKafkaUserConfigKafkaRestConfigResult']:
        """
        Kafka REST configuration
        """
        return pulumi.get(self, "kafka_rest_config")

    @property
    @pulumi.getter(name="kafkaSaslMechanisms")
    def kafka_sasl_mechanisms(self) -> Optional['outputs.GetKafkaKafkaUserConfigKafkaSaslMechanismsResult']:
        """
        Kafka SASL mechanisms
        """
        return pulumi.get(self, "kafka_sasl_mechanisms")

    @property
    @pulumi.getter(name="kafkaVersion")
    def kafka_version(self) -> Optional[builtins.str]:
        """
        Enum: `3.1`, `3.2`, `3.3`, `3.4`, `3.5`, `3.6`, `3.7`, `3.8`, `3.9`, and newer. Kafka major version.
        """
        return pulumi.get(self, "kafka_version")

    @property
    @pulumi.getter(name="letsencryptSaslPrivatelink")
    def letsencrypt_sasl_privatelink(self) -> Optional[builtins.bool]:
        """
        Use Letsencrypt CA for Kafka SASL via Privatelink.
        """
        return pulumi.get(self, "letsencrypt_sasl_privatelink")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.GetKafkaKafkaUserConfigPrivateAccessResult']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.GetKafkaKafkaUserConfigPrivatelinkAccessResult']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GetKafkaKafkaUserConfigPublicAccessResult']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="schemaRegistry")
    def schema_registry(self) -> Optional[builtins.bool]:
        """
        Enable Schema-Registry service. Default: `false`.
        """
        return pulumi.get(self, "schema_registry")

    @property
    @pulumi.getter(name="schemaRegistryConfig")
    def schema_registry_config(self) -> Optional['outputs.GetKafkaKafkaUserConfigSchemaRegistryConfigResult']:
        """
        Schema Registry configuration
        """
        return pulumi.get(self, "schema_registry_config")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="singleZone")
    def single_zone(self) -> Optional['outputs.GetKafkaKafkaUserConfigSingleZoneResult']:
        """
        Single-zone configuration
        """
        return pulumi.get(self, "single_zone")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")

    @property
    @pulumi.getter(name="tieredStorage")
    def tiered_storage(self) -> Optional['outputs.GetKafkaKafkaUserConfigTieredStorageResult']:
        """
        Tiered storage configuration
        """
        return pulumi.get(self, "tiered_storage")


@pulumi.output_type
class GetKafkaKafkaUserConfigFollowerFetchingResult(dict):
    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None):
        """
        :param builtins.bool enabled: Whether to enable the follower fetching functionality.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[builtins.bool]:
        """
        Whether to enable the follower fetching functionality.
        """
        return pulumi.get(self, "enabled")


@pulumi.output_type
class GetKafkaKafkaUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetKafkaKafkaUserConfigKafkaResult(dict):
    def __init__(__self__, *,
                 auto_create_topics_enable: Optional[builtins.bool] = None,
                 compression_type: Optional[builtins.str] = None,
                 connections_max_idle_ms: Optional[builtins.int] = None,
                 default_replication_factor: Optional[builtins.int] = None,
                 group_initial_rebalance_delay_ms: Optional[builtins.int] = None,
                 group_max_session_timeout_ms: Optional[builtins.int] = None,
                 group_min_session_timeout_ms: Optional[builtins.int] = None,
                 log_cleaner_delete_retention_ms: Optional[builtins.int] = None,
                 log_cleaner_max_compaction_lag_ms: Optional[builtins.int] = None,
                 log_cleaner_min_cleanable_ratio: Optional[builtins.float] = None,
                 log_cleaner_min_compaction_lag_ms: Optional[builtins.int] = None,
                 log_cleanup_policy: Optional[builtins.str] = None,
                 log_flush_interval_messages: Optional[builtins.int] = None,
                 log_flush_interval_ms: Optional[builtins.int] = None,
                 log_index_interval_bytes: Optional[builtins.int] = None,
                 log_index_size_max_bytes: Optional[builtins.int] = None,
                 log_local_retention_bytes: Optional[builtins.int] = None,
                 log_local_retention_ms: Optional[builtins.int] = None,
                 log_message_downconversion_enable: Optional[builtins.bool] = None,
                 log_message_timestamp_difference_max_ms: Optional[builtins.int] = None,
                 log_message_timestamp_type: Optional[builtins.str] = None,
                 log_preallocate: Optional[builtins.bool] = None,
                 log_retention_bytes: Optional[builtins.int] = None,
                 log_retention_hours: Optional[builtins.int] = None,
                 log_retention_ms: Optional[builtins.int] = None,
                 log_roll_jitter_ms: Optional[builtins.int] = None,
                 log_roll_ms: Optional[builtins.int] = None,
                 log_segment_bytes: Optional[builtins.int] = None,
                 log_segment_delete_delay_ms: Optional[builtins.int] = None,
                 max_connections_per_ip: Optional[builtins.int] = None,
                 max_incremental_fetch_session_cache_slots: Optional[builtins.int] = None,
                 message_max_bytes: Optional[builtins.int] = None,
                 min_insync_replicas: Optional[builtins.int] = None,
                 num_partitions: Optional[builtins.int] = None,
                 offsets_retention_minutes: Optional[builtins.int] = None,
                 producer_purgatory_purge_interval_requests: Optional[builtins.int] = None,
                 replica_fetch_max_bytes: Optional[builtins.int] = None,
                 replica_fetch_response_max_bytes: Optional[builtins.int] = None,
                 sasl_oauthbearer_expected_audience: Optional[builtins.str] = None,
                 sasl_oauthbearer_expected_issuer: Optional[builtins.str] = None,
                 sasl_oauthbearer_jwks_endpoint_url: Optional[builtins.str] = None,
                 sasl_oauthbearer_sub_claim_name: Optional[builtins.str] = None,
                 socket_request_max_bytes: Optional[builtins.int] = None,
                 transaction_partition_verification_enable: Optional[builtins.bool] = None,
                 transaction_remove_expired_transaction_cleanup_interval_ms: Optional[builtins.int] = None,
                 transaction_state_log_segment_bytes: Optional[builtins.int] = None):
        """
        :param builtins.bool auto_create_topics_enable: Enable auto-creation of topics. (Default: true).
        :param builtins.str compression_type: Enum: `gzip`, `lz4`, `producer`, `snappy`, `uncompressed`, `zstd`. Specify the final compression type for a given topic. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `uncompressed` which is equivalent to no compression; and `producer` which means retain the original compression codec set by the producer.(Default: producer).
        :param builtins.int connections_max_idle_ms: Idle connections timeout: the server socket processor threads close the connections that idle for longer than this. (Default: 600000 ms (10 minutes)). Example: `540000`.
        :param builtins.int default_replication_factor: Replication factor for auto-created topics (Default: 3).
        :param builtins.int group_initial_rebalance_delay_ms: The amount of time, in milliseconds, the group coordinator will wait for more consumers to join a new group before performing the first rebalance. A longer delay means potentially fewer rebalances, but increases the time until processing begins. The default value for this is 3 seconds. During development and testing it might be desirable to set this to 0 in order to not delay test execution time. (Default: 3000 ms (3 seconds)). Example: `3000`.
        :param builtins.int group_max_session_timeout_ms: The maximum allowed session timeout for registered consumers. Longer timeouts give consumers more time to process messages in between heartbeats at the cost of a longer time to detect failures. Default: 1800000 ms (30 minutes). Example: `1800000`.
        :param builtins.int group_min_session_timeout_ms: The minimum allowed session timeout for registered consumers. Longer timeouts give consumers more time to process messages in between heartbeats at the cost of a longer time to detect failures. (Default: 6000 ms (6 seconds)). Example: `6000`.
        :param builtins.int log_cleaner_delete_retention_ms: How long are delete records retained? (Default: 86400000 (1 day)). Example: `86400000`.
        :param builtins.int log_cleaner_max_compaction_lag_ms: The maximum amount of time message will remain uncompacted. Only applicable for logs that are being compacted. (Default: 9223372036854775807 ms (Long.MAX_VALUE)).
        :param builtins.float log_cleaner_min_cleanable_ratio: Controls log compactor frequency. Larger value means more frequent compactions but also more space wasted for logs. Consider setting log.cleaner.max.compaction.lag.ms to enforce compactions sooner, instead of setting a very high value for this option. (Default: 0.5). Example: `0.5`.
        :param builtins.int log_cleaner_min_compaction_lag_ms: The minimum time a message will remain uncompacted in the log. Only applicable for logs that are being compacted. (Default: 0 ms).
        :param builtins.str log_cleanup_policy: Enum: `compact`, `compact,delete`, `delete`. The default cleanup policy for segments beyond the retention window (Default: delete).
        :param builtins.int log_flush_interval_messages: The number of messages accumulated on a log partition before messages are flushed to disk (Default: 9223372036854775807 (Long.MAX_VALUE)).
        :param builtins.int log_flush_interval_ms: The maximum time in ms that a message in any topic is kept in memory (page-cache) before flushed to disk. If not set, the value in log.flush.scheduler.interval.ms is used (Default: null).
        :param builtins.int log_index_interval_bytes: The interval with which Kafka adds an entry to the offset index (Default: 4096 bytes (4 kibibytes)). Example: `4096`.
        :param builtins.int log_index_size_max_bytes: The maximum size in bytes of the offset index (Default: 10485760 (10 mebibytes)). Example: `10485760`.
        :param builtins.int log_local_retention_bytes: The maximum size of local log segments that can grow for a partition before it gets eligible for deletion. If set to -2, the value of log.retention.bytes is used. The effective value should always be less than or equal to log.retention.bytes value. (Default: -2).
        :param builtins.int log_local_retention_ms: The number of milliseconds to keep the local log segments before it gets eligible for deletion. If set to -2, the value of log.retention.ms is used. The effective value should always be less than or equal to log.retention.ms value. (Default: -2).
        :param builtins.bool log_message_downconversion_enable: This configuration controls whether down-conversion of message formats is enabled to satisfy consume requests. (Default: true).
        :param builtins.int log_message_timestamp_difference_max_ms: The maximum difference allowed between the timestamp when a broker receives a message and the timestamp specified in the message (Default: 9223372036854775807 (Long.MAX_VALUE)).
        :param builtins.str log_message_timestamp_type: Enum: `CreateTime`, `LogAppendTime`. Define whether the timestamp in the message is message create time or log append time. (Default: CreateTime).
        :param builtins.bool log_preallocate: Should pre allocate file when create new segment? (Default: false).
        :param builtins.int log_retention_bytes: The maximum size of the log before deleting messages (Default: -1).
        :param builtins.int log_retention_hours: The number of hours to keep a log file before deleting it (Default: 168 hours (1 week)).
        :param builtins.int log_retention_ms: The number of milliseconds to keep a log file before deleting it (in milliseconds), If not set, the value in log.retention.minutes is used. If set to -1, no time limit is applied. (Default: null, log.retention.hours applies).
        :param builtins.int log_roll_jitter_ms: The maximum jitter to subtract from logRollTimeMillis (in milliseconds). If not set, the value in log.roll.jitter.hours is used (Default: null).
        :param builtins.int log_roll_ms: The maximum time before a new log segment is rolled out (in milliseconds). (Default: null, log.roll.hours applies (Default: 168, 7 days)).
        :param builtins.int log_segment_bytes: The maximum size of a single log file (Default: 1073741824 bytes (1 gibibyte)).
        :param builtins.int log_segment_delete_delay_ms: The amount of time to wait before deleting a file from the filesystem (Default: 60000 ms (1 minute)). Example: `60000`.
        :param builtins.int max_connections_per_ip: The maximum number of connections allowed from each ip address (Default: 2147483647).
        :param builtins.int max_incremental_fetch_session_cache_slots: The maximum number of incremental fetch sessions that the broker will maintain. (Default: 1000). Example: `1000`.
        :param builtins.int message_max_bytes: The maximum size of message that the server can receive. (Default: 1048588 bytes (1 mebibyte + 12 bytes)). Example: `1048588`.
        :param builtins.int min_insync_replicas: When a producer sets acks to `all` (or `-1`), min.insync.replicas specifies the minimum number of replicas that must acknowledge a write for the write to be considered successful. (Default: 1). Example: `1`.
        :param builtins.int num_partitions: Number of partitions for auto-created topics (Default: 1).
        :param builtins.int offsets_retention_minutes: Log retention window in minutes for offsets topic (Default: 10080 minutes (7 days)). Example: `10080`.
        :param builtins.int producer_purgatory_purge_interval_requests: The purge interval (in number of requests) of the producer request purgatory (Default: 1000).
        :param builtins.int replica_fetch_max_bytes: The number of bytes of messages to attempt to fetch for each partition . This is not an absolute maximum, if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that progress can be made. (Default: 1048576 bytes (1 mebibytes)).
        :param builtins.int replica_fetch_response_max_bytes: Maximum bytes expected for the entire fetch response. Records are fetched in batches, and if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that progress can be made. As such, this is not an absolute maximum. (Default: 10485760 bytes (10 mebibytes)).
        :param builtins.str sasl_oauthbearer_expected_audience: The (optional) comma-delimited setting for the broker to use to verify that the JWT was issued for one of the expected audiences. (Default: null).
        :param builtins.str sasl_oauthbearer_expected_issuer: Optional setting for the broker to use to verify that the JWT was created by the expected issuer.(Default: null).
        :param builtins.str sasl_oauthbearer_jwks_endpoint_url: OIDC JWKS endpoint URL. By setting this the SASL SSL OAuth2/OIDC authentication is enabled. See also other options for SASL OAuth2/OIDC. (Default: null).
        :param builtins.str sasl_oauthbearer_sub_claim_name: Name of the scope from which to extract the subject claim from the JWT.(Default: sub).
        :param builtins.int socket_request_max_bytes: The maximum number of bytes in a socket request (Default: 104857600 bytes).
        :param builtins.bool transaction_partition_verification_enable: Enable verification that checks that the partition has been added to the transaction before writing transactional records to the partition. (Default: true).
        :param builtins.int transaction_remove_expired_transaction_cleanup_interval_ms: The interval at which to remove transactions that have expired due to transactional.id.expiration.ms passing (Default: 3600000 ms (1 hour)). Example: `3600000`.
        :param builtins.int transaction_state_log_segment_bytes: The transaction topic segment bytes should be kept relatively small in order to facilitate faster log compaction and cache loads (Default: 104857600 bytes (100 mebibytes)). Example: `104857600`.
        """
        if auto_create_topics_enable is not None:
            pulumi.set(__self__, "auto_create_topics_enable", auto_create_topics_enable)
        if compression_type is not None:
            pulumi.set(__self__, "compression_type", compression_type)
        if connections_max_idle_ms is not None:
            pulumi.set(__self__, "connections_max_idle_ms", connections_max_idle_ms)
        if default_replication_factor is not None:
            pulumi.set(__self__, "default_replication_factor", default_replication_factor)
        if group_initial_rebalance_delay_ms is not None:
            pulumi.set(__self__, "group_initial_rebalance_delay_ms", group_initial_rebalance_delay_ms)
        if group_max_session_timeout_ms is not None:
            pulumi.set(__self__, "group_max_session_timeout_ms", group_max_session_timeout_ms)
        if group_min_session_timeout_ms is not None:
            pulumi.set(__self__, "group_min_session_timeout_ms", group_min_session_timeout_ms)
        if log_cleaner_delete_retention_ms is not None:
            pulumi.set(__self__, "log_cleaner_delete_retention_ms", log_cleaner_delete_retention_ms)
        if log_cleaner_max_compaction_lag_ms is not None:
            pulumi.set(__self__, "log_cleaner_max_compaction_lag_ms", log_cleaner_max_compaction_lag_ms)
        if log_cleaner_min_cleanable_ratio is not None:
            pulumi.set(__self__, "log_cleaner_min_cleanable_ratio", log_cleaner_min_cleanable_ratio)
        if log_cleaner_min_compaction_lag_ms is not None:
            pulumi.set(__self__, "log_cleaner_min_compaction_lag_ms", log_cleaner_min_compaction_lag_ms)
        if log_cleanup_policy is not None:
            pulumi.set(__self__, "log_cleanup_policy", log_cleanup_policy)
        if log_flush_interval_messages is not None:
            pulumi.set(__self__, "log_flush_interval_messages", log_flush_interval_messages)
        if log_flush_interval_ms is not None:
            pulumi.set(__self__, "log_flush_interval_ms", log_flush_interval_ms)
        if log_index_interval_bytes is not None:
            pulumi.set(__self__, "log_index_interval_bytes", log_index_interval_bytes)
        if log_index_size_max_bytes is not None:
            pulumi.set(__self__, "log_index_size_max_bytes", log_index_size_max_bytes)
        if log_local_retention_bytes is not None:
            pulumi.set(__self__, "log_local_retention_bytes", log_local_retention_bytes)
        if log_local_retention_ms is not None:
            pulumi.set(__self__, "log_local_retention_ms", log_local_retention_ms)
        if log_message_downconversion_enable is not None:
            pulumi.set(__self__, "log_message_downconversion_enable", log_message_downconversion_enable)
        if log_message_timestamp_difference_max_ms is not None:
            pulumi.set(__self__, "log_message_timestamp_difference_max_ms", log_message_timestamp_difference_max_ms)
        if log_message_timestamp_type is not None:
            pulumi.set(__self__, "log_message_timestamp_type", log_message_timestamp_type)
        if log_preallocate is not None:
            pulumi.set(__self__, "log_preallocate", log_preallocate)
        if log_retention_bytes is not None:
            pulumi.set(__self__, "log_retention_bytes", log_retention_bytes)
        if log_retention_hours is not None:
            pulumi.set(__self__, "log_retention_hours", log_retention_hours)
        if log_retention_ms is not None:
            pulumi.set(__self__, "log_retention_ms", log_retention_ms)
        if log_roll_jitter_ms is not None:
            pulumi.set(__self__, "log_roll_jitter_ms", log_roll_jitter_ms)
        if log_roll_ms is not None:
            pulumi.set(__self__, "log_roll_ms", log_roll_ms)
        if log_segment_bytes is not None:
            pulumi.set(__self__, "log_segment_bytes", log_segment_bytes)
        if log_segment_delete_delay_ms is not None:
            pulumi.set(__self__, "log_segment_delete_delay_ms", log_segment_delete_delay_ms)
        if max_connections_per_ip is not None:
            pulumi.set(__self__, "max_connections_per_ip", max_connections_per_ip)
        if max_incremental_fetch_session_cache_slots is not None:
            pulumi.set(__self__, "max_incremental_fetch_session_cache_slots", max_incremental_fetch_session_cache_slots)
        if message_max_bytes is not None:
            pulumi.set(__self__, "message_max_bytes", message_max_bytes)
        if min_insync_replicas is not None:
            pulumi.set(__self__, "min_insync_replicas", min_insync_replicas)
        if num_partitions is not None:
            pulumi.set(__self__, "num_partitions", num_partitions)
        if offsets_retention_minutes is not None:
            pulumi.set(__self__, "offsets_retention_minutes", offsets_retention_minutes)
        if producer_purgatory_purge_interval_requests is not None:
            pulumi.set(__self__, "producer_purgatory_purge_interval_requests", producer_purgatory_purge_interval_requests)
        if replica_fetch_max_bytes is not None:
            pulumi.set(__self__, "replica_fetch_max_bytes", replica_fetch_max_bytes)
        if replica_fetch_response_max_bytes is not None:
            pulumi.set(__self__, "replica_fetch_response_max_bytes", replica_fetch_response_max_bytes)
        if sasl_oauthbearer_expected_audience is not None:
            pulumi.set(__self__, "sasl_oauthbearer_expected_audience", sasl_oauthbearer_expected_audience)
        if sasl_oauthbearer_expected_issuer is not None:
            pulumi.set(__self__, "sasl_oauthbearer_expected_issuer", sasl_oauthbearer_expected_issuer)
        if sasl_oauthbearer_jwks_endpoint_url is not None:
            pulumi.set(__self__, "sasl_oauthbearer_jwks_endpoint_url", sasl_oauthbearer_jwks_endpoint_url)
        if sasl_oauthbearer_sub_claim_name is not None:
            pulumi.set(__self__, "sasl_oauthbearer_sub_claim_name", sasl_oauthbearer_sub_claim_name)
        if socket_request_max_bytes is not None:
            pulumi.set(__self__, "socket_request_max_bytes", socket_request_max_bytes)
        if transaction_partition_verification_enable is not None:
            pulumi.set(__self__, "transaction_partition_verification_enable", transaction_partition_verification_enable)
        if transaction_remove_expired_transaction_cleanup_interval_ms is not None:
            pulumi.set(__self__, "transaction_remove_expired_transaction_cleanup_interval_ms", transaction_remove_expired_transaction_cleanup_interval_ms)
        if transaction_state_log_segment_bytes is not None:
            pulumi.set(__self__, "transaction_state_log_segment_bytes", transaction_state_log_segment_bytes)

    @property
    @pulumi.getter(name="autoCreateTopicsEnable")
    def auto_create_topics_enable(self) -> Optional[builtins.bool]:
        """
        Enable auto-creation of topics. (Default: true).
        """
        return pulumi.get(self, "auto_create_topics_enable")

    @property
    @pulumi.getter(name="compressionType")
    def compression_type(self) -> Optional[builtins.str]:
        """
        Enum: `gzip`, `lz4`, `producer`, `snappy`, `uncompressed`, `zstd`. Specify the final compression type for a given topic. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `uncompressed` which is equivalent to no compression; and `producer` which means retain the original compression codec set by the producer.(Default: producer).
        """
        return pulumi.get(self, "compression_type")

    @property
    @pulumi.getter(name="connectionsMaxIdleMs")
    def connections_max_idle_ms(self) -> Optional[builtins.int]:
        """
        Idle connections timeout: the server socket processor threads close the connections that idle for longer than this. (Default: 600000 ms (10 minutes)). Example: `540000`.
        """
        return pulumi.get(self, "connections_max_idle_ms")

    @property
    @pulumi.getter(name="defaultReplicationFactor")
    def default_replication_factor(self) -> Optional[builtins.int]:
        """
        Replication factor for auto-created topics (Default: 3).
        """
        return pulumi.get(self, "default_replication_factor")

    @property
    @pulumi.getter(name="groupInitialRebalanceDelayMs")
    def group_initial_rebalance_delay_ms(self) -> Optional[builtins.int]:
        """
        The amount of time, in milliseconds, the group coordinator will wait for more consumers to join a new group before performing the first rebalance. A longer delay means potentially fewer rebalances, but increases the time until processing begins. The default value for this is 3 seconds. During development and testing it might be desirable to set this to 0 in order to not delay test execution time. (Default: 3000 ms (3 seconds)). Example: `3000`.
        """
        return pulumi.get(self, "group_initial_rebalance_delay_ms")

    @property
    @pulumi.getter(name="groupMaxSessionTimeoutMs")
    def group_max_session_timeout_ms(self) -> Optional[builtins.int]:
        """
        The maximum allowed session timeout for registered consumers. Longer timeouts give consumers more time to process messages in between heartbeats at the cost of a longer time to detect failures. Default: 1800000 ms (30 minutes). Example: `1800000`.
        """
        return pulumi.get(self, "group_max_session_timeout_ms")

    @property
    @pulumi.getter(name="groupMinSessionTimeoutMs")
    def group_min_session_timeout_ms(self) -> Optional[builtins.int]:
        """
        The minimum allowed session timeout for registered consumers. Longer timeouts give consumers more time to process messages in between heartbeats at the cost of a longer time to detect failures. (Default: 6000 ms (6 seconds)). Example: `6000`.
        """
        return pulumi.get(self, "group_min_session_timeout_ms")

    @property
    @pulumi.getter(name="logCleanerDeleteRetentionMs")
    def log_cleaner_delete_retention_ms(self) -> Optional[builtins.int]:
        """
        How long are delete records retained? (Default: 86400000 (1 day)). Example: `86400000`.
        """
        return pulumi.get(self, "log_cleaner_delete_retention_ms")

    @property
    @pulumi.getter(name="logCleanerMaxCompactionLagMs")
    def log_cleaner_max_compaction_lag_ms(self) -> Optional[builtins.int]:
        """
        The maximum amount of time message will remain uncompacted. Only applicable for logs that are being compacted. (Default: 9223372036854775807 ms (Long.MAX_VALUE)).
        """
        return pulumi.get(self, "log_cleaner_max_compaction_lag_ms")

    @property
    @pulumi.getter(name="logCleanerMinCleanableRatio")
    def log_cleaner_min_cleanable_ratio(self) -> Optional[builtins.float]:
        """
        Controls log compactor frequency. Larger value means more frequent compactions but also more space wasted for logs. Consider setting log.cleaner.max.compaction.lag.ms to enforce compactions sooner, instead of setting a very high value for this option. (Default: 0.5). Example: `0.5`.
        """
        return pulumi.get(self, "log_cleaner_min_cleanable_ratio")

    @property
    @pulumi.getter(name="logCleanerMinCompactionLagMs")
    def log_cleaner_min_compaction_lag_ms(self) -> Optional[builtins.int]:
        """
        The minimum time a message will remain uncompacted in the log. Only applicable for logs that are being compacted. (Default: 0 ms).
        """
        return pulumi.get(self, "log_cleaner_min_compaction_lag_ms")

    @property
    @pulumi.getter(name="logCleanupPolicy")
    def log_cleanup_policy(self) -> Optional[builtins.str]:
        """
        Enum: `compact`, `compact,delete`, `delete`. The default cleanup policy for segments beyond the retention window (Default: delete).
        """
        return pulumi.get(self, "log_cleanup_policy")

    @property
    @pulumi.getter(name="logFlushIntervalMessages")
    def log_flush_interval_messages(self) -> Optional[builtins.int]:
        """
        The number of messages accumulated on a log partition before messages are flushed to disk (Default: 9223372036854775807 (Long.MAX_VALUE)).
        """
        return pulumi.get(self, "log_flush_interval_messages")

    @property
    @pulumi.getter(name="logFlushIntervalMs")
    def log_flush_interval_ms(self) -> Optional[builtins.int]:
        """
        The maximum time in ms that a message in any topic is kept in memory (page-cache) before flushed to disk. If not set, the value in log.flush.scheduler.interval.ms is used (Default: null).
        """
        return pulumi.get(self, "log_flush_interval_ms")

    @property
    @pulumi.getter(name="logIndexIntervalBytes")
    def log_index_interval_bytes(self) -> Optional[builtins.int]:
        """
        The interval with which Kafka adds an entry to the offset index (Default: 4096 bytes (4 kibibytes)). Example: `4096`.
        """
        return pulumi.get(self, "log_index_interval_bytes")

    @property
    @pulumi.getter(name="logIndexSizeMaxBytes")
    def log_index_size_max_bytes(self) -> Optional[builtins.int]:
        """
        The maximum size in bytes of the offset index (Default: 10485760 (10 mebibytes)). Example: `10485760`.
        """
        return pulumi.get(self, "log_index_size_max_bytes")

    @property
    @pulumi.getter(name="logLocalRetentionBytes")
    def log_local_retention_bytes(self) -> Optional[builtins.int]:
        """
        The maximum size of local log segments that can grow for a partition before it gets eligible for deletion. If set to -2, the value of log.retention.bytes is used. The effective value should always be less than or equal to log.retention.bytes value. (Default: -2).
        """
        return pulumi.get(self, "log_local_retention_bytes")

    @property
    @pulumi.getter(name="logLocalRetentionMs")
    def log_local_retention_ms(self) -> Optional[builtins.int]:
        """
        The number of milliseconds to keep the local log segments before it gets eligible for deletion. If set to -2, the value of log.retention.ms is used. The effective value should always be less than or equal to log.retention.ms value. (Default: -2).
        """
        return pulumi.get(self, "log_local_retention_ms")

    @property
    @pulumi.getter(name="logMessageDownconversionEnable")
    def log_message_downconversion_enable(self) -> Optional[builtins.bool]:
        """
        This configuration controls whether down-conversion of message formats is enabled to satisfy consume requests. (Default: true).
        """
        return pulumi.get(self, "log_message_downconversion_enable")

    @property
    @pulumi.getter(name="logMessageTimestampDifferenceMaxMs")
    def log_message_timestamp_difference_max_ms(self) -> Optional[builtins.int]:
        """
        The maximum difference allowed between the timestamp when a broker receives a message and the timestamp specified in the message (Default: 9223372036854775807 (Long.MAX_VALUE)).
        """
        return pulumi.get(self, "log_message_timestamp_difference_max_ms")

    @property
    @pulumi.getter(name="logMessageTimestampType")
    def log_message_timestamp_type(self) -> Optional[builtins.str]:
        """
        Enum: `CreateTime`, `LogAppendTime`. Define whether the timestamp in the message is message create time or log append time. (Default: CreateTime).
        """
        return pulumi.get(self, "log_message_timestamp_type")

    @property
    @pulumi.getter(name="logPreallocate")
    def log_preallocate(self) -> Optional[builtins.bool]:
        """
        Should pre allocate file when create new segment? (Default: false).
        """
        return pulumi.get(self, "log_preallocate")

    @property
    @pulumi.getter(name="logRetentionBytes")
    def log_retention_bytes(self) -> Optional[builtins.int]:
        """
        The maximum size of the log before deleting messages (Default: -1).
        """
        return pulumi.get(self, "log_retention_bytes")

    @property
    @pulumi.getter(name="logRetentionHours")
    def log_retention_hours(self) -> Optional[builtins.int]:
        """
        The number of hours to keep a log file before deleting it (Default: 168 hours (1 week)).
        """
        return pulumi.get(self, "log_retention_hours")

    @property
    @pulumi.getter(name="logRetentionMs")
    def log_retention_ms(self) -> Optional[builtins.int]:
        """
        The number of milliseconds to keep a log file before deleting it (in milliseconds), If not set, the value in log.retention.minutes is used. If set to -1, no time limit is applied. (Default: null, log.retention.hours applies).
        """
        return pulumi.get(self, "log_retention_ms")

    @property
    @pulumi.getter(name="logRollJitterMs")
    def log_roll_jitter_ms(self) -> Optional[builtins.int]:
        """
        The maximum jitter to subtract from logRollTimeMillis (in milliseconds). If not set, the value in log.roll.jitter.hours is used (Default: null).
        """
        return pulumi.get(self, "log_roll_jitter_ms")

    @property
    @pulumi.getter(name="logRollMs")
    def log_roll_ms(self) -> Optional[builtins.int]:
        """
        The maximum time before a new log segment is rolled out (in milliseconds). (Default: null, log.roll.hours applies (Default: 168, 7 days)).
        """
        return pulumi.get(self, "log_roll_ms")

    @property
    @pulumi.getter(name="logSegmentBytes")
    def log_segment_bytes(self) -> Optional[builtins.int]:
        """
        The maximum size of a single log file (Default: 1073741824 bytes (1 gibibyte)).
        """
        return pulumi.get(self, "log_segment_bytes")

    @property
    @pulumi.getter(name="logSegmentDeleteDelayMs")
    def log_segment_delete_delay_ms(self) -> Optional[builtins.int]:
        """
        The amount of time to wait before deleting a file from the filesystem (Default: 60000 ms (1 minute)). Example: `60000`.
        """
        return pulumi.get(self, "log_segment_delete_delay_ms")

    @property
    @pulumi.getter(name="maxConnectionsPerIp")
    def max_connections_per_ip(self) -> Optional[builtins.int]:
        """
        The maximum number of connections allowed from each ip address (Default: 2147483647).
        """
        return pulumi.get(self, "max_connections_per_ip")

    @property
    @pulumi.getter(name="maxIncrementalFetchSessionCacheSlots")
    def max_incremental_fetch_session_cache_slots(self) -> Optional[builtins.int]:
        """
        The maximum number of incremental fetch sessions that the broker will maintain. (Default: 1000). Example: `1000`.
        """
        return pulumi.get(self, "max_incremental_fetch_session_cache_slots")

    @property
    @pulumi.getter(name="messageMaxBytes")
    def message_max_bytes(self) -> Optional[builtins.int]:
        """
        The maximum size of message that the server can receive. (Default: 1048588 bytes (1 mebibyte + 12 bytes)). Example: `1048588`.
        """
        return pulumi.get(self, "message_max_bytes")

    @property
    @pulumi.getter(name="minInsyncReplicas")
    def min_insync_replicas(self) -> Optional[builtins.int]:
        """
        When a producer sets acks to `all` (or `-1`), min.insync.replicas specifies the minimum number of replicas that must acknowledge a write for the write to be considered successful. (Default: 1). Example: `1`.
        """
        return pulumi.get(self, "min_insync_replicas")

    @property
    @pulumi.getter(name="numPartitions")
    def num_partitions(self) -> Optional[builtins.int]:
        """
        Number of partitions for auto-created topics (Default: 1).
        """
        return pulumi.get(self, "num_partitions")

    @property
    @pulumi.getter(name="offsetsRetentionMinutes")
    def offsets_retention_minutes(self) -> Optional[builtins.int]:
        """
        Log retention window in minutes for offsets topic (Default: 10080 minutes (7 days)). Example: `10080`.
        """
        return pulumi.get(self, "offsets_retention_minutes")

    @property
    @pulumi.getter(name="producerPurgatoryPurgeIntervalRequests")
    def producer_purgatory_purge_interval_requests(self) -> Optional[builtins.int]:
        """
        The purge interval (in number of requests) of the producer request purgatory (Default: 1000).
        """
        return pulumi.get(self, "producer_purgatory_purge_interval_requests")

    @property
    @pulumi.getter(name="replicaFetchMaxBytes")
    def replica_fetch_max_bytes(self) -> Optional[builtins.int]:
        """
        The number of bytes of messages to attempt to fetch for each partition . This is not an absolute maximum, if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that progress can be made. (Default: 1048576 bytes (1 mebibytes)).
        """
        return pulumi.get(self, "replica_fetch_max_bytes")

    @property
    @pulumi.getter(name="replicaFetchResponseMaxBytes")
    def replica_fetch_response_max_bytes(self) -> Optional[builtins.int]:
        """
        Maximum bytes expected for the entire fetch response. Records are fetched in batches, and if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that progress can be made. As such, this is not an absolute maximum. (Default: 10485760 bytes (10 mebibytes)).
        """
        return pulumi.get(self, "replica_fetch_response_max_bytes")

    @property
    @pulumi.getter(name="saslOauthbearerExpectedAudience")
    def sasl_oauthbearer_expected_audience(self) -> Optional[builtins.str]:
        """
        The (optional) comma-delimited setting for the broker to use to verify that the JWT was issued for one of the expected audiences. (Default: null).
        """
        return pulumi.get(self, "sasl_oauthbearer_expected_audience")

    @property
    @pulumi.getter(name="saslOauthbearerExpectedIssuer")
    def sasl_oauthbearer_expected_issuer(self) -> Optional[builtins.str]:
        """
        Optional setting for the broker to use to verify that the JWT was created by the expected issuer.(Default: null).
        """
        return pulumi.get(self, "sasl_oauthbearer_expected_issuer")

    @property
    @pulumi.getter(name="saslOauthbearerJwksEndpointUrl")
    def sasl_oauthbearer_jwks_endpoint_url(self) -> Optional[builtins.str]:
        """
        OIDC JWKS endpoint URL. By setting this the SASL SSL OAuth2/OIDC authentication is enabled. See also other options for SASL OAuth2/OIDC. (Default: null).
        """
        return pulumi.get(self, "sasl_oauthbearer_jwks_endpoint_url")

    @property
    @pulumi.getter(name="saslOauthbearerSubClaimName")
    def sasl_oauthbearer_sub_claim_name(self) -> Optional[builtins.str]:
        """
        Name of the scope from which to extract the subject claim from the JWT.(Default: sub).
        """
        return pulumi.get(self, "sasl_oauthbearer_sub_claim_name")

    @property
    @pulumi.getter(name="socketRequestMaxBytes")
    def socket_request_max_bytes(self) -> Optional[builtins.int]:
        """
        The maximum number of bytes in a socket request (Default: 104857600 bytes).
        """
        return pulumi.get(self, "socket_request_max_bytes")

    @property
    @pulumi.getter(name="transactionPartitionVerificationEnable")
    def transaction_partition_verification_enable(self) -> Optional[builtins.bool]:
        """
        Enable verification that checks that the partition has been added to the transaction before writing transactional records to the partition. (Default: true).
        """
        return pulumi.get(self, "transaction_partition_verification_enable")

    @property
    @pulumi.getter(name="transactionRemoveExpiredTransactionCleanupIntervalMs")
    def transaction_remove_expired_transaction_cleanup_interval_ms(self) -> Optional[builtins.int]:
        """
        The interval at which to remove transactions that have expired due to transactional.id.expiration.ms passing (Default: 3600000 ms (1 hour)). Example: `3600000`.
        """
        return pulumi.get(self, "transaction_remove_expired_transaction_cleanup_interval_ms")

    @property
    @pulumi.getter(name="transactionStateLogSegmentBytes")
    def transaction_state_log_segment_bytes(self) -> Optional[builtins.int]:
        """
        The transaction topic segment bytes should be kept relatively small in order to facilitate faster log compaction and cache loads (Default: 104857600 bytes (100 mebibytes)). Example: `104857600`.
        """
        return pulumi.get(self, "transaction_state_log_segment_bytes")


@pulumi.output_type
class GetKafkaKafkaUserConfigKafkaAuthenticationMethodsResult(dict):
    def __init__(__self__, *,
                 certificate: Optional[builtins.bool] = None,
                 sasl: Optional[builtins.bool] = None):
        """
        :param builtins.bool certificate: Enable certificate/SSL authentication. Default: `true`.
        :param builtins.bool sasl: Enable SASL authentication. Default: `false`.
        """
        if certificate is not None:
            pulumi.set(__self__, "certificate", certificate)
        if sasl is not None:
            pulumi.set(__self__, "sasl", sasl)

    @property
    @pulumi.getter
    def certificate(self) -> Optional[builtins.bool]:
        """
        Enable certificate/SSL authentication. Default: `true`.
        """
        return pulumi.get(self, "certificate")

    @property
    @pulumi.getter
    def sasl(self) -> Optional[builtins.bool]:
        """
        Enable SASL authentication. Default: `false`.
        """
        return pulumi.get(self, "sasl")


@pulumi.output_type
class GetKafkaKafkaUserConfigKafkaConnectConfigResult(dict):
    def __init__(__self__, *,
                 connector_client_config_override_policy: Optional[builtins.str] = None,
                 consumer_auto_offset_reset: Optional[builtins.str] = None,
                 consumer_fetch_max_bytes: Optional[builtins.int] = None,
                 consumer_isolation_level: Optional[builtins.str] = None,
                 consumer_max_partition_fetch_bytes: Optional[builtins.int] = None,
                 consumer_max_poll_interval_ms: Optional[builtins.int] = None,
                 consumer_max_poll_records: Optional[builtins.int] = None,
                 offset_flush_interval_ms: Optional[builtins.int] = None,
                 offset_flush_timeout_ms: Optional[builtins.int] = None,
                 producer_batch_size: Optional[builtins.int] = None,
                 producer_buffer_memory: Optional[builtins.int] = None,
                 producer_compression_type: Optional[builtins.str] = None,
                 producer_linger_ms: Optional[builtins.int] = None,
                 producer_max_request_size: Optional[builtins.int] = None,
                 scheduled_rebalance_max_delay_ms: Optional[builtins.int] = None,
                 session_timeout_ms: Optional[builtins.int] = None):
        """
        :param builtins.str connector_client_config_override_policy: Enum: `All`, `None`. Defines what client configurations can be overridden by the connector. Default is None.
        :param builtins.str consumer_auto_offset_reset: Enum: `earliest`, `latest`. What to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server. Default is earliest.
        :param builtins.int consumer_fetch_max_bytes: Records are fetched in batches by the consumer, and if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that the consumer can make progress. As such, this is not a absolute maximum. Example: `52428800`.
        :param builtins.str consumer_isolation_level: Enum: `read_committed`, `read_uncommitted`. Transaction read isolation level. read_uncommitted is the default, but read_committed can be used if consume-exactly-once behavior is desired.
        :param builtins.int consumer_max_partition_fetch_bytes: Records are fetched in batches by the consumer.If the first record batch in the first non-empty partition of the fetch is larger than this limit, the batch will still be returned to ensure that the consumer can make progress. Example: `1048576`.
        :param builtins.int consumer_max_poll_interval_ms: The maximum delay in milliseconds between invocations of poll() when using consumer group management (defaults to 300000).
        :param builtins.int consumer_max_poll_records: The maximum number of records returned in a single call to poll() (defaults to 500).
        :param builtins.int offset_flush_interval_ms: The interval at which to try committing offsets for tasks (defaults to 60000).
        :param builtins.int offset_flush_timeout_ms: Maximum number of milliseconds to wait for records to flush and partition offset data to be committed to offset storage before cancelling the process and restoring the offset data to be committed in a future attempt (defaults to 5000).
        :param builtins.int producer_batch_size: This setting gives the upper bound of the batch size to be sent. If there are fewer than this many bytes accumulated for this partition, the producer will `linger` for the linger.ms time waiting for more records to show up. A batch size of zero will disable batching entirely (defaults to 16384).
        :param builtins.int producer_buffer_memory: The total bytes of memory the producer can use to buffer records waiting to be sent to the broker (defaults to 33554432).
        :param builtins.str producer_compression_type: Enum: `gzip`, `lz4`, `none`, `snappy`, `zstd`. Specify the default compression type for producers. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `none` which is the default and equivalent to no compression.
        :param builtins.int producer_linger_ms: This setting gives the upper bound on the delay for batching: once there is batch.size worth of records for a partition it will be sent immediately regardless of this setting, however if there are fewer than this many bytes accumulated for this partition the producer will `linger` for the specified time waiting for more records to show up. Defaults to 0.
        :param builtins.int producer_max_request_size: This setting will limit the number of record batches the producer will send in a single request to avoid sending huge requests. Example: `1048576`.
        :param builtins.int scheduled_rebalance_max_delay_ms: The maximum delay that is scheduled in order to wait for the return of one or more departed workers before rebalancing and reassigning their connectors and tasks to the group. During this period the connectors and tasks of the departed workers remain unassigned. Defaults to 5 minutes.
        :param builtins.int session_timeout_ms: The timeout in milliseconds used to detect failures when using Kafka’s group management facilities (defaults to 10000).
        """
        if connector_client_config_override_policy is not None:
            pulumi.set(__self__, "connector_client_config_override_policy", connector_client_config_override_policy)
        if consumer_auto_offset_reset is not None:
            pulumi.set(__self__, "consumer_auto_offset_reset", consumer_auto_offset_reset)
        if consumer_fetch_max_bytes is not None:
            pulumi.set(__self__, "consumer_fetch_max_bytes", consumer_fetch_max_bytes)
        if consumer_isolation_level is not None:
            pulumi.set(__self__, "consumer_isolation_level", consumer_isolation_level)
        if consumer_max_partition_fetch_bytes is not None:
            pulumi.set(__self__, "consumer_max_partition_fetch_bytes", consumer_max_partition_fetch_bytes)
        if consumer_max_poll_interval_ms is not None:
            pulumi.set(__self__, "consumer_max_poll_interval_ms", consumer_max_poll_interval_ms)
        if consumer_max_poll_records is not None:
            pulumi.set(__self__, "consumer_max_poll_records", consumer_max_poll_records)
        if offset_flush_interval_ms is not None:
            pulumi.set(__self__, "offset_flush_interval_ms", offset_flush_interval_ms)
        if offset_flush_timeout_ms is not None:
            pulumi.set(__self__, "offset_flush_timeout_ms", offset_flush_timeout_ms)
        if producer_batch_size is not None:
            pulumi.set(__self__, "producer_batch_size", producer_batch_size)
        if producer_buffer_memory is not None:
            pulumi.set(__self__, "producer_buffer_memory", producer_buffer_memory)
        if producer_compression_type is not None:
            pulumi.set(__self__, "producer_compression_type", producer_compression_type)
        if producer_linger_ms is not None:
            pulumi.set(__self__, "producer_linger_ms", producer_linger_ms)
        if producer_max_request_size is not None:
            pulumi.set(__self__, "producer_max_request_size", producer_max_request_size)
        if scheduled_rebalance_max_delay_ms is not None:
            pulumi.set(__self__, "scheduled_rebalance_max_delay_ms", scheduled_rebalance_max_delay_ms)
        if session_timeout_ms is not None:
            pulumi.set(__self__, "session_timeout_ms", session_timeout_ms)

    @property
    @pulumi.getter(name="connectorClientConfigOverridePolicy")
    def connector_client_config_override_policy(self) -> Optional[builtins.str]:
        """
        Enum: `All`, `None`. Defines what client configurations can be overridden by the connector. Default is None.
        """
        return pulumi.get(self, "connector_client_config_override_policy")

    @property
    @pulumi.getter(name="consumerAutoOffsetReset")
    def consumer_auto_offset_reset(self) -> Optional[builtins.str]:
        """
        Enum: `earliest`, `latest`. What to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server. Default is earliest.
        """
        return pulumi.get(self, "consumer_auto_offset_reset")

    @property
    @pulumi.getter(name="consumerFetchMaxBytes")
    def consumer_fetch_max_bytes(self) -> Optional[builtins.int]:
        """
        Records are fetched in batches by the consumer, and if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that the consumer can make progress. As such, this is not a absolute maximum. Example: `52428800`.
        """
        return pulumi.get(self, "consumer_fetch_max_bytes")

    @property
    @pulumi.getter(name="consumerIsolationLevel")
    def consumer_isolation_level(self) -> Optional[builtins.str]:
        """
        Enum: `read_committed`, `read_uncommitted`. Transaction read isolation level. read_uncommitted is the default, but read_committed can be used if consume-exactly-once behavior is desired.
        """
        return pulumi.get(self, "consumer_isolation_level")

    @property
    @pulumi.getter(name="consumerMaxPartitionFetchBytes")
    def consumer_max_partition_fetch_bytes(self) -> Optional[builtins.int]:
        """
        Records are fetched in batches by the consumer.If the first record batch in the first non-empty partition of the fetch is larger than this limit, the batch will still be returned to ensure that the consumer can make progress. Example: `1048576`.
        """
        return pulumi.get(self, "consumer_max_partition_fetch_bytes")

    @property
    @pulumi.getter(name="consumerMaxPollIntervalMs")
    def consumer_max_poll_interval_ms(self) -> Optional[builtins.int]:
        """
        The maximum delay in milliseconds between invocations of poll() when using consumer group management (defaults to 300000).
        """
        return pulumi.get(self, "consumer_max_poll_interval_ms")

    @property
    @pulumi.getter(name="consumerMaxPollRecords")
    def consumer_max_poll_records(self) -> Optional[builtins.int]:
        """
        The maximum number of records returned in a single call to poll() (defaults to 500).
        """
        return pulumi.get(self, "consumer_max_poll_records")

    @property
    @pulumi.getter(name="offsetFlushIntervalMs")
    def offset_flush_interval_ms(self) -> Optional[builtins.int]:
        """
        The interval at which to try committing offsets for tasks (defaults to 60000).
        """
        return pulumi.get(self, "offset_flush_interval_ms")

    @property
    @pulumi.getter(name="offsetFlushTimeoutMs")
    def offset_flush_timeout_ms(self) -> Optional[builtins.int]:
        """
        Maximum number of milliseconds to wait for records to flush and partition offset data to be committed to offset storage before cancelling the process and restoring the offset data to be committed in a future attempt (defaults to 5000).
        """
        return pulumi.get(self, "offset_flush_timeout_ms")

    @property
    @pulumi.getter(name="producerBatchSize")
    def producer_batch_size(self) -> Optional[builtins.int]:
        """
        This setting gives the upper bound of the batch size to be sent. If there are fewer than this many bytes accumulated for this partition, the producer will `linger` for the linger.ms time waiting for more records to show up. A batch size of zero will disable batching entirely (defaults to 16384).
        """
        return pulumi.get(self, "producer_batch_size")

    @property
    @pulumi.getter(name="producerBufferMemory")
    def producer_buffer_memory(self) -> Optional[builtins.int]:
        """
        The total bytes of memory the producer can use to buffer records waiting to be sent to the broker (defaults to 33554432).
        """
        return pulumi.get(self, "producer_buffer_memory")

    @property
    @pulumi.getter(name="producerCompressionType")
    def producer_compression_type(self) -> Optional[builtins.str]:
        """
        Enum: `gzip`, `lz4`, `none`, `snappy`, `zstd`. Specify the default compression type for producers. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `none` which is the default and equivalent to no compression.
        """
        return pulumi.get(self, "producer_compression_type")

    @property
    @pulumi.getter(name="producerLingerMs")
    def producer_linger_ms(self) -> Optional[builtins.int]:
        """
        This setting gives the upper bound on the delay for batching: once there is batch.size worth of records for a partition it will be sent immediately regardless of this setting, however if there are fewer than this many bytes accumulated for this partition the producer will `linger` for the specified time waiting for more records to show up. Defaults to 0.
        """
        return pulumi.get(self, "producer_linger_ms")

    @property
    @pulumi.getter(name="producerMaxRequestSize")
    def producer_max_request_size(self) -> Optional[builtins.int]:
        """
        This setting will limit the number of record batches the producer will send in a single request to avoid sending huge requests. Example: `1048576`.
        """
        return pulumi.get(self, "producer_max_request_size")

    @property
    @pulumi.getter(name="scheduledRebalanceMaxDelayMs")
    def scheduled_rebalance_max_delay_ms(self) -> Optional[builtins.int]:
        """
        The maximum delay that is scheduled in order to wait for the return of one or more departed workers before rebalancing and reassigning their connectors and tasks to the group. During this period the connectors and tasks of the departed workers remain unassigned. Defaults to 5 minutes.
        """
        return pulumi.get(self, "scheduled_rebalance_max_delay_ms")

    @property
    @pulumi.getter(name="sessionTimeoutMs")
    def session_timeout_ms(self) -> Optional[builtins.int]:
        """
        The timeout in milliseconds used to detect failures when using Kafka’s group management facilities (defaults to 10000).
        """
        return pulumi.get(self, "session_timeout_ms")


@pulumi.output_type
class GetKafkaKafkaUserConfigKafkaConnectPluginVersionResult(dict):
    def __init__(__self__, *,
                 plugin_name: builtins.str,
                 version: builtins.str):
        """
        :param builtins.str plugin_name: The name of the plugin. Example: `debezium-connector`.
        :param builtins.str version: The version of the plugin. Example: `2.5.0`.
        """
        pulumi.set(__self__, "plugin_name", plugin_name)
        pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter(name="pluginName")
    def plugin_name(self) -> builtins.str:
        """
        The name of the plugin. Example: `debezium-connector`.
        """
        return pulumi.get(self, "plugin_name")

    @property
    @pulumi.getter
    def version(self) -> builtins.str:
        """
        The version of the plugin. Example: `2.5.0`.
        """
        return pulumi.get(self, "version")


@pulumi.output_type
class GetKafkaKafkaUserConfigKafkaConnectSecretProviderResult(dict):
    def __init__(__self__, *,
                 name: builtins.str,
                 aws: Optional['outputs.GetKafkaKafkaUserConfigKafkaConnectSecretProviderAwsResult'] = None,
                 vault: Optional['outputs.GetKafkaKafkaUserConfigKafkaConnectSecretProviderVaultResult'] = None):
        """
        :param builtins.str name: Name of the secret provider. Used to reference secrets in connector config.
        :param 'GetKafkaKafkaUserConfigKafkaConnectSecretProviderAwsArgs' aws: AWS secret provider configuration
        :param 'GetKafkaKafkaUserConfigKafkaConnectSecretProviderVaultArgs' vault: Vault secret provider configuration
        """
        pulumi.set(__self__, "name", name)
        if aws is not None:
            pulumi.set(__self__, "aws", aws)
        if vault is not None:
            pulumi.set(__self__, "vault", vault)

    @property
    @pulumi.getter
    def name(self) -> builtins.str:
        """
        Name of the secret provider. Used to reference secrets in connector config.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def aws(self) -> Optional['outputs.GetKafkaKafkaUserConfigKafkaConnectSecretProviderAwsResult']:
        """
        AWS secret provider configuration
        """
        return pulumi.get(self, "aws")

    @property
    @pulumi.getter
    def vault(self) -> Optional['outputs.GetKafkaKafkaUserConfigKafkaConnectSecretProviderVaultResult']:
        """
        Vault secret provider configuration
        """
        return pulumi.get(self, "vault")


@pulumi.output_type
class GetKafkaKafkaUserConfigKafkaConnectSecretProviderAwsResult(dict):
    def __init__(__self__, *,
                 auth_method: builtins.str,
                 region: builtins.str,
                 access_key: Optional[builtins.str] = None,
                 secret_key: Optional[builtins.str] = None):
        """
        :param builtins.str auth_method: Enum: `credentials`. Auth method of the vault secret provider.
        :param builtins.str region: Region used to lookup secrets with AWS SecretManager.
        :param builtins.str access_key: Access key used to authenticate with aws.
        :param builtins.str secret_key: Secret key used to authenticate with aws.
        """
        pulumi.set(__self__, "auth_method", auth_method)
        pulumi.set(__self__, "region", region)
        if access_key is not None:
            pulumi.set(__self__, "access_key", access_key)
        if secret_key is not None:
            pulumi.set(__self__, "secret_key", secret_key)

    @property
    @pulumi.getter(name="authMethod")
    def auth_method(self) -> builtins.str:
        """
        Enum: `credentials`. Auth method of the vault secret provider.
        """
        return pulumi.get(self, "auth_method")

    @property
    @pulumi.getter
    def region(self) -> builtins.str:
        """
        Region used to lookup secrets with AWS SecretManager.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="accessKey")
    def access_key(self) -> Optional[builtins.str]:
        """
        Access key used to authenticate with aws.
        """
        return pulumi.get(self, "access_key")

    @property
    @pulumi.getter(name="secretKey")
    def secret_key(self) -> Optional[builtins.str]:
        """
        Secret key used to authenticate with aws.
        """
        return pulumi.get(self, "secret_key")


@pulumi.output_type
class GetKafkaKafkaUserConfigKafkaConnectSecretProviderVaultResult(dict):
    def __init__(__self__, *,
                 address: builtins.str,
                 auth_method: builtins.str,
                 engine_version: Optional[builtins.int] = None,
                 prefix_path_depth: Optional[builtins.int] = None,
                 token: Optional[builtins.str] = None):
        """
        :param builtins.str address: Address of the Vault server.
        :param builtins.str auth_method: Enum: `token`. Auth method of the vault secret provider.
        :param builtins.int engine_version: Enum: `1`, `2`, and newer. KV Secrets Engine version of the Vault server instance.
        :param builtins.int prefix_path_depth: Prefix path depth of the secrets Engine. Default is 1. If the secrets engine path has more than one segment it has to be increased to the number of segments.
        :param builtins.str token: Token used to authenticate with vault and auth method `token`.
        """
        pulumi.set(__self__, "address", address)
        pulumi.set(__self__, "auth_method", auth_method)
        if engine_version is not None:
            pulumi.set(__self__, "engine_version", engine_version)
        if prefix_path_depth is not None:
            pulumi.set(__self__, "prefix_path_depth", prefix_path_depth)
        if token is not None:
            pulumi.set(__self__, "token", token)

    @property
    @pulumi.getter
    def address(self) -> builtins.str:
        """
        Address of the Vault server.
        """
        return pulumi.get(self, "address")

    @property
    @pulumi.getter(name="authMethod")
    def auth_method(self) -> builtins.str:
        """
        Enum: `token`. Auth method of the vault secret provider.
        """
        return pulumi.get(self, "auth_method")

    @property
    @pulumi.getter(name="engineVersion")
    def engine_version(self) -> Optional[builtins.int]:
        """
        Enum: `1`, `2`, and newer. KV Secrets Engine version of the Vault server instance.
        """
        return pulumi.get(self, "engine_version")

    @property
    @pulumi.getter(name="prefixPathDepth")
    def prefix_path_depth(self) -> Optional[builtins.int]:
        """
        Prefix path depth of the secrets Engine. Default is 1. If the secrets engine path has more than one segment it has to be increased to the number of segments.
        """
        return pulumi.get(self, "prefix_path_depth")

    @property
    @pulumi.getter
    def token(self) -> Optional[builtins.str]:
        """
        Token used to authenticate with vault and auth method `token`.
        """
        return pulumi.get(self, "token")


@pulumi.output_type
class GetKafkaKafkaUserConfigKafkaRestConfigResult(dict):
    def __init__(__self__, *,
                 consumer_enable_auto_commit: Optional[builtins.bool] = None,
                 consumer_idle_disconnect_timeout: Optional[builtins.int] = None,
                 consumer_request_max_bytes: Optional[builtins.int] = None,
                 consumer_request_timeout_ms: Optional[builtins.int] = None,
                 name_strategy: Optional[builtins.str] = None,
                 name_strategy_validation: Optional[builtins.bool] = None,
                 producer_acks: Optional[builtins.str] = None,
                 producer_compression_type: Optional[builtins.str] = None,
                 producer_linger_ms: Optional[builtins.int] = None,
                 producer_max_request_size: Optional[builtins.int] = None,
                 simpleconsumer_pool_size_max: Optional[builtins.int] = None):
        """
        :param builtins.bool consumer_enable_auto_commit: If true the consumer's offset will be periodically committed to Kafka in the background. Default: `true`.
        :param builtins.int consumer_idle_disconnect_timeout: Specifies the maximum duration (in seconds) a client can remain idle before it is deleted. If a consumer is inactive, it will exit the consumer group, and its state will be discarded. A value of 0 (default) indicates that the consumer will not be disconnected automatically due to inactivity. Default: `0`.
        :param builtins.int consumer_request_max_bytes: Maximum number of bytes in unencoded message keys and values by a single request. Default: `67108864`.
        :param builtins.int consumer_request_timeout_ms: Enum: `1000`, `15000`, `30000`. The maximum total time to wait for messages for a request if the maximum number of messages has not yet been reached. Default: `1000`.
        :param builtins.str name_strategy: Enum: `record_name`, `topic_name`, `topic_record_name`. Name strategy to use when selecting subject for storing schemas. Default: `topic_name`.
        :param builtins.bool name_strategy_validation: If true, validate that given schema is registered under expected subject name by the used name strategy when producing messages. Default: `true`.
        :param builtins.str producer_acks: Enum: `-1`, `0`, `1`, `all`. The number of acknowledgments the producer requires the leader to have received before considering a request complete. If set to `all` or `-1`, the leader will wait for the full set of in-sync replicas to acknowledge the record. Default: `1`.
        :param builtins.str producer_compression_type: Enum: `gzip`, `lz4`, `none`, `snappy`, `zstd`. Specify the default compression type for producers. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `none` which is the default and equivalent to no compression.
        :param builtins.int producer_linger_ms: Wait for up to the given delay to allow batching records together. Default: `0`.
        :param builtins.int producer_max_request_size: The maximum size of a request in bytes. Note that Kafka broker can also cap the record batch size. Default: `1048576`.
        :param builtins.int simpleconsumer_pool_size_max: Maximum number of SimpleConsumers that can be instantiated per broker. Default: `25`.
        """
        if consumer_enable_auto_commit is not None:
            pulumi.set(__self__, "consumer_enable_auto_commit", consumer_enable_auto_commit)
        if consumer_idle_disconnect_timeout is not None:
            pulumi.set(__self__, "consumer_idle_disconnect_timeout", consumer_idle_disconnect_timeout)
        if consumer_request_max_bytes is not None:
            pulumi.set(__self__, "consumer_request_max_bytes", consumer_request_max_bytes)
        if consumer_request_timeout_ms is not None:
            pulumi.set(__self__, "consumer_request_timeout_ms", consumer_request_timeout_ms)
        if name_strategy is not None:
            pulumi.set(__self__, "name_strategy", name_strategy)
        if name_strategy_validation is not None:
            pulumi.set(__self__, "name_strategy_validation", name_strategy_validation)
        if producer_acks is not None:
            pulumi.set(__self__, "producer_acks", producer_acks)
        if producer_compression_type is not None:
            pulumi.set(__self__, "producer_compression_type", producer_compression_type)
        if producer_linger_ms is not None:
            pulumi.set(__self__, "producer_linger_ms", producer_linger_ms)
        if producer_max_request_size is not None:
            pulumi.set(__self__, "producer_max_request_size", producer_max_request_size)
        if simpleconsumer_pool_size_max is not None:
            pulumi.set(__self__, "simpleconsumer_pool_size_max", simpleconsumer_pool_size_max)

    @property
    @pulumi.getter(name="consumerEnableAutoCommit")
    def consumer_enable_auto_commit(self) -> Optional[builtins.bool]:
        """
        If true the consumer's offset will be periodically committed to Kafka in the background. Default: `true`.
        """
        return pulumi.get(self, "consumer_enable_auto_commit")

    @property
    @pulumi.getter(name="consumerIdleDisconnectTimeout")
    def consumer_idle_disconnect_timeout(self) -> Optional[builtins.int]:
        """
        Specifies the maximum duration (in seconds) a client can remain idle before it is deleted. If a consumer is inactive, it will exit the consumer group, and its state will be discarded. A value of 0 (default) indicates that the consumer will not be disconnected automatically due to inactivity. Default: `0`.
        """
        return pulumi.get(self, "consumer_idle_disconnect_timeout")

    @property
    @pulumi.getter(name="consumerRequestMaxBytes")
    def consumer_request_max_bytes(self) -> Optional[builtins.int]:
        """
        Maximum number of bytes in unencoded message keys and values by a single request. Default: `67108864`.
        """
        return pulumi.get(self, "consumer_request_max_bytes")

    @property
    @pulumi.getter(name="consumerRequestTimeoutMs")
    def consumer_request_timeout_ms(self) -> Optional[builtins.int]:
        """
        Enum: `1000`, `15000`, `30000`. The maximum total time to wait for messages for a request if the maximum number of messages has not yet been reached. Default: `1000`.
        """
        return pulumi.get(self, "consumer_request_timeout_ms")

    @property
    @pulumi.getter(name="nameStrategy")
    def name_strategy(self) -> Optional[builtins.str]:
        """
        Enum: `record_name`, `topic_name`, `topic_record_name`. Name strategy to use when selecting subject for storing schemas. Default: `topic_name`.
        """
        return pulumi.get(self, "name_strategy")

    @property
    @pulumi.getter(name="nameStrategyValidation")
    def name_strategy_validation(self) -> Optional[builtins.bool]:
        """
        If true, validate that given schema is registered under expected subject name by the used name strategy when producing messages. Default: `true`.
        """
        return pulumi.get(self, "name_strategy_validation")

    @property
    @pulumi.getter(name="producerAcks")
    def producer_acks(self) -> Optional[builtins.str]:
        """
        Enum: `-1`, `0`, `1`, `all`. The number of acknowledgments the producer requires the leader to have received before considering a request complete. If set to `all` or `-1`, the leader will wait for the full set of in-sync replicas to acknowledge the record. Default: `1`.
        """
        return pulumi.get(self, "producer_acks")

    @property
    @pulumi.getter(name="producerCompressionType")
    def producer_compression_type(self) -> Optional[builtins.str]:
        """
        Enum: `gzip`, `lz4`, `none`, `snappy`, `zstd`. Specify the default compression type for producers. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `none` which is the default and equivalent to no compression.
        """
        return pulumi.get(self, "producer_compression_type")

    @property
    @pulumi.getter(name="producerLingerMs")
    def producer_linger_ms(self) -> Optional[builtins.int]:
        """
        Wait for up to the given delay to allow batching records together. Default: `0`.
        """
        return pulumi.get(self, "producer_linger_ms")

    @property
    @pulumi.getter(name="producerMaxRequestSize")
    def producer_max_request_size(self) -> Optional[builtins.int]:
        """
        The maximum size of a request in bytes. Note that Kafka broker can also cap the record batch size. Default: `1048576`.
        """
        return pulumi.get(self, "producer_max_request_size")

    @property
    @pulumi.getter(name="simpleconsumerPoolSizeMax")
    def simpleconsumer_pool_size_max(self) -> Optional[builtins.int]:
        """
        Maximum number of SimpleConsumers that can be instantiated per broker. Default: `25`.
        """
        return pulumi.get(self, "simpleconsumer_pool_size_max")


@pulumi.output_type
class GetKafkaKafkaUserConfigKafkaSaslMechanismsResult(dict):
    def __init__(__self__, *,
                 plain: Optional[builtins.bool] = None,
                 scram_sha256: Optional[builtins.bool] = None,
                 scram_sha512: Optional[builtins.bool] = None):
        """
        :param builtins.bool plain: Enable PLAIN mechanism. Default: `true`.
        :param builtins.bool scram_sha256: Enable SCRAM-SHA-256 mechanism. Default: `true`.
        :param builtins.bool scram_sha512: Enable SCRAM-SHA-512 mechanism. Default: `true`.
        """
        if plain is not None:
            pulumi.set(__self__, "plain", plain)
        if scram_sha256 is not None:
            pulumi.set(__self__, "scram_sha256", scram_sha256)
        if scram_sha512 is not None:
            pulumi.set(__self__, "scram_sha512", scram_sha512)

    @property
    @pulumi.getter
    def plain(self) -> Optional[builtins.bool]:
        """
        Enable PLAIN mechanism. Default: `true`.
        """
        return pulumi.get(self, "plain")

    @property
    @pulumi.getter(name="scramSha256")
    def scram_sha256(self) -> Optional[builtins.bool]:
        """
        Enable SCRAM-SHA-256 mechanism. Default: `true`.
        """
        return pulumi.get(self, "scram_sha256")

    @property
    @pulumi.getter(name="scramSha512")
    def scram_sha512(self) -> Optional[builtins.bool]:
        """
        Enable SCRAM-SHA-512 mechanism. Default: `true`.
        """
        return pulumi.get(self, "scram_sha512")


@pulumi.output_type
class GetKafkaKafkaUserConfigPrivateAccessResult(dict):
    def __init__(__self__, *,
                 kafka: Optional[builtins.bool] = None,
                 kafka_connect: Optional[builtins.bool] = None,
                 kafka_rest: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None,
                 schema_registry: Optional[builtins.bool] = None):
        """
        :param builtins.bool kafka: Allow clients to connect to kafka with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool kafka_connect: Allow clients to connect to kafka_connect with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool kafka_rest: Allow clients to connect to kafka_rest with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool schema_registry: Allow clients to connect to schema_registry with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if kafka is not None:
            pulumi.set(__self__, "kafka", kafka)
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)
        if kafka_rest is not None:
            pulumi.set(__self__, "kafka_rest", kafka_rest)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if schema_registry is not None:
            pulumi.set(__self__, "schema_registry", schema_registry)

    @property
    @pulumi.getter
    def kafka(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to kafka with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "kafka")

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to kafka_connect with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "kafka_connect")

    @property
    @pulumi.getter(name="kafkaRest")
    def kafka_rest(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to kafka_rest with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "kafka_rest")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter(name="schemaRegistry")
    def schema_registry(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to schema_registry with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "schema_registry")


@pulumi.output_type
class GetKafkaKafkaUserConfigPrivatelinkAccessResult(dict):
    def __init__(__self__, *,
                 jolokia: Optional[builtins.bool] = None,
                 kafka: Optional[builtins.bool] = None,
                 kafka_connect: Optional[builtins.bool] = None,
                 kafka_rest: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None,
                 schema_registry: Optional[builtins.bool] = None):
        """
        :param builtins.bool jolokia: Enable jolokia.
        :param builtins.bool kafka: Enable kafka.
        :param builtins.bool kafka_connect: Enable kafka_connect.
        :param builtins.bool kafka_rest: Enable kafka_rest.
        :param builtins.bool prometheus: Enable prometheus.
        :param builtins.bool schema_registry: Enable schema_registry.
        """
        if jolokia is not None:
            pulumi.set(__self__, "jolokia", jolokia)
        if kafka is not None:
            pulumi.set(__self__, "kafka", kafka)
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)
        if kafka_rest is not None:
            pulumi.set(__self__, "kafka_rest", kafka_rest)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if schema_registry is not None:
            pulumi.set(__self__, "schema_registry", schema_registry)

    @property
    @pulumi.getter
    def jolokia(self) -> Optional[builtins.bool]:
        """
        Enable jolokia.
        """
        return pulumi.get(self, "jolokia")

    @property
    @pulumi.getter
    def kafka(self) -> Optional[builtins.bool]:
        """
        Enable kafka.
        """
        return pulumi.get(self, "kafka")

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional[builtins.bool]:
        """
        Enable kafka_connect.
        """
        return pulumi.get(self, "kafka_connect")

    @property
    @pulumi.getter(name="kafkaRest")
    def kafka_rest(self) -> Optional[builtins.bool]:
        """
        Enable kafka_rest.
        """
        return pulumi.get(self, "kafka_rest")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter(name="schemaRegistry")
    def schema_registry(self) -> Optional[builtins.bool]:
        """
        Enable schema_registry.
        """
        return pulumi.get(self, "schema_registry")


@pulumi.output_type
class GetKafkaKafkaUserConfigPublicAccessResult(dict):
    def __init__(__self__, *,
                 kafka: Optional[builtins.bool] = None,
                 kafka_connect: Optional[builtins.bool] = None,
                 kafka_rest: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None,
                 schema_registry: Optional[builtins.bool] = None):
        """
        :param builtins.bool kafka: Allow clients to connect to kafka from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool kafka_connect: Allow clients to connect to kafka_connect from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool kafka_rest: Allow clients to connect to kafka_rest from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool schema_registry: Allow clients to connect to schema_registry from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if kafka is not None:
            pulumi.set(__self__, "kafka", kafka)
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)
        if kafka_rest is not None:
            pulumi.set(__self__, "kafka_rest", kafka_rest)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if schema_registry is not None:
            pulumi.set(__self__, "schema_registry", schema_registry)

    @property
    @pulumi.getter
    def kafka(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to kafka from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "kafka")

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to kafka_connect from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "kafka_connect")

    @property
    @pulumi.getter(name="kafkaRest")
    def kafka_rest(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to kafka_rest from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "kafka_rest")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter(name="schemaRegistry")
    def schema_registry(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to schema_registry from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "schema_registry")


@pulumi.output_type
class GetKafkaKafkaUserConfigSchemaRegistryConfigResult(dict):
    def __init__(__self__, *,
                 leader_eligibility: Optional[builtins.bool] = None,
                 retriable_errors_silenced: Optional[builtins.bool] = None,
                 schema_reader_strict_mode: Optional[builtins.bool] = None,
                 topic_name: Optional[builtins.str] = None):
        """
        :param builtins.bool leader_eligibility: If true, Karapace / Schema Registry on the service nodes can participate in leader election. It might be needed to disable this when the schemas topic is replicated to a secondary cluster and Karapace / Schema Registry there must not participate in leader election. Defaults to `true`.
        :param builtins.bool retriable_errors_silenced: If enabled, kafka errors which can be retried or custom errors specified for the service will not be raised, instead, a warning log is emitted. This will denoise issue tracking systems, i.e. sentry. Defaults to `true`.
        :param builtins.bool schema_reader_strict_mode: If enabled, causes the Karapace schema-registry service to shutdown when there are invalid schema records in the `_schemas` topic. Defaults to `false`.
        :param builtins.str topic_name: The durable single partition topic that acts as the durable log for the data. This topic must be compacted to avoid losing data due to retention policy. Please note that changing this configuration in an existing Schema Registry / Karapace setup leads to previous schemas being inaccessible, data encoded with them potentially unreadable and schema ID sequence put out of order. It's only possible to do the switch while Schema Registry / Karapace is disabled. Defaults to `_schemas`.
        """
        if leader_eligibility is not None:
            pulumi.set(__self__, "leader_eligibility", leader_eligibility)
        if retriable_errors_silenced is not None:
            pulumi.set(__self__, "retriable_errors_silenced", retriable_errors_silenced)
        if schema_reader_strict_mode is not None:
            pulumi.set(__self__, "schema_reader_strict_mode", schema_reader_strict_mode)
        if topic_name is not None:
            pulumi.set(__self__, "topic_name", topic_name)

    @property
    @pulumi.getter(name="leaderEligibility")
    def leader_eligibility(self) -> Optional[builtins.bool]:
        """
        If true, Karapace / Schema Registry on the service nodes can participate in leader election. It might be needed to disable this when the schemas topic is replicated to a secondary cluster and Karapace / Schema Registry there must not participate in leader election. Defaults to `true`.
        """
        return pulumi.get(self, "leader_eligibility")

    @property
    @pulumi.getter(name="retriableErrorsSilenced")
    def retriable_errors_silenced(self) -> Optional[builtins.bool]:
        """
        If enabled, kafka errors which can be retried or custom errors specified for the service will not be raised, instead, a warning log is emitted. This will denoise issue tracking systems, i.e. sentry. Defaults to `true`.
        """
        return pulumi.get(self, "retriable_errors_silenced")

    @property
    @pulumi.getter(name="schemaReaderStrictMode")
    def schema_reader_strict_mode(self) -> Optional[builtins.bool]:
        """
        If enabled, causes the Karapace schema-registry service to shutdown when there are invalid schema records in the `_schemas` topic. Defaults to `false`.
        """
        return pulumi.get(self, "schema_reader_strict_mode")

    @property
    @pulumi.getter(name="topicName")
    def topic_name(self) -> Optional[builtins.str]:
        """
        The durable single partition topic that acts as the durable log for the data. This topic must be compacted to avoid losing data due to retention policy. Please note that changing this configuration in an existing Schema Registry / Karapace setup leads to previous schemas being inaccessible, data encoded with them potentially unreadable and schema ID sequence put out of order. It's only possible to do the switch while Schema Registry / Karapace is disabled. Defaults to `_schemas`.
        """
        return pulumi.get(self, "topic_name")


@pulumi.output_type
class GetKafkaKafkaUserConfigSingleZoneResult(dict):
    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None):
        """
        :param builtins.bool enabled: Whether to allocate nodes on the same Availability Zone or spread across zones available. By default service nodes are spread across different AZs. The single AZ support is best-effort and may temporarily allocate nodes in different AZs e.g. in case of capacity limitations in one AZ.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[builtins.bool]:
        """
        Whether to allocate nodes on the same Availability Zone or spread across zones available. By default service nodes are spread across different AZs. The single AZ support is best-effort and may temporarily allocate nodes in different AZs e.g. in case of capacity limitations in one AZ.
        """
        return pulumi.get(self, "enabled")


@pulumi.output_type
class GetKafkaKafkaUserConfigTieredStorageResult(dict):
    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None,
                 local_cache: Optional['outputs.GetKafkaKafkaUserConfigTieredStorageLocalCacheResult'] = None):
        """
        :param builtins.bool enabled: Whether to enable the tiered storage functionality.
        :param 'GetKafkaKafkaUserConfigTieredStorageLocalCacheArgs' local_cache: Local cache configuration
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if local_cache is not None:
            pulumi.set(__self__, "local_cache", local_cache)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[builtins.bool]:
        """
        Whether to enable the tiered storage functionality.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="localCache")
    @_utilities.deprecated("""This property is deprecated.""")
    def local_cache(self) -> Optional['outputs.GetKafkaKafkaUserConfigTieredStorageLocalCacheResult']:
        """
        Local cache configuration
        """
        return pulumi.get(self, "local_cache")


@pulumi.output_type
class GetKafkaKafkaUserConfigTieredStorageLocalCacheResult(dict):
    def __init__(__self__, *,
                 size: Optional[builtins.int] = None):
        """
        :param builtins.int size: Local cache size in bytes. Example: `1073741824`.
        """
        if size is not None:
            pulumi.set(__self__, "size", size)

    @property
    @pulumi.getter
    @_utilities.deprecated("""This property is deprecated.""")
    def size(self) -> Optional[builtins.int]:
        """
        Local cache size in bytes. Example: `1073741824`.
        """
        return pulumi.get(self, "size")


@pulumi.output_type
class GetKafkaMirrorMakerComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetKafkaMirrorMakerKafkaMirrormakerUserConfigResult(dict):
    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetKafkaMirrorMakerKafkaMirrormakerUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 kafka_mirrormaker: Optional['outputs.GetKafkaMirrorMakerKafkaMirrormakerUserConfigKafkaMirrormakerResult'] = None,
                 service_log: Optional[builtins.bool] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param Sequence['GetKafkaMirrorMakerKafkaMirrormakerUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'GetKafkaMirrorMakerKafkaMirrormakerUserConfigKafkaMirrormakerArgs' kafka_mirrormaker: Kafka MirrorMaker configuration values
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if kafka_mirrormaker is not None:
            pulumi.set(__self__, "kafka_mirrormaker", kafka_mirrormaker)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    @_utilities.deprecated("""This property is deprecated.""")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetKafkaMirrorMakerKafkaMirrormakerUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="kafkaMirrormaker")
    def kafka_mirrormaker(self) -> Optional['outputs.GetKafkaMirrorMakerKafkaMirrormakerUserConfigKafkaMirrormakerResult']:
        """
        Kafka MirrorMaker configuration values
        """
        return pulumi.get(self, "kafka_mirrormaker")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class GetKafkaMirrorMakerKafkaMirrormakerUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetKafkaMirrorMakerKafkaMirrormakerUserConfigKafkaMirrormakerResult(dict):
    def __init__(__self__, *,
                 admin_timeout_ms: Optional[builtins.int] = None,
                 emit_checkpoints_enabled: Optional[builtins.bool] = None,
                 emit_checkpoints_interval_seconds: Optional[builtins.int] = None,
                 groups: Optional[builtins.str] = None,
                 groups_exclude: Optional[builtins.str] = None,
                 offset_lag_max: Optional[builtins.int] = None,
                 refresh_groups_enabled: Optional[builtins.bool] = None,
                 refresh_groups_interval_seconds: Optional[builtins.int] = None,
                 refresh_topics_enabled: Optional[builtins.bool] = None,
                 refresh_topics_interval_seconds: Optional[builtins.int] = None,
                 sync_group_offsets_enabled: Optional[builtins.bool] = None,
                 sync_group_offsets_interval_seconds: Optional[builtins.int] = None,
                 sync_topic_configs_enabled: Optional[builtins.bool] = None,
                 tasks_max_per_cpu: Optional[builtins.int] = None):
        """
        :param builtins.int admin_timeout_ms: Timeout for administrative tasks, e.g. detecting new topics, loading of consumer group and offsets. Defaults to 60000 milliseconds (1 minute).
        :param builtins.bool emit_checkpoints_enabled: Whether to emit consumer group offset checkpoints to target cluster periodically (default: true).
        :param builtins.int emit_checkpoints_interval_seconds: Frequency at which consumer group offset checkpoints are emitted (default: 60, every minute). Example: `60`.
        :param builtins.str groups: Consumer groups to replicate. Supports comma-separated group IDs and regexes. Example: `.*`.
        :param builtins.str groups_exclude: Exclude groups. Supports comma-separated group IDs and regexes. Excludes take precedence over includes. Example: `console-consumer-.*,connect-.*,__.*`.
        :param builtins.int offset_lag_max: How out-of-sync a remote partition can be before it is resynced. Example: `100`.
        :param builtins.bool refresh_groups_enabled: Whether to periodically check for new consumer groups. Defaults to `true`.
        :param builtins.int refresh_groups_interval_seconds: Frequency of consumer group refresh in seconds. Defaults to 600 seconds (10 minutes).
        :param builtins.bool refresh_topics_enabled: Whether to periodically check for new topics and partitions. Defaults to `true`.
        :param builtins.int refresh_topics_interval_seconds: Frequency of topic and partitions refresh in seconds. Defaults to 600 seconds (10 minutes).
        :param builtins.bool sync_group_offsets_enabled: Whether to periodically write the translated offsets of replicated consumer groups (in the source cluster) to __consumer_offsets topic in target cluster, as long as no active consumers in that group are connected to the target cluster.
        :param builtins.int sync_group_offsets_interval_seconds: Frequency at which consumer group offsets are synced (default: 60, every minute). Example: `60`.
        :param builtins.bool sync_topic_configs_enabled: Whether to periodically configure remote topics to match their corresponding upstream topics.
        :param builtins.int tasks_max_per_cpu: `tasks.max` is set to this multiplied by the number of CPUs in the service. Default: `1`.
        """
        if admin_timeout_ms is not None:
            pulumi.set(__self__, "admin_timeout_ms", admin_timeout_ms)
        if emit_checkpoints_enabled is not None:
            pulumi.set(__self__, "emit_checkpoints_enabled", emit_checkpoints_enabled)
        if emit_checkpoints_interval_seconds is not None:
            pulumi.set(__self__, "emit_checkpoints_interval_seconds", emit_checkpoints_interval_seconds)
        if groups is not None:
            pulumi.set(__self__, "groups", groups)
        if groups_exclude is not None:
            pulumi.set(__self__, "groups_exclude", groups_exclude)
        if offset_lag_max is not None:
            pulumi.set(__self__, "offset_lag_max", offset_lag_max)
        if refresh_groups_enabled is not None:
            pulumi.set(__self__, "refresh_groups_enabled", refresh_groups_enabled)
        if refresh_groups_interval_seconds is not None:
            pulumi.set(__self__, "refresh_groups_interval_seconds", refresh_groups_interval_seconds)
        if refresh_topics_enabled is not None:
            pulumi.set(__self__, "refresh_topics_enabled", refresh_topics_enabled)
        if refresh_topics_interval_seconds is not None:
            pulumi.set(__self__, "refresh_topics_interval_seconds", refresh_topics_interval_seconds)
        if sync_group_offsets_enabled is not None:
            pulumi.set(__self__, "sync_group_offsets_enabled", sync_group_offsets_enabled)
        if sync_group_offsets_interval_seconds is not None:
            pulumi.set(__self__, "sync_group_offsets_interval_seconds", sync_group_offsets_interval_seconds)
        if sync_topic_configs_enabled is not None:
            pulumi.set(__self__, "sync_topic_configs_enabled", sync_topic_configs_enabled)
        if tasks_max_per_cpu is not None:
            pulumi.set(__self__, "tasks_max_per_cpu", tasks_max_per_cpu)

    @property
    @pulumi.getter(name="adminTimeoutMs")
    def admin_timeout_ms(self) -> Optional[builtins.int]:
        """
        Timeout for administrative tasks, e.g. detecting new topics, loading of consumer group and offsets. Defaults to 60000 milliseconds (1 minute).
        """
        return pulumi.get(self, "admin_timeout_ms")

    @property
    @pulumi.getter(name="emitCheckpointsEnabled")
    def emit_checkpoints_enabled(self) -> Optional[builtins.bool]:
        """
        Whether to emit consumer group offset checkpoints to target cluster periodically (default: true).
        """
        return pulumi.get(self, "emit_checkpoints_enabled")

    @property
    @pulumi.getter(name="emitCheckpointsIntervalSeconds")
    def emit_checkpoints_interval_seconds(self) -> Optional[builtins.int]:
        """
        Frequency at which consumer group offset checkpoints are emitted (default: 60, every minute). Example: `60`.
        """
        return pulumi.get(self, "emit_checkpoints_interval_seconds")

    @property
    @pulumi.getter
    def groups(self) -> Optional[builtins.str]:
        """
        Consumer groups to replicate. Supports comma-separated group IDs and regexes. Example: `.*`.
        """
        return pulumi.get(self, "groups")

    @property
    @pulumi.getter(name="groupsExclude")
    def groups_exclude(self) -> Optional[builtins.str]:
        """
        Exclude groups. Supports comma-separated group IDs and regexes. Excludes take precedence over includes. Example: `console-consumer-.*,connect-.*,__.*`.
        """
        return pulumi.get(self, "groups_exclude")

    @property
    @pulumi.getter(name="offsetLagMax")
    def offset_lag_max(self) -> Optional[builtins.int]:
        """
        How out-of-sync a remote partition can be before it is resynced. Example: `100`.
        """
        return pulumi.get(self, "offset_lag_max")

    @property
    @pulumi.getter(name="refreshGroupsEnabled")
    def refresh_groups_enabled(self) -> Optional[builtins.bool]:
        """
        Whether to periodically check for new consumer groups. Defaults to `true`.
        """
        return pulumi.get(self, "refresh_groups_enabled")

    @property
    @pulumi.getter(name="refreshGroupsIntervalSeconds")
    def refresh_groups_interval_seconds(self) -> Optional[builtins.int]:
        """
        Frequency of consumer group refresh in seconds. Defaults to 600 seconds (10 minutes).
        """
        return pulumi.get(self, "refresh_groups_interval_seconds")

    @property
    @pulumi.getter(name="refreshTopicsEnabled")
    def refresh_topics_enabled(self) -> Optional[builtins.bool]:
        """
        Whether to periodically check for new topics and partitions. Defaults to `true`.
        """
        return pulumi.get(self, "refresh_topics_enabled")

    @property
    @pulumi.getter(name="refreshTopicsIntervalSeconds")
    def refresh_topics_interval_seconds(self) -> Optional[builtins.int]:
        """
        Frequency of topic and partitions refresh in seconds. Defaults to 600 seconds (10 minutes).
        """
        return pulumi.get(self, "refresh_topics_interval_seconds")

    @property
    @pulumi.getter(name="syncGroupOffsetsEnabled")
    def sync_group_offsets_enabled(self) -> Optional[builtins.bool]:
        """
        Whether to periodically write the translated offsets of replicated consumer groups (in the source cluster) to __consumer_offsets topic in target cluster, as long as no active consumers in that group are connected to the target cluster.
        """
        return pulumi.get(self, "sync_group_offsets_enabled")

    @property
    @pulumi.getter(name="syncGroupOffsetsIntervalSeconds")
    def sync_group_offsets_interval_seconds(self) -> Optional[builtins.int]:
        """
        Frequency at which consumer group offsets are synced (default: 60, every minute). Example: `60`.
        """
        return pulumi.get(self, "sync_group_offsets_interval_seconds")

    @property
    @pulumi.getter(name="syncTopicConfigsEnabled")
    def sync_topic_configs_enabled(self) -> Optional[builtins.bool]:
        """
        Whether to periodically configure remote topics to match their corresponding upstream topics.
        """
        return pulumi.get(self, "sync_topic_configs_enabled")

    @property
    @pulumi.getter(name="tasksMaxPerCpu")
    def tasks_max_per_cpu(self) -> Optional[builtins.int]:
        """
        `tasks.max` is set to this multiplied by the number of CPUs in the service. Default: `1`.
        """
        return pulumi.get(self, "tasks_max_per_cpu")


@pulumi.output_type
class GetKafkaMirrorMakerServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetKafkaMirrorMakerTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetKafkaMirrorMakerTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetKafkaServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetKafkaTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetKafkaTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetKafkaTopicConfigResult(dict):
    def __init__(__self__, *,
                 cleanup_policy: Optional[builtins.str] = None,
                 compression_type: Optional[builtins.str] = None,
                 delete_retention_ms: Optional[builtins.str] = None,
                 file_delete_delay_ms: Optional[builtins.str] = None,
                 flush_messages: Optional[builtins.str] = None,
                 flush_ms: Optional[builtins.str] = None,
                 index_interval_bytes: Optional[builtins.str] = None,
                 local_retention_bytes: Optional[builtins.str] = None,
                 local_retention_ms: Optional[builtins.str] = None,
                 max_compaction_lag_ms: Optional[builtins.str] = None,
                 max_message_bytes: Optional[builtins.str] = None,
                 message_downconversion_enable: Optional[builtins.bool] = None,
                 message_format_version: Optional[builtins.str] = None,
                 message_timestamp_difference_max_ms: Optional[builtins.str] = None,
                 message_timestamp_type: Optional[builtins.str] = None,
                 min_cleanable_dirty_ratio: Optional[builtins.float] = None,
                 min_compaction_lag_ms: Optional[builtins.str] = None,
                 min_insync_replicas: Optional[builtins.str] = None,
                 preallocate: Optional[builtins.bool] = None,
                 remote_storage_enable: Optional[builtins.bool] = None,
                 retention_bytes: Optional[builtins.str] = None,
                 retention_ms: Optional[builtins.str] = None,
                 segment_bytes: Optional[builtins.str] = None,
                 segment_index_bytes: Optional[builtins.str] = None,
                 segment_jitter_ms: Optional[builtins.str] = None,
                 segment_ms: Optional[builtins.str] = None,
                 unclean_leader_election_enable: Optional[builtins.bool] = None):
        """
        :param builtins.str cleanup_policy: The retention policy to use on old segments. Possible values include 'delete', 'compact', or a comma-separated list of them. The default policy ('delete') will discard old segments when their retention time or size limit has been reached. The 'compact' setting will enable log compaction on the topic. The possible values are `compact`, `compact,delete` and `delete`.
        :param builtins.str compression_type: Specify the final compression type for a given topic. This configuration accepts the standard compression codecs ('gzip', 'snappy', 'lz4', 'zstd'). It additionally accepts 'uncompressed' which is equivalent to no compression; and 'producer' which means retain the original compression codec set by the producer. The possible values are `gzip`, `lz4`, `producer`, `snappy`, `uncompressed` and `zstd`.
        :param builtins.str delete_retention_ms: The amount of time to retain delete tombstone markers for log compacted topics. This setting also gives a bound on the time in which a consumer must complete a read if they begin from offset 0 to ensure that they get a valid snapshot of the final stage (otherwise delete tombstones may be collected before they complete their scan).
        :param builtins.str file_delete_delay_ms: The time to wait before deleting a file from the filesystem.
        :param builtins.str flush_messages: This setting allows specifying an interval at which we will force an fsync of data written to the log. For example if this was set to 1 we would fsync after every message; if it were 5 we would fsync after every five messages. In general we recommend you not set this and use replication for durability and allow the operating system's background flush capabilities as it is more efficient.
        :param builtins.str flush_ms: This setting allows specifying a time interval at which we will force an fsync of data written to the log. For example if this was set to 1000 we would fsync after 1000 ms had passed. In general we recommend you not set this and use replication for durability and allow the operating system's background flush capabilities as it is more efficient.
        :param builtins.str index_interval_bytes: This setting controls how frequently Kafka adds an index entry to its offset index. The default setting ensures that we index a message roughly every 4096 bytes. More indexing allows reads to jump closer to the exact position in the log but makes the index larger. You probably don't need to change this.
        :param builtins.str local_retention_bytes: This configuration controls the maximum bytes tiered storage will retain segment files locally before it will discard old log segments to free up space. If set to -2, the limit is equal to overall retention time. If set to -1, no limit is applied but it's possible only if overall retention is also -1.
        :param builtins.str local_retention_ms: This configuration controls the maximum time tiered storage will retain segment files locally before it will discard old log segments to free up space. If set to -2, the time limit is equal to overall retention time. If set to -1, no time limit is applied but it's possible only if overall retention is also -1.
        :param builtins.str max_compaction_lag_ms: The maximum time a message will remain ineligible for compaction in the log. Only applicable for logs that are being compacted.
        :param builtins.str max_message_bytes: The largest record batch size allowed by Kafka (after compression if compression is enabled). If this is increased and there are consumers older than 0.10.2, the consumers' fetch size must also be increased so that the they can fetch record batches this large. In the latest message format version, records are always grouped into batches for efficiency. In previous message format versions, uncompressed records are not grouped into batches and this limit only applies to a single record in that case.
        :param builtins.bool message_downconversion_enable: This configuration controls whether down-conversion of message formats is enabled to satisfy consume requests. When set to false, broker will not perform down-conversion for consumers expecting an older message format. The broker responds with UNSUPPORTED_VERSION error for consume requests from such older clients. This configuration does not apply to any message format conversion that might be required for replication to followers.
        :param builtins.str message_format_version: Specify the message format version the broker will use to append messages to the logs. The value should be a valid ApiVersion. Some examples are: 0.8.2, 0.9.0.0, 0.10.0, check ApiVersion for more details. By setting a particular message format version, the user is certifying that all the existing messages on disk are smaller or equal than the specified version. Setting this value incorrectly will cause consumers with older versions to break as they will receive messages with a format that they don't understand. The possible values are `0.10.0`, `0.10.0-IV0`, `0.10.0-IV1`, `0.10.1`, `0.10.1-IV0`, `0.10.1-IV1`, `0.10.1-IV2`, `0.10.2`, `0.10.2-IV0`, `0.11.0`, `0.11.0-IV0`, `0.11.0-IV1`, `0.11.0-IV2`, `0.8.0`, `0.8.1`, `0.8.2`, `0.9.0`, `1.0`, `1.0-IV0`, `1.1`, `1.1-IV0`, `2.0`, `2.0-IV0`, `2.0-IV1`, `2.1`, `2.1-IV0`, `2.1-IV1`, `2.1-IV2`, `2.2`, `2.2-IV0`, `2.2-IV1`, `2.3`, `2.3-IV0`, `2.3-IV1`, `2.4`, `2.4-IV0`, `2.4-IV1`, `2.5`, `2.5-IV0`, `2.6`, `2.6-IV0`, `2.7`, `2.7-IV0`, `2.7-IV1`, `2.7-IV2`, `2.8`, `2.8-IV0`, `2.8-IV1`, `3.0`, `3.0-IV0`, `3.0-IV1`, `3.1`, `3.1-IV0`, `3.2`, `3.2-IV0`, `3.3`, `3.3-IV0`, `3.3-IV1`, `3.3-IV2`, `3.3-IV3`, `3.4`, `3.4-IV0`, `3.5`, `3.5-IV0`, `3.5-IV1`, `3.5-IV2`, `3.6`, `3.6-IV0`, `3.6-IV1`, `3.6-IV2`, `3.7`, `3.7-IV0`, `3.7-IV1`, `3.7-IV2`, `3.7-IV3`, `3.7-IV4`, `3.8`, `3.8-IV0`, `3.9`, `3.9-IV0`, `3.9-IV1`, `4.0`, `4.0-IV0`, `4.1` and `4.1-IV0`.
        :param builtins.str message_timestamp_difference_max_ms: The maximum difference allowed between the timestamp when a broker receives a message and the timestamp specified in the message. If message.timestamp.type=CreateTime, a message will be rejected if the difference in timestamp exceeds this threshold. This configuration is ignored if message.timestamp.type=LogAppendTime.
        :param builtins.str message_timestamp_type: Define whether the timestamp in the message is message create time or log append time. The possible values are `CreateTime` and `LogAppendTime`.
        :param builtins.float min_cleanable_dirty_ratio: This configuration controls how frequently the log compactor will attempt to clean the log (assuming log compaction is enabled). By default we will avoid cleaning a log where more than 50% of the log has been compacted. This ratio bounds the maximum space wasted in the log by duplicates (at 50% at most 50% of the log could be duplicates). A higher ratio will mean fewer, more efficient cleanings but will mean more wasted space in the log. If the max.compaction.lag.ms or the min.compaction.lag.ms configurations are also specified, then the log compactor considers the log to be eligible for compaction as soon as either: (i) the dirty ratio threshold has been met and the log has had dirty (uncompacted) records for at least the min.compaction.lag.ms duration, or (ii) if the log has had dirty (uncompacted) records for at most the max.compaction.lag.ms period.
        :param builtins.str min_compaction_lag_ms: The minimum time a message will remain uncompacted in the log. Only applicable for logs that are being compacted.
        :param builtins.str min_insync_replicas: When a producer sets acks to 'all' (or '-1'), this configuration specifies the minimum number of replicas that must acknowledge a write for the write to be considered successful. If this minimum cannot be met, then the producer will raise an exception (either NotEnoughReplicas or NotEnoughReplicasAfterAppend). When used together, min.insync.replicas and acks allow you to enforce greater durability guarantees. A typical scenario would be to create a topic with a replication factor of 3, set min.insync.replicas to 2, and produce with acks of 'all'. This will ensure that the producer raises an exception if a majority of replicas do not receive a write.
        :param builtins.bool preallocate: True if we should preallocate the file on disk when creating a new log segment.
        :param builtins.bool remote_storage_enable: Indicates whether tiered storage should be enabled.
        :param builtins.str retention_bytes: This configuration controls the maximum size a partition (which consists of log segments) can grow to before we will discard old log segments to free up space if we are using the 'delete' retention policy. By default there is no size limit only a time limit. Since this limit is enforced at the partition level, multiply it by the number of partitions to compute the topic retention in bytes.
        :param builtins.str retention_ms: This configuration controls the maximum time we will retain a log before we will discard old log segments to free up space if we are using the 'delete' retention policy. This represents an SLA on how soon consumers must read their data. If set to -1, no time limit is applied.
        :param builtins.str segment_bytes: This configuration controls the size of the index that maps offsets to file positions. We preallocate this index file and shrink it only after log rolls. You generally should not need to change this setting.
        :param builtins.str segment_index_bytes: This configuration controls the size of the index that maps offsets to file positions. We preallocate this index file and shrink it only after log rolls. You generally should not need to change this setting.
        :param builtins.str segment_jitter_ms: The maximum random jitter subtracted from the scheduled segment roll time to avoid thundering herds of segment rolling
        :param builtins.str segment_ms: This configuration controls the period of time after which Kafka will force the log to roll even if the segment file isn't full to ensure that retention can delete or compact old data. Setting this to a very low value has consequences, and the Aiven management plane ignores values less than 10 seconds.
        :param builtins.bool unclean_leader_election_enable: Indicates whether to enable replicas not in the ISR set to be elected as leader as a last resort, even though doing so may result in data loss.
        """
        if cleanup_policy is not None:
            pulumi.set(__self__, "cleanup_policy", cleanup_policy)
        if compression_type is not None:
            pulumi.set(__self__, "compression_type", compression_type)
        if delete_retention_ms is not None:
            pulumi.set(__self__, "delete_retention_ms", delete_retention_ms)
        if file_delete_delay_ms is not None:
            pulumi.set(__self__, "file_delete_delay_ms", file_delete_delay_ms)
        if flush_messages is not None:
            pulumi.set(__self__, "flush_messages", flush_messages)
        if flush_ms is not None:
            pulumi.set(__self__, "flush_ms", flush_ms)
        if index_interval_bytes is not None:
            pulumi.set(__self__, "index_interval_bytes", index_interval_bytes)
        if local_retention_bytes is not None:
            pulumi.set(__self__, "local_retention_bytes", local_retention_bytes)
        if local_retention_ms is not None:
            pulumi.set(__self__, "local_retention_ms", local_retention_ms)
        if max_compaction_lag_ms is not None:
            pulumi.set(__self__, "max_compaction_lag_ms", max_compaction_lag_ms)
        if max_message_bytes is not None:
            pulumi.set(__self__, "max_message_bytes", max_message_bytes)
        if message_downconversion_enable is not None:
            pulumi.set(__self__, "message_downconversion_enable", message_downconversion_enable)
        if message_format_version is not None:
            pulumi.set(__self__, "message_format_version", message_format_version)
        if message_timestamp_difference_max_ms is not None:
            pulumi.set(__self__, "message_timestamp_difference_max_ms", message_timestamp_difference_max_ms)
        if message_timestamp_type is not None:
            pulumi.set(__self__, "message_timestamp_type", message_timestamp_type)
        if min_cleanable_dirty_ratio is not None:
            pulumi.set(__self__, "min_cleanable_dirty_ratio", min_cleanable_dirty_ratio)
        if min_compaction_lag_ms is not None:
            pulumi.set(__self__, "min_compaction_lag_ms", min_compaction_lag_ms)
        if min_insync_replicas is not None:
            pulumi.set(__self__, "min_insync_replicas", min_insync_replicas)
        if preallocate is not None:
            pulumi.set(__self__, "preallocate", preallocate)
        if remote_storage_enable is not None:
            pulumi.set(__self__, "remote_storage_enable", remote_storage_enable)
        if retention_bytes is not None:
            pulumi.set(__self__, "retention_bytes", retention_bytes)
        if retention_ms is not None:
            pulumi.set(__self__, "retention_ms", retention_ms)
        if segment_bytes is not None:
            pulumi.set(__self__, "segment_bytes", segment_bytes)
        if segment_index_bytes is not None:
            pulumi.set(__self__, "segment_index_bytes", segment_index_bytes)
        if segment_jitter_ms is not None:
            pulumi.set(__self__, "segment_jitter_ms", segment_jitter_ms)
        if segment_ms is not None:
            pulumi.set(__self__, "segment_ms", segment_ms)
        if unclean_leader_election_enable is not None:
            pulumi.set(__self__, "unclean_leader_election_enable", unclean_leader_election_enable)

    @property
    @pulumi.getter(name="cleanupPolicy")
    def cleanup_policy(self) -> Optional[builtins.str]:
        """
        The retention policy to use on old segments. Possible values include 'delete', 'compact', or a comma-separated list of them. The default policy ('delete') will discard old segments when their retention time or size limit has been reached. The 'compact' setting will enable log compaction on the topic. The possible values are `compact`, `compact,delete` and `delete`.
        """
        return pulumi.get(self, "cleanup_policy")

    @property
    @pulumi.getter(name="compressionType")
    def compression_type(self) -> Optional[builtins.str]:
        """
        Specify the final compression type for a given topic. This configuration accepts the standard compression codecs ('gzip', 'snappy', 'lz4', 'zstd'). It additionally accepts 'uncompressed' which is equivalent to no compression; and 'producer' which means retain the original compression codec set by the producer. The possible values are `gzip`, `lz4`, `producer`, `snappy`, `uncompressed` and `zstd`.
        """
        return pulumi.get(self, "compression_type")

    @property
    @pulumi.getter(name="deleteRetentionMs")
    def delete_retention_ms(self) -> Optional[builtins.str]:
        """
        The amount of time to retain delete tombstone markers for log compacted topics. This setting also gives a bound on the time in which a consumer must complete a read if they begin from offset 0 to ensure that they get a valid snapshot of the final stage (otherwise delete tombstones may be collected before they complete their scan).
        """
        return pulumi.get(self, "delete_retention_ms")

    @property
    @pulumi.getter(name="fileDeleteDelayMs")
    def file_delete_delay_ms(self) -> Optional[builtins.str]:
        """
        The time to wait before deleting a file from the filesystem.
        """
        return pulumi.get(self, "file_delete_delay_ms")

    @property
    @pulumi.getter(name="flushMessages")
    def flush_messages(self) -> Optional[builtins.str]:
        """
        This setting allows specifying an interval at which we will force an fsync of data written to the log. For example if this was set to 1 we would fsync after every message; if it were 5 we would fsync after every five messages. In general we recommend you not set this and use replication for durability and allow the operating system's background flush capabilities as it is more efficient.
        """
        return pulumi.get(self, "flush_messages")

    @property
    @pulumi.getter(name="flushMs")
    def flush_ms(self) -> Optional[builtins.str]:
        """
        This setting allows specifying a time interval at which we will force an fsync of data written to the log. For example if this was set to 1000 we would fsync after 1000 ms had passed. In general we recommend you not set this and use replication for durability and allow the operating system's background flush capabilities as it is more efficient.
        """
        return pulumi.get(self, "flush_ms")

    @property
    @pulumi.getter(name="indexIntervalBytes")
    def index_interval_bytes(self) -> Optional[builtins.str]:
        """
        This setting controls how frequently Kafka adds an index entry to its offset index. The default setting ensures that we index a message roughly every 4096 bytes. More indexing allows reads to jump closer to the exact position in the log but makes the index larger. You probably don't need to change this.
        """
        return pulumi.get(self, "index_interval_bytes")

    @property
    @pulumi.getter(name="localRetentionBytes")
    def local_retention_bytes(self) -> Optional[builtins.str]:
        """
        This configuration controls the maximum bytes tiered storage will retain segment files locally before it will discard old log segments to free up space. If set to -2, the limit is equal to overall retention time. If set to -1, no limit is applied but it's possible only if overall retention is also -1.
        """
        return pulumi.get(self, "local_retention_bytes")

    @property
    @pulumi.getter(name="localRetentionMs")
    def local_retention_ms(self) -> Optional[builtins.str]:
        """
        This configuration controls the maximum time tiered storage will retain segment files locally before it will discard old log segments to free up space. If set to -2, the time limit is equal to overall retention time. If set to -1, no time limit is applied but it's possible only if overall retention is also -1.
        """
        return pulumi.get(self, "local_retention_ms")

    @property
    @pulumi.getter(name="maxCompactionLagMs")
    def max_compaction_lag_ms(self) -> Optional[builtins.str]:
        """
        The maximum time a message will remain ineligible for compaction in the log. Only applicable for logs that are being compacted.
        """
        return pulumi.get(self, "max_compaction_lag_ms")

    @property
    @pulumi.getter(name="maxMessageBytes")
    def max_message_bytes(self) -> Optional[builtins.str]:
        """
        The largest record batch size allowed by Kafka (after compression if compression is enabled). If this is increased and there are consumers older than 0.10.2, the consumers' fetch size must also be increased so that the they can fetch record batches this large. In the latest message format version, records are always grouped into batches for efficiency. In previous message format versions, uncompressed records are not grouped into batches and this limit only applies to a single record in that case.
        """
        return pulumi.get(self, "max_message_bytes")

    @property
    @pulumi.getter(name="messageDownconversionEnable")
    def message_downconversion_enable(self) -> Optional[builtins.bool]:
        """
        This configuration controls whether down-conversion of message formats is enabled to satisfy consume requests. When set to false, broker will not perform down-conversion for consumers expecting an older message format. The broker responds with UNSUPPORTED_VERSION error for consume requests from such older clients. This configuration does not apply to any message format conversion that might be required for replication to followers.
        """
        return pulumi.get(self, "message_downconversion_enable")

    @property
    @pulumi.getter(name="messageFormatVersion")
    def message_format_version(self) -> Optional[builtins.str]:
        """
        Specify the message format version the broker will use to append messages to the logs. The value should be a valid ApiVersion. Some examples are: 0.8.2, 0.9.0.0, 0.10.0, check ApiVersion for more details. By setting a particular message format version, the user is certifying that all the existing messages on disk are smaller or equal than the specified version. Setting this value incorrectly will cause consumers with older versions to break as they will receive messages with a format that they don't understand. The possible values are `0.10.0`, `0.10.0-IV0`, `0.10.0-IV1`, `0.10.1`, `0.10.1-IV0`, `0.10.1-IV1`, `0.10.1-IV2`, `0.10.2`, `0.10.2-IV0`, `0.11.0`, `0.11.0-IV0`, `0.11.0-IV1`, `0.11.0-IV2`, `0.8.0`, `0.8.1`, `0.8.2`, `0.9.0`, `1.0`, `1.0-IV0`, `1.1`, `1.1-IV0`, `2.0`, `2.0-IV0`, `2.0-IV1`, `2.1`, `2.1-IV0`, `2.1-IV1`, `2.1-IV2`, `2.2`, `2.2-IV0`, `2.2-IV1`, `2.3`, `2.3-IV0`, `2.3-IV1`, `2.4`, `2.4-IV0`, `2.4-IV1`, `2.5`, `2.5-IV0`, `2.6`, `2.6-IV0`, `2.7`, `2.7-IV0`, `2.7-IV1`, `2.7-IV2`, `2.8`, `2.8-IV0`, `2.8-IV1`, `3.0`, `3.0-IV0`, `3.0-IV1`, `3.1`, `3.1-IV0`, `3.2`, `3.2-IV0`, `3.3`, `3.3-IV0`, `3.3-IV1`, `3.3-IV2`, `3.3-IV3`, `3.4`, `3.4-IV0`, `3.5`, `3.5-IV0`, `3.5-IV1`, `3.5-IV2`, `3.6`, `3.6-IV0`, `3.6-IV1`, `3.6-IV2`, `3.7`, `3.7-IV0`, `3.7-IV1`, `3.7-IV2`, `3.7-IV3`, `3.7-IV4`, `3.8`, `3.8-IV0`, `3.9`, `3.9-IV0`, `3.9-IV1`, `4.0`, `4.0-IV0`, `4.1` and `4.1-IV0`.
        """
        return pulumi.get(self, "message_format_version")

    @property
    @pulumi.getter(name="messageTimestampDifferenceMaxMs")
    def message_timestamp_difference_max_ms(self) -> Optional[builtins.str]:
        """
        The maximum difference allowed between the timestamp when a broker receives a message and the timestamp specified in the message. If message.timestamp.type=CreateTime, a message will be rejected if the difference in timestamp exceeds this threshold. This configuration is ignored if message.timestamp.type=LogAppendTime.
        """
        return pulumi.get(self, "message_timestamp_difference_max_ms")

    @property
    @pulumi.getter(name="messageTimestampType")
    def message_timestamp_type(self) -> Optional[builtins.str]:
        """
        Define whether the timestamp in the message is message create time or log append time. The possible values are `CreateTime` and `LogAppendTime`.
        """
        return pulumi.get(self, "message_timestamp_type")

    @property
    @pulumi.getter(name="minCleanableDirtyRatio")
    def min_cleanable_dirty_ratio(self) -> Optional[builtins.float]:
        """
        This configuration controls how frequently the log compactor will attempt to clean the log (assuming log compaction is enabled). By default we will avoid cleaning a log where more than 50% of the log has been compacted. This ratio bounds the maximum space wasted in the log by duplicates (at 50% at most 50% of the log could be duplicates). A higher ratio will mean fewer, more efficient cleanings but will mean more wasted space in the log. If the max.compaction.lag.ms or the min.compaction.lag.ms configurations are also specified, then the log compactor considers the log to be eligible for compaction as soon as either: (i) the dirty ratio threshold has been met and the log has had dirty (uncompacted) records for at least the min.compaction.lag.ms duration, or (ii) if the log has had dirty (uncompacted) records for at most the max.compaction.lag.ms period.
        """
        return pulumi.get(self, "min_cleanable_dirty_ratio")

    @property
    @pulumi.getter(name="minCompactionLagMs")
    def min_compaction_lag_ms(self) -> Optional[builtins.str]:
        """
        The minimum time a message will remain uncompacted in the log. Only applicable for logs that are being compacted.
        """
        return pulumi.get(self, "min_compaction_lag_ms")

    @property
    @pulumi.getter(name="minInsyncReplicas")
    def min_insync_replicas(self) -> Optional[builtins.str]:
        """
        When a producer sets acks to 'all' (or '-1'), this configuration specifies the minimum number of replicas that must acknowledge a write for the write to be considered successful. If this minimum cannot be met, then the producer will raise an exception (either NotEnoughReplicas or NotEnoughReplicasAfterAppend). When used together, min.insync.replicas and acks allow you to enforce greater durability guarantees. A typical scenario would be to create a topic with a replication factor of 3, set min.insync.replicas to 2, and produce with acks of 'all'. This will ensure that the producer raises an exception if a majority of replicas do not receive a write.
        """
        return pulumi.get(self, "min_insync_replicas")

    @property
    @pulumi.getter
    def preallocate(self) -> Optional[builtins.bool]:
        """
        True if we should preallocate the file on disk when creating a new log segment.
        """
        return pulumi.get(self, "preallocate")

    @property
    @pulumi.getter(name="remoteStorageEnable")
    def remote_storage_enable(self) -> Optional[builtins.bool]:
        """
        Indicates whether tiered storage should be enabled.
        """
        return pulumi.get(self, "remote_storage_enable")

    @property
    @pulumi.getter(name="retentionBytes")
    def retention_bytes(self) -> Optional[builtins.str]:
        """
        This configuration controls the maximum size a partition (which consists of log segments) can grow to before we will discard old log segments to free up space if we are using the 'delete' retention policy. By default there is no size limit only a time limit. Since this limit is enforced at the partition level, multiply it by the number of partitions to compute the topic retention in bytes.
        """
        return pulumi.get(self, "retention_bytes")

    @property
    @pulumi.getter(name="retentionMs")
    def retention_ms(self) -> Optional[builtins.str]:
        """
        This configuration controls the maximum time we will retain a log before we will discard old log segments to free up space if we are using the 'delete' retention policy. This represents an SLA on how soon consumers must read their data. If set to -1, no time limit is applied.
        """
        return pulumi.get(self, "retention_ms")

    @property
    @pulumi.getter(name="segmentBytes")
    def segment_bytes(self) -> Optional[builtins.str]:
        """
        This configuration controls the size of the index that maps offsets to file positions. We preallocate this index file and shrink it only after log rolls. You generally should not need to change this setting.
        """
        return pulumi.get(self, "segment_bytes")

    @property
    @pulumi.getter(name="segmentIndexBytes")
    def segment_index_bytes(self) -> Optional[builtins.str]:
        """
        This configuration controls the size of the index that maps offsets to file positions. We preallocate this index file and shrink it only after log rolls. You generally should not need to change this setting.
        """
        return pulumi.get(self, "segment_index_bytes")

    @property
    @pulumi.getter(name="segmentJitterMs")
    def segment_jitter_ms(self) -> Optional[builtins.str]:
        """
        The maximum random jitter subtracted from the scheduled segment roll time to avoid thundering herds of segment rolling
        """
        return pulumi.get(self, "segment_jitter_ms")

    @property
    @pulumi.getter(name="segmentMs")
    def segment_ms(self) -> Optional[builtins.str]:
        """
        This configuration controls the period of time after which Kafka will force the log to roll even if the segment file isn't full to ensure that retention can delete or compact old data. Setting this to a very low value has consequences, and the Aiven management plane ignores values less than 10 seconds.
        """
        return pulumi.get(self, "segment_ms")

    @property
    @pulumi.getter(name="uncleanLeaderElectionEnable")
    def unclean_leader_election_enable(self) -> Optional[builtins.bool]:
        """
        Indicates whether to enable replicas not in the ISR set to be elected as leader as a last resort, even though doing so may result in data loss.
        """
        return pulumi.get(self, "unclean_leader_election_enable")


@pulumi.output_type
class GetKafkaTopicTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: Optional[builtins.str] = None):
        """
        :param builtins.str key: Tag key. Maximum length: `64`.
        :param builtins.str value: Tag value. Maximum length: `256`.
        """
        pulumi.set(__self__, "key", key)
        if value is not None:
            pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Tag key. Maximum length: `64`.
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> Optional[builtins.str]:
        """
        Tag value. Maximum length: `256`.
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetM3AggregatorComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetM3AggregatorM3aggregatorResult(dict):
    def __init__(__self__, *,
                 aggregator_http_uri: builtins.str,
                 uris: Sequence[builtins.str]):
        """
        :param builtins.str aggregator_http_uri: M3 Aggregator HTTP URI.
        :param Sequence[builtins.str] uris: M3 Aggregator server URIs.
        """
        pulumi.set(__self__, "aggregator_http_uri", aggregator_http_uri)
        pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter(name="aggregatorHttpUri")
    def aggregator_http_uri(self) -> builtins.str:
        """
        M3 Aggregator HTTP URI.
        """
        return pulumi.get(self, "aggregator_http_uri")

    @property
    @pulumi.getter
    def uris(self) -> Sequence[builtins.str]:
        """
        M3 Aggregator server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class GetM3AggregatorM3aggregatorUserConfigResult(dict):
    def __init__(__self__, *,
                 custom_domain: Optional[builtins.str] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetM3AggregatorM3aggregatorUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 m3_version: Optional[builtins.str] = None,
                 m3aggregator_version: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str custom_domain: Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        :param Sequence['GetM3AggregatorM3aggregatorUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param builtins.str m3_version: Enum: `1.1`, `1.2`, `1.5`, and newer. M3 major version (deprecated, use m3aggregator_version).
        :param builtins.str m3aggregator_version: Enum: `1.1`, `1.2`, `1.5`, and newer. M3 major version (the minimum compatible version).
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if custom_domain is not None:
            pulumi.set(__self__, "custom_domain", custom_domain)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if m3_version is not None:
            pulumi.set(__self__, "m3_version", m3_version)
        if m3aggregator_version is not None:
            pulumi.set(__self__, "m3aggregator_version", m3aggregator_version)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="customDomain")
    def custom_domain(self) -> Optional[builtins.str]:
        """
        Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        """
        return pulumi.get(self, "custom_domain")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetM3AggregatorM3aggregatorUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="m3Version")
    def m3_version(self) -> Optional[builtins.str]:
        """
        Enum: `1.1`, `1.2`, `1.5`, and newer. M3 major version (deprecated, use m3aggregator_version).
        """
        return pulumi.get(self, "m3_version")

    @property
    @pulumi.getter(name="m3aggregatorVersion")
    def m3aggregator_version(self) -> Optional[builtins.str]:
        """
        Enum: `1.1`, `1.2`, `1.5`, and newer. M3 major version (the minimum compatible version).
        """
        return pulumi.get(self, "m3aggregator_version")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class GetM3AggregatorM3aggregatorUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetM3AggregatorServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetM3AggregatorTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetM3AggregatorTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetM3DbComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetM3DbM3dbResult(dict):
    def __init__(__self__, *,
                 http_cluster_uri: builtins.str,
                 http_node_uri: builtins.str,
                 influxdb_uri: builtins.str,
                 prometheus_remote_read_uri: builtins.str,
                 prometheus_remote_write_uri: builtins.str,
                 uris: Sequence[builtins.str]):
        """
        :param builtins.str http_cluster_uri: M3DB cluster URI.
        :param builtins.str http_node_uri: M3DB node URI.
        :param builtins.str influxdb_uri: InfluxDB URI.
        :param builtins.str prometheus_remote_read_uri: Prometheus remote read URI.
        :param builtins.str prometheus_remote_write_uri: Prometheus remote write URI.
        :param Sequence[builtins.str] uris: M3DB server URIs.
        """
        pulumi.set(__self__, "http_cluster_uri", http_cluster_uri)
        pulumi.set(__self__, "http_node_uri", http_node_uri)
        pulumi.set(__self__, "influxdb_uri", influxdb_uri)
        pulumi.set(__self__, "prometheus_remote_read_uri", prometheus_remote_read_uri)
        pulumi.set(__self__, "prometheus_remote_write_uri", prometheus_remote_write_uri)
        pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter(name="httpClusterUri")
    def http_cluster_uri(self) -> builtins.str:
        """
        M3DB cluster URI.
        """
        return pulumi.get(self, "http_cluster_uri")

    @property
    @pulumi.getter(name="httpNodeUri")
    def http_node_uri(self) -> builtins.str:
        """
        M3DB node URI.
        """
        return pulumi.get(self, "http_node_uri")

    @property
    @pulumi.getter(name="influxdbUri")
    def influxdb_uri(self) -> builtins.str:
        """
        InfluxDB URI.
        """
        return pulumi.get(self, "influxdb_uri")

    @property
    @pulumi.getter(name="prometheusRemoteReadUri")
    def prometheus_remote_read_uri(self) -> builtins.str:
        """
        Prometheus remote read URI.
        """
        return pulumi.get(self, "prometheus_remote_read_uri")

    @property
    @pulumi.getter(name="prometheusRemoteWriteUri")
    def prometheus_remote_write_uri(self) -> builtins.str:
        """
        Prometheus remote write URI.
        """
        return pulumi.get(self, "prometheus_remote_write_uri")

    @property
    @pulumi.getter
    def uris(self) -> Sequence[builtins.str]:
        """
        M3DB server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class GetM3DbM3dbUserConfigResult(dict):
    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 custom_domain: Optional[builtins.str] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetM3DbM3dbUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 limits: Optional['outputs.GetM3DbM3dbUserConfigLimitsResult'] = None,
                 m3: Optional['outputs.GetM3DbM3dbUserConfigM3Result'] = None,
                 m3_version: Optional[builtins.str] = None,
                 m3coordinator_enable_graphite_carbon_ingest: Optional[builtins.bool] = None,
                 m3db_version: Optional[builtins.str] = None,
                 namespaces: Optional[Sequence['outputs.GetM3DbM3dbUserConfigNamespaceResult']] = None,
                 private_access: Optional['outputs.GetM3DbM3dbUserConfigPrivateAccessResult'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.GetM3DbM3dbUserConfigPublicAccessResult'] = None,
                 rules: Optional['outputs.GetM3DbM3dbUserConfigRulesResult'] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.str custom_domain: Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        :param Sequence['GetM3DbM3dbUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'GetM3DbM3dbUserConfigLimitsArgs' limits: M3 limits
        :param 'GetM3DbM3dbUserConfigM3Args' m3: M3 specific configuration options
        :param builtins.str m3_version: Enum: `1.1`, `1.2`, `1.5`, and newer. M3 major version (deprecated, use m3db_version).
        :param builtins.bool m3coordinator_enable_graphite_carbon_ingest: Enables access to Graphite Carbon plaintext metrics ingestion. It can be enabled only for services inside VPCs. The metrics are written to aggregated namespaces only.
        :param builtins.str m3db_version: Enum: `1.1`, `1.2`, `1.5`, and newer. M3 major version (the minimum compatible version).
        :param Sequence['GetM3DbM3dbUserConfigNamespaceArgs'] namespaces: List of M3 namespaces
        :param 'GetM3DbM3dbUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'GetM3DbM3dbUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param 'GetM3DbM3dbUserConfigRulesArgs' rules: M3 rules
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if custom_domain is not None:
            pulumi.set(__self__, "custom_domain", custom_domain)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if limits is not None:
            pulumi.set(__self__, "limits", limits)
        if m3 is not None:
            pulumi.set(__self__, "m3", m3)
        if m3_version is not None:
            pulumi.set(__self__, "m3_version", m3_version)
        if m3coordinator_enable_graphite_carbon_ingest is not None:
            pulumi.set(__self__, "m3coordinator_enable_graphite_carbon_ingest", m3coordinator_enable_graphite_carbon_ingest)
        if m3db_version is not None:
            pulumi.set(__self__, "m3db_version", m3db_version)
        if namespaces is not None:
            pulumi.set(__self__, "namespaces", namespaces)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if rules is not None:
            pulumi.set(__self__, "rules", rules)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="customDomain")
    def custom_domain(self) -> Optional[builtins.str]:
        """
        Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        """
        return pulumi.get(self, "custom_domain")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetM3DbM3dbUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter
    def limits(self) -> Optional['outputs.GetM3DbM3dbUserConfigLimitsResult']:
        """
        M3 limits
        """
        return pulumi.get(self, "limits")

    @property
    @pulumi.getter
    def m3(self) -> Optional['outputs.GetM3DbM3dbUserConfigM3Result']:
        """
        M3 specific configuration options
        """
        return pulumi.get(self, "m3")

    @property
    @pulumi.getter(name="m3Version")
    def m3_version(self) -> Optional[builtins.str]:
        """
        Enum: `1.1`, `1.2`, `1.5`, and newer. M3 major version (deprecated, use m3db_version).
        """
        return pulumi.get(self, "m3_version")

    @property
    @pulumi.getter(name="m3coordinatorEnableGraphiteCarbonIngest")
    def m3coordinator_enable_graphite_carbon_ingest(self) -> Optional[builtins.bool]:
        """
        Enables access to Graphite Carbon plaintext metrics ingestion. It can be enabled only for services inside VPCs. The metrics are written to aggregated namespaces only.
        """
        return pulumi.get(self, "m3coordinator_enable_graphite_carbon_ingest")

    @property
    @pulumi.getter(name="m3dbVersion")
    def m3db_version(self) -> Optional[builtins.str]:
        """
        Enum: `1.1`, `1.2`, `1.5`, and newer. M3 major version (the minimum compatible version).
        """
        return pulumi.get(self, "m3db_version")

    @property
    @pulumi.getter
    def namespaces(self) -> Optional[Sequence['outputs.GetM3DbM3dbUserConfigNamespaceResult']]:
        """
        List of M3 namespaces
        """
        return pulumi.get(self, "namespaces")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.GetM3DbM3dbUserConfigPrivateAccessResult']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GetM3DbM3dbUserConfigPublicAccessResult']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter
    def rules(self) -> Optional['outputs.GetM3DbM3dbUserConfigRulesResult']:
        """
        M3 rules
        """
        return pulumi.get(self, "rules")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class GetM3DbM3dbUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetM3DbM3dbUserConfigLimitsResult(dict):
    def __init__(__self__, *,
                 max_recently_queried_series_blocks: Optional[builtins.int] = None,
                 max_recently_queried_series_disk_bytes_read: Optional[builtins.int] = None,
                 max_recently_queried_series_lookback: Optional[builtins.str] = None,
                 query_docs: Optional[builtins.int] = None,
                 query_require_exhaustive: Optional[builtins.bool] = None,
                 query_series: Optional[builtins.int] = None):
        """
        :param builtins.int max_recently_queried_series_blocks: The maximum number of blocks that can be read in a given lookback period. Example: `20000`.
        :param builtins.int max_recently_queried_series_disk_bytes_read: The maximum number of disk bytes that can be read in a given lookback period. Example: `104857600`.
        :param builtins.str max_recently_queried_series_lookback: The lookback period for `max_recently_queried_series_blocks` and `max_recently_queried_series_disk_bytes_read`. Example: `15s`.
        :param builtins.int query_docs: The maximum number of docs fetched in single query. Example: `100000`.
        :param builtins.bool query_require_exhaustive: When query limits are exceeded, whether to return error or return partial results.
        :param builtins.int query_series: The maximum number of series fetched in single query. Example: `100000`.
        """
        if max_recently_queried_series_blocks is not None:
            pulumi.set(__self__, "max_recently_queried_series_blocks", max_recently_queried_series_blocks)
        if max_recently_queried_series_disk_bytes_read is not None:
            pulumi.set(__self__, "max_recently_queried_series_disk_bytes_read", max_recently_queried_series_disk_bytes_read)
        if max_recently_queried_series_lookback is not None:
            pulumi.set(__self__, "max_recently_queried_series_lookback", max_recently_queried_series_lookback)
        if query_docs is not None:
            pulumi.set(__self__, "query_docs", query_docs)
        if query_require_exhaustive is not None:
            pulumi.set(__self__, "query_require_exhaustive", query_require_exhaustive)
        if query_series is not None:
            pulumi.set(__self__, "query_series", query_series)

    @property
    @pulumi.getter(name="maxRecentlyQueriedSeriesBlocks")
    def max_recently_queried_series_blocks(self) -> Optional[builtins.int]:
        """
        The maximum number of blocks that can be read in a given lookback period. Example: `20000`.
        """
        return pulumi.get(self, "max_recently_queried_series_blocks")

    @property
    @pulumi.getter(name="maxRecentlyQueriedSeriesDiskBytesRead")
    def max_recently_queried_series_disk_bytes_read(self) -> Optional[builtins.int]:
        """
        The maximum number of disk bytes that can be read in a given lookback period. Example: `104857600`.
        """
        return pulumi.get(self, "max_recently_queried_series_disk_bytes_read")

    @property
    @pulumi.getter(name="maxRecentlyQueriedSeriesLookback")
    def max_recently_queried_series_lookback(self) -> Optional[builtins.str]:
        """
        The lookback period for `max_recently_queried_series_blocks` and `max_recently_queried_series_disk_bytes_read`. Example: `15s`.
        """
        return pulumi.get(self, "max_recently_queried_series_lookback")

    @property
    @pulumi.getter(name="queryDocs")
    def query_docs(self) -> Optional[builtins.int]:
        """
        The maximum number of docs fetched in single query. Example: `100000`.
        """
        return pulumi.get(self, "query_docs")

    @property
    @pulumi.getter(name="queryRequireExhaustive")
    def query_require_exhaustive(self) -> Optional[builtins.bool]:
        """
        When query limits are exceeded, whether to return error or return partial results.
        """
        return pulumi.get(self, "query_require_exhaustive")

    @property
    @pulumi.getter(name="querySeries")
    def query_series(self) -> Optional[builtins.int]:
        """
        The maximum number of series fetched in single query. Example: `100000`.
        """
        return pulumi.get(self, "query_series")


@pulumi.output_type
class GetM3DbM3dbUserConfigM3Result(dict):
    def __init__(__self__, *,
                 tag_options: Optional['outputs.GetM3DbM3dbUserConfigM3TagOptionsResult'] = None):
        """
        :param 'GetM3DbM3dbUserConfigM3TagOptionsArgs' tag_options: M3 Tag Options
        """
        if tag_options is not None:
            pulumi.set(__self__, "tag_options", tag_options)

    @property
    @pulumi.getter(name="tagOptions")
    def tag_options(self) -> Optional['outputs.GetM3DbM3dbUserConfigM3TagOptionsResult']:
        """
        M3 Tag Options
        """
        return pulumi.get(self, "tag_options")


@pulumi.output_type
class GetM3DbM3dbUserConfigM3TagOptionsResult(dict):
    def __init__(__self__, *,
                 allow_tag_name_duplicates: Optional[builtins.bool] = None,
                 allow_tag_value_empty: Optional[builtins.bool] = None):
        """
        :param builtins.bool allow_tag_name_duplicates: Allows for duplicate tags to appear on series (not allowed by default).
        :param builtins.bool allow_tag_value_empty: Allows for empty tags to appear on series (not allowed by default).
        """
        if allow_tag_name_duplicates is not None:
            pulumi.set(__self__, "allow_tag_name_duplicates", allow_tag_name_duplicates)
        if allow_tag_value_empty is not None:
            pulumi.set(__self__, "allow_tag_value_empty", allow_tag_value_empty)

    @property
    @pulumi.getter(name="allowTagNameDuplicates")
    def allow_tag_name_duplicates(self) -> Optional[builtins.bool]:
        """
        Allows for duplicate tags to appear on series (not allowed by default).
        """
        return pulumi.get(self, "allow_tag_name_duplicates")

    @property
    @pulumi.getter(name="allowTagValueEmpty")
    def allow_tag_value_empty(self) -> Optional[builtins.bool]:
        """
        Allows for empty tags to appear on series (not allowed by default).
        """
        return pulumi.get(self, "allow_tag_value_empty")


@pulumi.output_type
class GetM3DbM3dbUserConfigNamespaceResult(dict):
    def __init__(__self__, *,
                 name: builtins.str,
                 type: builtins.str,
                 options: Optional['outputs.GetM3DbM3dbUserConfigNamespaceOptionsResult'] = None,
                 resolution: Optional[builtins.str] = None):
        """
        :param builtins.str name: The name of the namespace. Example: `default`.
        :param builtins.str type: Enum: `aggregated`, `unaggregated`. The type of aggregation (aggregated/unaggregated).
        :param 'GetM3DbM3dbUserConfigNamespaceOptionsArgs' options: Namespace options
        :param builtins.str resolution: The resolution for an aggregated namespace. Example: `30s`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "type", type)
        if options is not None:
            pulumi.set(__self__, "options", options)
        if resolution is not None:
            pulumi.set(__self__, "resolution", resolution)

    @property
    @pulumi.getter
    def name(self) -> builtins.str:
        """
        The name of the namespace. Example: `default`.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def type(self) -> builtins.str:
        """
        Enum: `aggregated`, `unaggregated`. The type of aggregation (aggregated/unaggregated).
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter
    def options(self) -> Optional['outputs.GetM3DbM3dbUserConfigNamespaceOptionsResult']:
        """
        Namespace options
        """
        return pulumi.get(self, "options")

    @property
    @pulumi.getter
    def resolution(self) -> Optional[builtins.str]:
        """
        The resolution for an aggregated namespace. Example: `30s`.
        """
        return pulumi.get(self, "resolution")


@pulumi.output_type
class GetM3DbM3dbUserConfigNamespaceOptionsResult(dict):
    def __init__(__self__, *,
                 retention_options: 'outputs.GetM3DbM3dbUserConfigNamespaceOptionsRetentionOptionsResult',
                 snapshot_enabled: Optional[builtins.bool] = None,
                 writes_to_commitlog: Optional[builtins.bool] = None):
        """
        :param 'GetM3DbM3dbUserConfigNamespaceOptionsRetentionOptionsArgs' retention_options: Retention options
        :param builtins.bool snapshot_enabled: Controls whether M3DB will create snapshot files for this namespace.
        :param builtins.bool writes_to_commitlog: Controls whether M3DB will include writes to this namespace in the commitlog.
        """
        pulumi.set(__self__, "retention_options", retention_options)
        if snapshot_enabled is not None:
            pulumi.set(__self__, "snapshot_enabled", snapshot_enabled)
        if writes_to_commitlog is not None:
            pulumi.set(__self__, "writes_to_commitlog", writes_to_commitlog)

    @property
    @pulumi.getter(name="retentionOptions")
    def retention_options(self) -> 'outputs.GetM3DbM3dbUserConfigNamespaceOptionsRetentionOptionsResult':
        """
        Retention options
        """
        return pulumi.get(self, "retention_options")

    @property
    @pulumi.getter(name="snapshotEnabled")
    def snapshot_enabled(self) -> Optional[builtins.bool]:
        """
        Controls whether M3DB will create snapshot files for this namespace.
        """
        return pulumi.get(self, "snapshot_enabled")

    @property
    @pulumi.getter(name="writesToCommitlog")
    def writes_to_commitlog(self) -> Optional[builtins.bool]:
        """
        Controls whether M3DB will include writes to this namespace in the commitlog.
        """
        return pulumi.get(self, "writes_to_commitlog")


@pulumi.output_type
class GetM3DbM3dbUserConfigNamespaceOptionsRetentionOptionsResult(dict):
    def __init__(__self__, *,
                 block_data_expiry_duration: Optional[builtins.str] = None,
                 blocksize_duration: Optional[builtins.str] = None,
                 buffer_future_duration: Optional[builtins.str] = None,
                 buffer_past_duration: Optional[builtins.str] = None,
                 retention_period_duration: Optional[builtins.str] = None):
        """
        :param builtins.str block_data_expiry_duration: Controls how long we wait before expiring stale data. Example: `5m`.
        :param builtins.str blocksize_duration: Controls how long to keep a block in memory before flushing to a fileset on disk. Example: `2h`.
        :param builtins.str buffer_future_duration: Controls how far into the future writes to the namespace will be accepted. Example: `10m`.
        :param builtins.str buffer_past_duration: Controls how far into the past writes to the namespace will be accepted. Example: `10m`.
        :param builtins.str retention_period_duration: Controls the duration of time that M3DB will retain data for the namespace. Example: `48h`.
        """
        if block_data_expiry_duration is not None:
            pulumi.set(__self__, "block_data_expiry_duration", block_data_expiry_duration)
        if blocksize_duration is not None:
            pulumi.set(__self__, "blocksize_duration", blocksize_duration)
        if buffer_future_duration is not None:
            pulumi.set(__self__, "buffer_future_duration", buffer_future_duration)
        if buffer_past_duration is not None:
            pulumi.set(__self__, "buffer_past_duration", buffer_past_duration)
        if retention_period_duration is not None:
            pulumi.set(__self__, "retention_period_duration", retention_period_duration)

    @property
    @pulumi.getter(name="blockDataExpiryDuration")
    def block_data_expiry_duration(self) -> Optional[builtins.str]:
        """
        Controls how long we wait before expiring stale data. Example: `5m`.
        """
        return pulumi.get(self, "block_data_expiry_duration")

    @property
    @pulumi.getter(name="blocksizeDuration")
    def blocksize_duration(self) -> Optional[builtins.str]:
        """
        Controls how long to keep a block in memory before flushing to a fileset on disk. Example: `2h`.
        """
        return pulumi.get(self, "blocksize_duration")

    @property
    @pulumi.getter(name="bufferFutureDuration")
    def buffer_future_duration(self) -> Optional[builtins.str]:
        """
        Controls how far into the future writes to the namespace will be accepted. Example: `10m`.
        """
        return pulumi.get(self, "buffer_future_duration")

    @property
    @pulumi.getter(name="bufferPastDuration")
    def buffer_past_duration(self) -> Optional[builtins.str]:
        """
        Controls how far into the past writes to the namespace will be accepted. Example: `10m`.
        """
        return pulumi.get(self, "buffer_past_duration")

    @property
    @pulumi.getter(name="retentionPeriodDuration")
    def retention_period_duration(self) -> Optional[builtins.str]:
        """
        Controls the duration of time that M3DB will retain data for the namespace. Example: `48h`.
        """
        return pulumi.get(self, "retention_period_duration")


@pulumi.output_type
class GetM3DbM3dbUserConfigPrivateAccessResult(dict):
    def __init__(__self__, *,
                 m3coordinator: Optional[builtins.bool] = None):
        """
        :param builtins.bool m3coordinator: Allow clients to connect to m3coordinator with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if m3coordinator is not None:
            pulumi.set(__self__, "m3coordinator", m3coordinator)

    @property
    @pulumi.getter
    def m3coordinator(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to m3coordinator with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "m3coordinator")


@pulumi.output_type
class GetM3DbM3dbUserConfigPublicAccessResult(dict):
    def __init__(__self__, *,
                 m3coordinator: Optional[builtins.bool] = None):
        """
        :param builtins.bool m3coordinator: Allow clients to connect to m3coordinator from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if m3coordinator is not None:
            pulumi.set(__self__, "m3coordinator", m3coordinator)

    @property
    @pulumi.getter
    def m3coordinator(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to m3coordinator from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "m3coordinator")


@pulumi.output_type
class GetM3DbM3dbUserConfigRulesResult(dict):
    def __init__(__self__, *,
                 mappings: Optional[Sequence['outputs.GetM3DbM3dbUserConfigRulesMappingResult']] = None):
        """
        :param Sequence['GetM3DbM3dbUserConfigRulesMappingArgs'] mappings: List of M3 mapping rules
        """
        if mappings is not None:
            pulumi.set(__self__, "mappings", mappings)

    @property
    @pulumi.getter
    def mappings(self) -> Optional[Sequence['outputs.GetM3DbM3dbUserConfigRulesMappingResult']]:
        """
        List of M3 mapping rules
        """
        return pulumi.get(self, "mappings")


@pulumi.output_type
class GetM3DbM3dbUserConfigRulesMappingResult(dict):
    def __init__(__self__, *,
                 filter: builtins.str,
                 aggregations: Optional[Sequence[builtins.str]] = None,
                 drop: Optional[builtins.bool] = None,
                 name: Optional[builtins.str] = None,
                 namespaces: Optional[Sequence[builtins.str]] = None,
                 namespaces_objects: Optional[Sequence['outputs.GetM3DbM3dbUserConfigRulesMappingNamespacesObjectResult']] = None,
                 namespaces_strings: Optional[Sequence[builtins.str]] = None,
                 tags: Optional[Sequence['outputs.GetM3DbM3dbUserConfigRulesMappingTagResult']] = None):
        """
        :param builtins.str filter: Matching metric names with wildcards (using __name__:wildcard) or matching tags and their (optionally wildcarded) values. For value, ! can be used at start of value for negation, and multiple filters can be supplied using space as separator. Example: `__name__:disk_* host:important-42 mount:!*/sda`.
        :param Sequence[builtins.str] aggregations: List of aggregations to be applied.
        :param builtins.bool drop: Only store the derived metric (as specified in the roll-up rules), if any.
        :param builtins.str name: The (optional) name of the rule. Example: `important disk metrics`.
        :param Sequence[builtins.str] namespaces: This rule will be used to store the metrics in the given namespace(s). If a namespace is target of rules, the global default aggregation will be automatically disabled. Note that specifying filters that match no namespaces whatsoever will be returned as an error. Filter the namespace by glob (=wildcards).
        :param Sequence['GetM3DbM3dbUserConfigRulesMappingNamespacesObjectArgs'] namespaces_objects: This rule will be used to store the metrics in the given namespace(s). If a namespace is target of rules, the global default aggregation will be automatically disabled. Note that specifying filters that match no namespaces whatsoever will be returned as an error. Filter the namespace by exact match of retention period and resolution
        :param Sequence[builtins.str] namespaces_strings: This rule will be used to store the metrics in the given namespace(s). If a namespace is target of rules, the global default aggregation will be automatically disabled. Note that specifying filters that match no namespaces whatsoever will be returned as an error. Filter the namespace by glob (=wildcards).
        :param Sequence['GetM3DbM3dbUserConfigRulesMappingTagArgs'] tags: List of tags to be appended to matching metrics
        """
        pulumi.set(__self__, "filter", filter)
        if aggregations is not None:
            pulumi.set(__self__, "aggregations", aggregations)
        if drop is not None:
            pulumi.set(__self__, "drop", drop)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if namespaces is not None:
            pulumi.set(__self__, "namespaces", namespaces)
        if namespaces_objects is not None:
            pulumi.set(__self__, "namespaces_objects", namespaces_objects)
        if namespaces_strings is not None:
            pulumi.set(__self__, "namespaces_strings", namespaces_strings)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)

    @property
    @pulumi.getter
    def filter(self) -> builtins.str:
        """
        Matching metric names with wildcards (using __name__:wildcard) or matching tags and their (optionally wildcarded) values. For value, ! can be used at start of value for negation, and multiple filters can be supplied using space as separator. Example: `__name__:disk_* host:important-42 mount:!*/sda`.
        """
        return pulumi.get(self, "filter")

    @property
    @pulumi.getter
    def aggregations(self) -> Optional[Sequence[builtins.str]]:
        """
        List of aggregations to be applied.
        """
        return pulumi.get(self, "aggregations")

    @property
    @pulumi.getter
    def drop(self) -> Optional[builtins.bool]:
        """
        Only store the derived metric (as specified in the roll-up rules), if any.
        """
        return pulumi.get(self, "drop")

    @property
    @pulumi.getter
    def name(self) -> Optional[builtins.str]:
        """
        The (optional) name of the rule. Example: `important disk metrics`.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    @_utilities.deprecated("""Deprecated. Use `namespaces_string` instead.""")
    def namespaces(self) -> Optional[Sequence[builtins.str]]:
        """
        This rule will be used to store the metrics in the given namespace(s). If a namespace is target of rules, the global default aggregation will be automatically disabled. Note that specifying filters that match no namespaces whatsoever will be returned as an error. Filter the namespace by glob (=wildcards).
        """
        return pulumi.get(self, "namespaces")

    @property
    @pulumi.getter(name="namespacesObjects")
    def namespaces_objects(self) -> Optional[Sequence['outputs.GetM3DbM3dbUserConfigRulesMappingNamespacesObjectResult']]:
        """
        This rule will be used to store the metrics in the given namespace(s). If a namespace is target of rules, the global default aggregation will be automatically disabled. Note that specifying filters that match no namespaces whatsoever will be returned as an error. Filter the namespace by exact match of retention period and resolution
        """
        return pulumi.get(self, "namespaces_objects")

    @property
    @pulumi.getter(name="namespacesStrings")
    def namespaces_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        This rule will be used to store the metrics in the given namespace(s). If a namespace is target of rules, the global default aggregation will be automatically disabled. Note that specifying filters that match no namespaces whatsoever will be returned as an error. Filter the namespace by glob (=wildcards).
        """
        return pulumi.get(self, "namespaces_strings")

    @property
    @pulumi.getter
    def tags(self) -> Optional[Sequence['outputs.GetM3DbM3dbUserConfigRulesMappingTagResult']]:
        """
        List of tags to be appended to matching metrics
        """
        return pulumi.get(self, "tags")


@pulumi.output_type
class GetM3DbM3dbUserConfigRulesMappingNamespacesObjectResult(dict):
    def __init__(__self__, *,
                 resolution: builtins.str,
                 retention: Optional[builtins.str] = None):
        """
        :param builtins.str resolution: The resolution for the matching namespace. Example: `30s`.
        :param builtins.str retention: The retention period of the matching namespace. Example: `48h`.
        """
        pulumi.set(__self__, "resolution", resolution)
        if retention is not None:
            pulumi.set(__self__, "retention", retention)

    @property
    @pulumi.getter
    def resolution(self) -> builtins.str:
        """
        The resolution for the matching namespace. Example: `30s`.
        """
        return pulumi.get(self, "resolution")

    @property
    @pulumi.getter
    def retention(self) -> Optional[builtins.str]:
        """
        The retention period of the matching namespace. Example: `48h`.
        """
        return pulumi.get(self, "retention")


@pulumi.output_type
class GetM3DbM3dbUserConfigRulesMappingTagResult(dict):
    def __init__(__self__, *,
                 name: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str name: Name of the tag. Example: `my_tag`.
        :param builtins.str value: Value of the tag. Example: `my_value`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def name(self) -> builtins.str:
        """
        Name of the tag. Example: `my_tag`.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Value of the tag. Example: `my_value`.
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetM3DbServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetM3DbTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetM3DbTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetMySqlComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetMySqlMysqlResult(dict):
    def __init__(__self__, *,
                 params: Sequence['outputs.GetMySqlMysqlParamResult'],
                 replica_uri: builtins.str,
                 standby_uris: Sequence[builtins.str],
                 syncing_uris: Sequence[builtins.str],
                 uris: Sequence[builtins.str]):
        """
        :param Sequence['GetMySqlMysqlParamArgs'] params: MySQL connection parameters.
        :param builtins.str replica_uri: MySQL replica URI for services with a replica.
        :param Sequence[builtins.str] standby_uris: MySQL standby connection URIs.
        :param Sequence[builtins.str] syncing_uris: MySQL syncing connection URIs.
        :param Sequence[builtins.str] uris: MySQL connection URIs.
        """
        pulumi.set(__self__, "params", params)
        pulumi.set(__self__, "replica_uri", replica_uri)
        pulumi.set(__self__, "standby_uris", standby_uris)
        pulumi.set(__self__, "syncing_uris", syncing_uris)
        pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter
    def params(self) -> Sequence['outputs.GetMySqlMysqlParamResult']:
        """
        MySQL connection parameters.
        """
        return pulumi.get(self, "params")

    @property
    @pulumi.getter(name="replicaUri")
    def replica_uri(self) -> builtins.str:
        """
        MySQL replica URI for services with a replica.
        """
        return pulumi.get(self, "replica_uri")

    @property
    @pulumi.getter(name="standbyUris")
    def standby_uris(self) -> Sequence[builtins.str]:
        """
        MySQL standby connection URIs.
        """
        return pulumi.get(self, "standby_uris")

    @property
    @pulumi.getter(name="syncingUris")
    def syncing_uris(self) -> Sequence[builtins.str]:
        """
        MySQL syncing connection URIs.
        """
        return pulumi.get(self, "syncing_uris")

    @property
    @pulumi.getter
    def uris(self) -> Sequence[builtins.str]:
        """
        MySQL connection URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class GetMySqlMysqlParamResult(dict):
    def __init__(__self__, *,
                 database_name: builtins.str,
                 host: builtins.str,
                 password: builtins.str,
                 port: builtins.int,
                 sslmode: builtins.str,
                 user: builtins.str):
        """
        :param builtins.str database_name: Thr name of the primary MySQL database.
        :param builtins.str host: MySQL host IP or name.
        :param builtins.str password: The password for the admin service user.
        :param builtins.int port: MySQL port.
        :param builtins.str sslmode: MySQL SSL mode setting. Always set to "require".
        :param builtins.str user: The username for the admin service user.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "sslmode", sslmode)
        pulumi.set(__self__, "user", user)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> builtins.str:
        """
        Thr name of the primary MySQL database.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        MySQL host IP or name.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def password(self) -> builtins.str:
        """
        The password for the admin service user.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        MySQL port.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def sslmode(self) -> builtins.str:
        """
        MySQL SSL mode setting. Always set to "require".
        """
        return pulumi.get(self, "sslmode")

    @property
    @pulumi.getter
    def user(self) -> builtins.str:
        """
        The username for the admin service user.
        """
        return pulumi.get(self, "user")


@pulumi.output_type
class GetMySqlMysqlUserConfigResult(dict):
    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 admin_password: Optional[builtins.str] = None,
                 admin_username: Optional[builtins.str] = None,
                 backup_hour: Optional[builtins.int] = None,
                 backup_minute: Optional[builtins.int] = None,
                 binlog_retention_period: Optional[builtins.int] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetMySqlMysqlUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 migration: Optional['outputs.GetMySqlMysqlUserConfigMigrationResult'] = None,
                 mysql: Optional['outputs.GetMySqlMysqlUserConfigMysqlResult'] = None,
                 mysql_version: Optional[builtins.str] = None,
                 private_access: Optional['outputs.GetMySqlMysqlUserConfigPrivateAccessResult'] = None,
                 privatelink_access: Optional['outputs.GetMySqlMysqlUserConfigPrivatelinkAccessResult'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.GetMySqlMysqlUserConfigPublicAccessResult'] = None,
                 recovery_target_time: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.str admin_password: Custom password for admin user. Defaults to random string. This must be set only when a new service is being created.
        :param builtins.str admin_username: Custom username for admin user. This must be set only when a new service is being created. Example: `avnadmin`.
        :param builtins.int backup_hour: The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        :param builtins.int backup_minute: The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        :param builtins.int binlog_retention_period: The minimum amount of time in seconds to keep binlog entries before deletion. This may be extended for services that require binlog entries for longer than the default for example if using the MySQL Debezium Kafka connector. Example: `600`.
        :param Sequence['GetMySqlMysqlUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'GetMySqlMysqlUserConfigMigrationArgs' migration: Migrate data from existing server
        :param 'GetMySqlMysqlUserConfigMysqlArgs' mysql: mysql.conf configuration values
        :param builtins.str mysql_version: Enum: `8`, and newer. MySQL major version.
        :param 'GetMySqlMysqlUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'GetMySqlMysqlUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'GetMySqlMysqlUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_target_time: Recovery target time when forking a service. This has effect only when a new service is being created. Example: `2019-01-01 23:34:45`.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if admin_password is not None:
            pulumi.set(__self__, "admin_password", admin_password)
        if admin_username is not None:
            pulumi.set(__self__, "admin_username", admin_username)
        if backup_hour is not None:
            pulumi.set(__self__, "backup_hour", backup_hour)
        if backup_minute is not None:
            pulumi.set(__self__, "backup_minute", backup_minute)
        if binlog_retention_period is not None:
            pulumi.set(__self__, "binlog_retention_period", binlog_retention_period)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if migration is not None:
            pulumi.set(__self__, "migration", migration)
        if mysql is not None:
            pulumi.set(__self__, "mysql", mysql)
        if mysql_version is not None:
            pulumi.set(__self__, "mysql_version", mysql_version)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_target_time is not None:
            pulumi.set(__self__, "recovery_target_time", recovery_target_time)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="adminPassword")
    def admin_password(self) -> Optional[builtins.str]:
        """
        Custom password for admin user. Defaults to random string. This must be set only when a new service is being created.
        """
        return pulumi.get(self, "admin_password")

    @property
    @pulumi.getter(name="adminUsername")
    def admin_username(self) -> Optional[builtins.str]:
        """
        Custom username for admin user. This must be set only when a new service is being created. Example: `avnadmin`.
        """
        return pulumi.get(self, "admin_username")

    @property
    @pulumi.getter(name="backupHour")
    def backup_hour(self) -> Optional[builtins.int]:
        """
        The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        """
        return pulumi.get(self, "backup_hour")

    @property
    @pulumi.getter(name="backupMinute")
    def backup_minute(self) -> Optional[builtins.int]:
        """
        The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        """
        return pulumi.get(self, "backup_minute")

    @property
    @pulumi.getter(name="binlogRetentionPeriod")
    def binlog_retention_period(self) -> Optional[builtins.int]:
        """
        The minimum amount of time in seconds to keep binlog entries before deletion. This may be extended for services that require binlog entries for longer than the default for example if using the MySQL Debezium Kafka connector. Example: `600`.
        """
        return pulumi.get(self, "binlog_retention_period")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetMySqlMysqlUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter
    def migration(self) -> Optional['outputs.GetMySqlMysqlUserConfigMigrationResult']:
        """
        Migrate data from existing server
        """
        return pulumi.get(self, "migration")

    @property
    @pulumi.getter
    def mysql(self) -> Optional['outputs.GetMySqlMysqlUserConfigMysqlResult']:
        """
        mysql.conf configuration values
        """
        return pulumi.get(self, "mysql")

    @property
    @pulumi.getter(name="mysqlVersion")
    def mysql_version(self) -> Optional[builtins.str]:
        """
        Enum: `8`, and newer. MySQL major version.
        """
        return pulumi.get(self, "mysql_version")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.GetMySqlMysqlUserConfigPrivateAccessResult']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.GetMySqlMysqlUserConfigPrivatelinkAccessResult']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GetMySqlMysqlUserConfigPublicAccessResult']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryTargetTime")
    def recovery_target_time(self) -> Optional[builtins.str]:
        """
        Recovery target time when forking a service. This has effect only when a new service is being created. Example: `2019-01-01 23:34:45`.
        """
        return pulumi.get(self, "recovery_target_time")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class GetMySqlMysqlUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetMySqlMysqlUserConfigMigrationResult(dict):
    def __init__(__self__, *,
                 host: builtins.str,
                 port: builtins.int,
                 dbname: Optional[builtins.str] = None,
                 ignore_dbs: Optional[builtins.str] = None,
                 ignore_roles: Optional[builtins.str] = None,
                 method: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 username: Optional[builtins.str] = None):
        """
        :param builtins.str host: Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        :param builtins.int port: Port number of the server where to migrate data from. Example: `1234`.
        :param builtins.str dbname: Database name for bootstrapping the initial connection. Example: `defaultdb`.
        :param builtins.str ignore_dbs: Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        :param builtins.str ignore_roles: Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        :param builtins.str method: Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        :param builtins.str password: Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        :param builtins.bool ssl: The server where to migrate data from is secured with SSL. Default: `true`.
        :param builtins.str username: User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "port", port)
        if dbname is not None:
            pulumi.set(__self__, "dbname", dbname)
        if ignore_dbs is not None:
            pulumi.set(__self__, "ignore_dbs", ignore_dbs)
        if ignore_roles is not None:
            pulumi.set(__self__, "ignore_roles", ignore_roles)
        if method is not None:
            pulumi.set(__self__, "method", method)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number of the server where to migrate data from. Example: `1234`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def dbname(self) -> Optional[builtins.str]:
        """
        Database name for bootstrapping the initial connection. Example: `defaultdb`.
        """
        return pulumi.get(self, "dbname")

    @property
    @pulumi.getter(name="ignoreDbs")
    def ignore_dbs(self) -> Optional[builtins.str]:
        """
        Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        """
        return pulumi.get(self, "ignore_dbs")

    @property
    @pulumi.getter(name="ignoreRoles")
    def ignore_roles(self) -> Optional[builtins.str]:
        """
        Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        """
        return pulumi.get(self, "ignore_roles")

    @property
    @pulumi.getter
    def method(self) -> Optional[builtins.str]:
        """
        Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        """
        return pulumi.get(self, "method")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        The server where to migrate data from is secured with SSL. Default: `true`.
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def username(self) -> Optional[builtins.str]:
        """
        User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class GetMySqlMysqlUserConfigMysqlResult(dict):
    def __init__(__self__, *,
                 connect_timeout: Optional[builtins.int] = None,
                 default_time_zone: Optional[builtins.str] = None,
                 group_concat_max_len: Optional[builtins.int] = None,
                 information_schema_stats_expiry: Optional[builtins.int] = None,
                 innodb_change_buffer_max_size: Optional[builtins.int] = None,
                 innodb_flush_neighbors: Optional[builtins.int] = None,
                 innodb_ft_min_token_size: Optional[builtins.int] = None,
                 innodb_ft_server_stopword_table: Optional[builtins.str] = None,
                 innodb_lock_wait_timeout: Optional[builtins.int] = None,
                 innodb_log_buffer_size: Optional[builtins.int] = None,
                 innodb_online_alter_log_max_size: Optional[builtins.int] = None,
                 innodb_print_all_deadlocks: Optional[builtins.bool] = None,
                 innodb_read_io_threads: Optional[builtins.int] = None,
                 innodb_rollback_on_timeout: Optional[builtins.bool] = None,
                 innodb_thread_concurrency: Optional[builtins.int] = None,
                 innodb_write_io_threads: Optional[builtins.int] = None,
                 interactive_timeout: Optional[builtins.int] = None,
                 internal_tmp_mem_storage_engine: Optional[builtins.str] = None,
                 log_output: Optional[builtins.str] = None,
                 long_query_time: Optional[builtins.float] = None,
                 max_allowed_packet: Optional[builtins.int] = None,
                 max_heap_table_size: Optional[builtins.int] = None,
                 net_buffer_length: Optional[builtins.int] = None,
                 net_read_timeout: Optional[builtins.int] = None,
                 net_write_timeout: Optional[builtins.int] = None,
                 slow_query_log: Optional[builtins.bool] = None,
                 sort_buffer_size: Optional[builtins.int] = None,
                 sql_mode: Optional[builtins.str] = None,
                 sql_require_primary_key: Optional[builtins.bool] = None,
                 tmp_table_size: Optional[builtins.int] = None,
                 wait_timeout: Optional[builtins.int] = None):
        """
        :param builtins.int connect_timeout: The number of seconds that the mysqld server waits for a connect packet before responding with Bad handshake. Example: `10`.
        :param builtins.str default_time_zone: Default server time zone as an offset from UTC (from -12:00 to +12:00), a time zone name, or `SYSTEM` to use the MySQL server default. Example: `+03:00`.
        :param builtins.int group_concat_max_len: The maximum permitted result length in bytes for the GROUP_CONCAT() function. Example: `1024`.
        :param builtins.int information_schema_stats_expiry: The time, in seconds, before cached statistics expire. Example: `86400`.
        :param builtins.int innodb_change_buffer_max_size: Maximum size for the InnoDB change buffer, as a percentage of the total size of the buffer pool. Default is 25. Example: `30`.
        :param builtins.int innodb_flush_neighbors: Specifies whether flushing a page from the InnoDB buffer pool also flushes other dirty pages in the same extent (default is 1): 0 - dirty pages in the same extent are not flushed, 1 - flush contiguous dirty pages in the same extent, 2 - flush dirty pages in the same extent. Example: `0`.
        :param builtins.int innodb_ft_min_token_size: Minimum length of words that are stored in an InnoDB FULLTEXT index. Changing this parameter will lead to a restart of the MySQL service. Example: `3`.
        :param builtins.str innodb_ft_server_stopword_table: This option is used to specify your own InnoDB FULLTEXT index stopword list for all InnoDB tables. Example: `db_name/table_name`.
        :param builtins.int innodb_lock_wait_timeout: The length of time in seconds an InnoDB transaction waits for a row lock before giving up. Default is 120. Example: `50`.
        :param builtins.int innodb_log_buffer_size: The size in bytes of the buffer that InnoDB uses to write to the log files on disk. Example: `16777216`.
        :param builtins.int innodb_online_alter_log_max_size: The upper limit in bytes on the size of the temporary log files used during online DDL operations for InnoDB tables. Example: `134217728`.
        :param builtins.bool innodb_print_all_deadlocks: When enabled, information about all deadlocks in InnoDB user transactions is recorded in the error log. Disabled by default.
        :param builtins.int innodb_read_io_threads: The number of I/O threads for read operations in InnoDB. Default is 4. Changing this parameter will lead to a restart of the MySQL service. Example: `10`.
        :param builtins.bool innodb_rollback_on_timeout: When enabled a transaction timeout causes InnoDB to abort and roll back the entire transaction. Changing this parameter will lead to a restart of the MySQL service.
        :param builtins.int innodb_thread_concurrency: Defines the maximum number of threads permitted inside of InnoDB. Default is 0 (infinite concurrency - no limit). Example: `10`.
        :param builtins.int innodb_write_io_threads: The number of I/O threads for write operations in InnoDB. Default is 4. Changing this parameter will lead to a restart of the MySQL service. Example: `10`.
        :param builtins.int interactive_timeout: The number of seconds the server waits for activity on an interactive connection before closing it. Example: `3600`.
        :param builtins.str internal_tmp_mem_storage_engine: Enum: `MEMORY`, `TempTable`. The storage engine for in-memory internal temporary tables.
        :param builtins.str log_output: Enum: `INSIGHTS`, `INSIGHTS,TABLE`, `NONE`, `TABLE`. The slow log output destination when slow_query_log is ON. To enable MySQL AI Insights, choose INSIGHTS. To use MySQL AI Insights and the mysql.slow_log table at the same time, choose INSIGHTS,TABLE. To only use the mysql.slow_log table, choose TABLE. To silence slow logs, choose NONE.
        :param builtins.float long_query_time: The slow_query_logs work as SQL statements that take more than long_query_time seconds to execute. Example: `10.0`.
        :param builtins.int max_allowed_packet: Size of the largest message in bytes that can be received by the server. Default is 67108864 (64M). Example: `67108864`.
        :param builtins.int max_heap_table_size: Limits the size of internal in-memory tables. Also set tmp_table_size. Default is 16777216 (16M). Example: `16777216`.
        :param builtins.int net_buffer_length: Start sizes of connection buffer and result buffer. Default is 16384 (16K). Changing this parameter will lead to a restart of the MySQL service. Example: `16384`.
        :param builtins.int net_read_timeout: The number of seconds to wait for more data from a connection before aborting the read. Example: `30`.
        :param builtins.int net_write_timeout: The number of seconds to wait for a block to be written to a connection before aborting the write. Example: `30`.
        :param builtins.bool slow_query_log: Slow query log enables capturing of slow queries. Setting slow_query_log to false also truncates the mysql.slow_log table.
        :param builtins.int sort_buffer_size: Sort buffer size in bytes for ORDER BY optimization. Default is 262144 (256K). Example: `262144`.
        :param builtins.str sql_mode: Global SQL mode. Set to empty to use MySQL server defaults. When creating a new service and not setting this field Aiven default SQL mode (strict, SQL standard compliant) will be assigned. Example: `ANSI,TRADITIONAL`.
        :param builtins.bool sql_require_primary_key: Require primary key to be defined for new tables or old tables modified with ALTER TABLE and fail if missing. It is recommended to always have primary keys because various functionality may break if any large table is missing them.
        :param builtins.int tmp_table_size: Limits the size of internal in-memory tables. Also set max_heap_table_size. Default is 16777216 (16M). Example: `16777216`.
        :param builtins.int wait_timeout: The number of seconds the server waits for activity on a noninteractive connection before closing it. Example: `28800`.
        """
        if connect_timeout is not None:
            pulumi.set(__self__, "connect_timeout", connect_timeout)
        if default_time_zone is not None:
            pulumi.set(__self__, "default_time_zone", default_time_zone)
        if group_concat_max_len is not None:
            pulumi.set(__self__, "group_concat_max_len", group_concat_max_len)
        if information_schema_stats_expiry is not None:
            pulumi.set(__self__, "information_schema_stats_expiry", information_schema_stats_expiry)
        if innodb_change_buffer_max_size is not None:
            pulumi.set(__self__, "innodb_change_buffer_max_size", innodb_change_buffer_max_size)
        if innodb_flush_neighbors is not None:
            pulumi.set(__self__, "innodb_flush_neighbors", innodb_flush_neighbors)
        if innodb_ft_min_token_size is not None:
            pulumi.set(__self__, "innodb_ft_min_token_size", innodb_ft_min_token_size)
        if innodb_ft_server_stopword_table is not None:
            pulumi.set(__self__, "innodb_ft_server_stopword_table", innodb_ft_server_stopword_table)
        if innodb_lock_wait_timeout is not None:
            pulumi.set(__self__, "innodb_lock_wait_timeout", innodb_lock_wait_timeout)
        if innodb_log_buffer_size is not None:
            pulumi.set(__self__, "innodb_log_buffer_size", innodb_log_buffer_size)
        if innodb_online_alter_log_max_size is not None:
            pulumi.set(__self__, "innodb_online_alter_log_max_size", innodb_online_alter_log_max_size)
        if innodb_print_all_deadlocks is not None:
            pulumi.set(__self__, "innodb_print_all_deadlocks", innodb_print_all_deadlocks)
        if innodb_read_io_threads is not None:
            pulumi.set(__self__, "innodb_read_io_threads", innodb_read_io_threads)
        if innodb_rollback_on_timeout is not None:
            pulumi.set(__self__, "innodb_rollback_on_timeout", innodb_rollback_on_timeout)
        if innodb_thread_concurrency is not None:
            pulumi.set(__self__, "innodb_thread_concurrency", innodb_thread_concurrency)
        if innodb_write_io_threads is not None:
            pulumi.set(__self__, "innodb_write_io_threads", innodb_write_io_threads)
        if interactive_timeout is not None:
            pulumi.set(__self__, "interactive_timeout", interactive_timeout)
        if internal_tmp_mem_storage_engine is not None:
            pulumi.set(__self__, "internal_tmp_mem_storage_engine", internal_tmp_mem_storage_engine)
        if log_output is not None:
            pulumi.set(__self__, "log_output", log_output)
        if long_query_time is not None:
            pulumi.set(__self__, "long_query_time", long_query_time)
        if max_allowed_packet is not None:
            pulumi.set(__self__, "max_allowed_packet", max_allowed_packet)
        if max_heap_table_size is not None:
            pulumi.set(__self__, "max_heap_table_size", max_heap_table_size)
        if net_buffer_length is not None:
            pulumi.set(__self__, "net_buffer_length", net_buffer_length)
        if net_read_timeout is not None:
            pulumi.set(__self__, "net_read_timeout", net_read_timeout)
        if net_write_timeout is not None:
            pulumi.set(__self__, "net_write_timeout", net_write_timeout)
        if slow_query_log is not None:
            pulumi.set(__self__, "slow_query_log", slow_query_log)
        if sort_buffer_size is not None:
            pulumi.set(__self__, "sort_buffer_size", sort_buffer_size)
        if sql_mode is not None:
            pulumi.set(__self__, "sql_mode", sql_mode)
        if sql_require_primary_key is not None:
            pulumi.set(__self__, "sql_require_primary_key", sql_require_primary_key)
        if tmp_table_size is not None:
            pulumi.set(__self__, "tmp_table_size", tmp_table_size)
        if wait_timeout is not None:
            pulumi.set(__self__, "wait_timeout", wait_timeout)

    @property
    @pulumi.getter(name="connectTimeout")
    def connect_timeout(self) -> Optional[builtins.int]:
        """
        The number of seconds that the mysqld server waits for a connect packet before responding with Bad handshake. Example: `10`.
        """
        return pulumi.get(self, "connect_timeout")

    @property
    @pulumi.getter(name="defaultTimeZone")
    def default_time_zone(self) -> Optional[builtins.str]:
        """
        Default server time zone as an offset from UTC (from -12:00 to +12:00), a time zone name, or `SYSTEM` to use the MySQL server default. Example: `+03:00`.
        """
        return pulumi.get(self, "default_time_zone")

    @property
    @pulumi.getter(name="groupConcatMaxLen")
    def group_concat_max_len(self) -> Optional[builtins.int]:
        """
        The maximum permitted result length in bytes for the GROUP_CONCAT() function. Example: `1024`.
        """
        return pulumi.get(self, "group_concat_max_len")

    @property
    @pulumi.getter(name="informationSchemaStatsExpiry")
    def information_schema_stats_expiry(self) -> Optional[builtins.int]:
        """
        The time, in seconds, before cached statistics expire. Example: `86400`.
        """
        return pulumi.get(self, "information_schema_stats_expiry")

    @property
    @pulumi.getter(name="innodbChangeBufferMaxSize")
    def innodb_change_buffer_max_size(self) -> Optional[builtins.int]:
        """
        Maximum size for the InnoDB change buffer, as a percentage of the total size of the buffer pool. Default is 25. Example: `30`.
        """
        return pulumi.get(self, "innodb_change_buffer_max_size")

    @property
    @pulumi.getter(name="innodbFlushNeighbors")
    def innodb_flush_neighbors(self) -> Optional[builtins.int]:
        """
        Specifies whether flushing a page from the InnoDB buffer pool also flushes other dirty pages in the same extent (default is 1): 0 - dirty pages in the same extent are not flushed, 1 - flush contiguous dirty pages in the same extent, 2 - flush dirty pages in the same extent. Example: `0`.
        """
        return pulumi.get(self, "innodb_flush_neighbors")

    @property
    @pulumi.getter(name="innodbFtMinTokenSize")
    def innodb_ft_min_token_size(self) -> Optional[builtins.int]:
        """
        Minimum length of words that are stored in an InnoDB FULLTEXT index. Changing this parameter will lead to a restart of the MySQL service. Example: `3`.
        """
        return pulumi.get(self, "innodb_ft_min_token_size")

    @property
    @pulumi.getter(name="innodbFtServerStopwordTable")
    def innodb_ft_server_stopword_table(self) -> Optional[builtins.str]:
        """
        This option is used to specify your own InnoDB FULLTEXT index stopword list for all InnoDB tables. Example: `db_name/table_name`.
        """
        return pulumi.get(self, "innodb_ft_server_stopword_table")

    @property
    @pulumi.getter(name="innodbLockWaitTimeout")
    def innodb_lock_wait_timeout(self) -> Optional[builtins.int]:
        """
        The length of time in seconds an InnoDB transaction waits for a row lock before giving up. Default is 120. Example: `50`.
        """
        return pulumi.get(self, "innodb_lock_wait_timeout")

    @property
    @pulumi.getter(name="innodbLogBufferSize")
    def innodb_log_buffer_size(self) -> Optional[builtins.int]:
        """
        The size in bytes of the buffer that InnoDB uses to write to the log files on disk. Example: `16777216`.
        """
        return pulumi.get(self, "innodb_log_buffer_size")

    @property
    @pulumi.getter(name="innodbOnlineAlterLogMaxSize")
    def innodb_online_alter_log_max_size(self) -> Optional[builtins.int]:
        """
        The upper limit in bytes on the size of the temporary log files used during online DDL operations for InnoDB tables. Example: `134217728`.
        """
        return pulumi.get(self, "innodb_online_alter_log_max_size")

    @property
    @pulumi.getter(name="innodbPrintAllDeadlocks")
    def innodb_print_all_deadlocks(self) -> Optional[builtins.bool]:
        """
        When enabled, information about all deadlocks in InnoDB user transactions is recorded in the error log. Disabled by default.
        """
        return pulumi.get(self, "innodb_print_all_deadlocks")

    @property
    @pulumi.getter(name="innodbReadIoThreads")
    def innodb_read_io_threads(self) -> Optional[builtins.int]:
        """
        The number of I/O threads for read operations in InnoDB. Default is 4. Changing this parameter will lead to a restart of the MySQL service. Example: `10`.
        """
        return pulumi.get(self, "innodb_read_io_threads")

    @property
    @pulumi.getter(name="innodbRollbackOnTimeout")
    def innodb_rollback_on_timeout(self) -> Optional[builtins.bool]:
        """
        When enabled a transaction timeout causes InnoDB to abort and roll back the entire transaction. Changing this parameter will lead to a restart of the MySQL service.
        """
        return pulumi.get(self, "innodb_rollback_on_timeout")

    @property
    @pulumi.getter(name="innodbThreadConcurrency")
    def innodb_thread_concurrency(self) -> Optional[builtins.int]:
        """
        Defines the maximum number of threads permitted inside of InnoDB. Default is 0 (infinite concurrency - no limit). Example: `10`.
        """
        return pulumi.get(self, "innodb_thread_concurrency")

    @property
    @pulumi.getter(name="innodbWriteIoThreads")
    def innodb_write_io_threads(self) -> Optional[builtins.int]:
        """
        The number of I/O threads for write operations in InnoDB. Default is 4. Changing this parameter will lead to a restart of the MySQL service. Example: `10`.
        """
        return pulumi.get(self, "innodb_write_io_threads")

    @property
    @pulumi.getter(name="interactiveTimeout")
    def interactive_timeout(self) -> Optional[builtins.int]:
        """
        The number of seconds the server waits for activity on an interactive connection before closing it. Example: `3600`.
        """
        return pulumi.get(self, "interactive_timeout")

    @property
    @pulumi.getter(name="internalTmpMemStorageEngine")
    def internal_tmp_mem_storage_engine(self) -> Optional[builtins.str]:
        """
        Enum: `MEMORY`, `TempTable`. The storage engine for in-memory internal temporary tables.
        """
        return pulumi.get(self, "internal_tmp_mem_storage_engine")

    @property
    @pulumi.getter(name="logOutput")
    def log_output(self) -> Optional[builtins.str]:
        """
        Enum: `INSIGHTS`, `INSIGHTS,TABLE`, `NONE`, `TABLE`. The slow log output destination when slow_query_log is ON. To enable MySQL AI Insights, choose INSIGHTS. To use MySQL AI Insights and the mysql.slow_log table at the same time, choose INSIGHTS,TABLE. To only use the mysql.slow_log table, choose TABLE. To silence slow logs, choose NONE.
        """
        return pulumi.get(self, "log_output")

    @property
    @pulumi.getter(name="longQueryTime")
    def long_query_time(self) -> Optional[builtins.float]:
        """
        The slow_query_logs work as SQL statements that take more than long_query_time seconds to execute. Example: `10.0`.
        """
        return pulumi.get(self, "long_query_time")

    @property
    @pulumi.getter(name="maxAllowedPacket")
    def max_allowed_packet(self) -> Optional[builtins.int]:
        """
        Size of the largest message in bytes that can be received by the server. Default is 67108864 (64M). Example: `67108864`.
        """
        return pulumi.get(self, "max_allowed_packet")

    @property
    @pulumi.getter(name="maxHeapTableSize")
    def max_heap_table_size(self) -> Optional[builtins.int]:
        """
        Limits the size of internal in-memory tables. Also set tmp_table_size. Default is 16777216 (16M). Example: `16777216`.
        """
        return pulumi.get(self, "max_heap_table_size")

    @property
    @pulumi.getter(name="netBufferLength")
    def net_buffer_length(self) -> Optional[builtins.int]:
        """
        Start sizes of connection buffer and result buffer. Default is 16384 (16K). Changing this parameter will lead to a restart of the MySQL service. Example: `16384`.
        """
        return pulumi.get(self, "net_buffer_length")

    @property
    @pulumi.getter(name="netReadTimeout")
    def net_read_timeout(self) -> Optional[builtins.int]:
        """
        The number of seconds to wait for more data from a connection before aborting the read. Example: `30`.
        """
        return pulumi.get(self, "net_read_timeout")

    @property
    @pulumi.getter(name="netWriteTimeout")
    def net_write_timeout(self) -> Optional[builtins.int]:
        """
        The number of seconds to wait for a block to be written to a connection before aborting the write. Example: `30`.
        """
        return pulumi.get(self, "net_write_timeout")

    @property
    @pulumi.getter(name="slowQueryLog")
    def slow_query_log(self) -> Optional[builtins.bool]:
        """
        Slow query log enables capturing of slow queries. Setting slow_query_log to false also truncates the mysql.slow_log table.
        """
        return pulumi.get(self, "slow_query_log")

    @property
    @pulumi.getter(name="sortBufferSize")
    def sort_buffer_size(self) -> Optional[builtins.int]:
        """
        Sort buffer size in bytes for ORDER BY optimization. Default is 262144 (256K). Example: `262144`.
        """
        return pulumi.get(self, "sort_buffer_size")

    @property
    @pulumi.getter(name="sqlMode")
    def sql_mode(self) -> Optional[builtins.str]:
        """
        Global SQL mode. Set to empty to use MySQL server defaults. When creating a new service and not setting this field Aiven default SQL mode (strict, SQL standard compliant) will be assigned. Example: `ANSI,TRADITIONAL`.
        """
        return pulumi.get(self, "sql_mode")

    @property
    @pulumi.getter(name="sqlRequirePrimaryKey")
    def sql_require_primary_key(self) -> Optional[builtins.bool]:
        """
        Require primary key to be defined for new tables or old tables modified with ALTER TABLE and fail if missing. It is recommended to always have primary keys because various functionality may break if any large table is missing them.
        """
        return pulumi.get(self, "sql_require_primary_key")

    @property
    @pulumi.getter(name="tmpTableSize")
    def tmp_table_size(self) -> Optional[builtins.int]:
        """
        Limits the size of internal in-memory tables. Also set max_heap_table_size. Default is 16777216 (16M). Example: `16777216`.
        """
        return pulumi.get(self, "tmp_table_size")

    @property
    @pulumi.getter(name="waitTimeout")
    def wait_timeout(self) -> Optional[builtins.int]:
        """
        The number of seconds the server waits for activity on a noninteractive connection before closing it. Example: `28800`.
        """
        return pulumi.get(self, "wait_timeout")


@pulumi.output_type
class GetMySqlMysqlUserConfigPrivateAccessResult(dict):
    def __init__(__self__, *,
                 mysql: Optional[builtins.bool] = None,
                 mysqlx: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool mysql: Allow clients to connect to mysql with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool mysqlx: Allow clients to connect to mysqlx with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if mysql is not None:
            pulumi.set(__self__, "mysql", mysql)
        if mysqlx is not None:
            pulumi.set(__self__, "mysqlx", mysqlx)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def mysql(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to mysql with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "mysql")

    @property
    @pulumi.getter
    def mysqlx(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to mysqlx with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "mysqlx")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetMySqlMysqlUserConfigPrivatelinkAccessResult(dict):
    def __init__(__self__, *,
                 mysql: Optional[builtins.bool] = None,
                 mysqlx: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool mysql: Enable mysql.
        :param builtins.bool mysqlx: Enable mysqlx.
        :param builtins.bool prometheus: Enable prometheus.
        """
        if mysql is not None:
            pulumi.set(__self__, "mysql", mysql)
        if mysqlx is not None:
            pulumi.set(__self__, "mysqlx", mysqlx)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def mysql(self) -> Optional[builtins.bool]:
        """
        Enable mysql.
        """
        return pulumi.get(self, "mysql")

    @property
    @pulumi.getter
    def mysqlx(self) -> Optional[builtins.bool]:
        """
        Enable mysqlx.
        """
        return pulumi.get(self, "mysqlx")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetMySqlMysqlUserConfigPublicAccessResult(dict):
    def __init__(__self__, *,
                 mysql: Optional[builtins.bool] = None,
                 mysqlx: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool mysql: Allow clients to connect to mysql from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool mysqlx: Allow clients to connect to mysqlx from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if mysql is not None:
            pulumi.set(__self__, "mysql", mysql)
        if mysqlx is not None:
            pulumi.set(__self__, "mysqlx", mysqlx)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def mysql(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to mysql from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "mysql")

    @property
    @pulumi.getter
    def mysqlx(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to mysqlx from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "mysqlx")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetMySqlServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration. The possible value is `read_replica`.
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration. The possible value is `read_replica`.
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetMySqlTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetMySqlTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetOpenSearchComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetOpenSearchOpensearchResult(dict):
    def __init__(__self__, *,
                 kibana_uri: builtins.str,
                 opensearch_dashboards_uri: builtins.str,
                 password: builtins.str,
                 uris: Sequence[builtins.str],
                 username: builtins.str):
        """
        :param builtins.str kibana_uri: URI for Kibana dashboard frontend.
        :param builtins.str opensearch_dashboards_uri: URI for OpenSearch dashboard frontend.
        :param builtins.str password: OpenSearch password.
        :param Sequence[builtins.str] uris: OpenSearch server URIs.
        :param builtins.str username: OpenSearch username.
        """
        pulumi.set(__self__, "kibana_uri", kibana_uri)
        pulumi.set(__self__, "opensearch_dashboards_uri", opensearch_dashboards_uri)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "uris", uris)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="kibanaUri")
    @_utilities.deprecated("""This field was added by mistake and has never worked. It will be removed in future versions.""")
    def kibana_uri(self) -> builtins.str:
        """
        URI for Kibana dashboard frontend.
        """
        return pulumi.get(self, "kibana_uri")

    @property
    @pulumi.getter(name="opensearchDashboardsUri")
    def opensearch_dashboards_uri(self) -> builtins.str:
        """
        URI for OpenSearch dashboard frontend.
        """
        return pulumi.get(self, "opensearch_dashboards_uri")

    @property
    @pulumi.getter
    def password(self) -> builtins.str:
        """
        OpenSearch password.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def uris(self) -> Sequence[builtins.str]:
        """
        OpenSearch server URIs.
        """
        return pulumi.get(self, "uris")

    @property
    @pulumi.getter
    def username(self) -> builtins.str:
        """
        OpenSearch username.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigResult(dict):
    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 azure_migration: Optional['outputs.GetOpenSearchOpensearchUserConfigAzureMigrationResult'] = None,
                 custom_domain: Optional[builtins.str] = None,
                 disable_replication_factor_adjustment: Optional[builtins.bool] = None,
                 gcs_migration: Optional['outputs.GetOpenSearchOpensearchUserConfigGcsMigrationResult'] = None,
                 index_patterns: Optional[Sequence['outputs.GetOpenSearchOpensearchUserConfigIndexPatternResult']] = None,
                 index_rollup: Optional['outputs.GetOpenSearchOpensearchUserConfigIndexRollupResult'] = None,
                 index_template: Optional['outputs.GetOpenSearchOpensearchUserConfigIndexTemplateResult'] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetOpenSearchOpensearchUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 keep_index_refresh_interval: Optional[builtins.bool] = None,
                 max_index_count: Optional[builtins.int] = None,
                 openid: Optional['outputs.GetOpenSearchOpensearchUserConfigOpenidResult'] = None,
                 opensearch: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchResult'] = None,
                 opensearch_dashboards: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchDashboardsResult'] = None,
                 opensearch_version: Optional[builtins.str] = None,
                 private_access: Optional['outputs.GetOpenSearchOpensearchUserConfigPrivateAccessResult'] = None,
                 privatelink_access: Optional['outputs.GetOpenSearchOpensearchUserConfigPrivatelinkAccessResult'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.GetOpenSearchOpensearchUserConfigPublicAccessResult'] = None,
                 recovery_basebackup_name: Optional[builtins.str] = None,
                 s3_migration: Optional['outputs.GetOpenSearchOpensearchUserConfigS3MigrationResult'] = None,
                 saml: Optional['outputs.GetOpenSearchOpensearchUserConfigSamlResult'] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param 'GetOpenSearchOpensearchUserConfigAzureMigrationArgs' azure_migration: Azure migration settings
        :param builtins.str custom_domain: Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        :param builtins.bool disable_replication_factor_adjustment: Disable automatic replication factor adjustment for multi-node services. By default, Aiven ensures all indexes are replicated at least to two nodes. Note: Due to potential data loss in case of losing a service node, this setting can not be activated unless specifically allowed for the project.
        :param 'GetOpenSearchOpensearchUserConfigGcsMigrationArgs' gcs_migration: Google Cloud Storage migration settings
        :param Sequence['GetOpenSearchOpensearchUserConfigIndexPatternArgs'] index_patterns: Index patterns
        :param 'GetOpenSearchOpensearchUserConfigIndexRollupArgs' index_rollup: Index rollup settings
        :param 'GetOpenSearchOpensearchUserConfigIndexTemplateArgs' index_template: Template settings for all new indexes
        :param Sequence['GetOpenSearchOpensearchUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param builtins.bool keep_index_refresh_interval: Aiven automation resets index.refresh_interval to default value for every index to be sure that indices are always visible to search. If it doesn't fit your case, you can disable this by setting up this flag to true.
        :param builtins.int max_index_count: Use index_patterns instead. Default: `0`.
        :param 'GetOpenSearchOpensearchUserConfigOpenidArgs' openid: OpenSearch OpenID Connect Configuration
        :param 'GetOpenSearchOpensearchUserConfigOpensearchArgs' opensearch: OpenSearch settings
        :param 'GetOpenSearchOpensearchUserConfigOpensearchDashboardsArgs' opensearch_dashboards: OpenSearch Dashboards settings
        :param builtins.str opensearch_version: Enum: `1`, `2`, and newer. OpenSearch major version.
        :param 'GetOpenSearchOpensearchUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'GetOpenSearchOpensearchUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'GetOpenSearchOpensearchUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_basebackup_name: Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        :param 'GetOpenSearchOpensearchUserConfigS3MigrationArgs' s3_migration: AWS S3 / AWS S3 compatible migration settings
        :param 'GetOpenSearchOpensearchUserConfigSamlArgs' saml: OpenSearch SAML configuration
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if azure_migration is not None:
            pulumi.set(__self__, "azure_migration", azure_migration)
        if custom_domain is not None:
            pulumi.set(__self__, "custom_domain", custom_domain)
        if disable_replication_factor_adjustment is not None:
            pulumi.set(__self__, "disable_replication_factor_adjustment", disable_replication_factor_adjustment)
        if gcs_migration is not None:
            pulumi.set(__self__, "gcs_migration", gcs_migration)
        if index_patterns is not None:
            pulumi.set(__self__, "index_patterns", index_patterns)
        if index_rollup is not None:
            pulumi.set(__self__, "index_rollup", index_rollup)
        if index_template is not None:
            pulumi.set(__self__, "index_template", index_template)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if keep_index_refresh_interval is not None:
            pulumi.set(__self__, "keep_index_refresh_interval", keep_index_refresh_interval)
        if max_index_count is not None:
            pulumi.set(__self__, "max_index_count", max_index_count)
        if openid is not None:
            pulumi.set(__self__, "openid", openid)
        if opensearch is not None:
            pulumi.set(__self__, "opensearch", opensearch)
        if opensearch_dashboards is not None:
            pulumi.set(__self__, "opensearch_dashboards", opensearch_dashboards)
        if opensearch_version is not None:
            pulumi.set(__self__, "opensearch_version", opensearch_version)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_basebackup_name is not None:
            pulumi.set(__self__, "recovery_basebackup_name", recovery_basebackup_name)
        if s3_migration is not None:
            pulumi.set(__self__, "s3_migration", s3_migration)
        if saml is not None:
            pulumi.set(__self__, "saml", saml)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="azureMigration")
    def azure_migration(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigAzureMigrationResult']:
        """
        Azure migration settings
        """
        return pulumi.get(self, "azure_migration")

    @property
    @pulumi.getter(name="customDomain")
    def custom_domain(self) -> Optional[builtins.str]:
        """
        Serve the web frontend using a custom CNAME pointing to the Aiven DNS name. Example: `grafana.example.org`.
        """
        return pulumi.get(self, "custom_domain")

    @property
    @pulumi.getter(name="disableReplicationFactorAdjustment")
    def disable_replication_factor_adjustment(self) -> Optional[builtins.bool]:
        """
        Disable automatic replication factor adjustment for multi-node services. By default, Aiven ensures all indexes are replicated at least to two nodes. Note: Due to potential data loss in case of losing a service node, this setting can not be activated unless specifically allowed for the project.
        """
        return pulumi.get(self, "disable_replication_factor_adjustment")

    @property
    @pulumi.getter(name="gcsMigration")
    def gcs_migration(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigGcsMigrationResult']:
        """
        Google Cloud Storage migration settings
        """
        return pulumi.get(self, "gcs_migration")

    @property
    @pulumi.getter(name="indexPatterns")
    def index_patterns(self) -> Optional[Sequence['outputs.GetOpenSearchOpensearchUserConfigIndexPatternResult']]:
        """
        Index patterns
        """
        return pulumi.get(self, "index_patterns")

    @property
    @pulumi.getter(name="indexRollup")
    def index_rollup(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigIndexRollupResult']:
        """
        Index rollup settings
        """
        return pulumi.get(self, "index_rollup")

    @property
    @pulumi.getter(name="indexTemplate")
    def index_template(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigIndexTemplateResult']:
        """
        Template settings for all new indexes
        """
        return pulumi.get(self, "index_template")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetOpenSearchOpensearchUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="keepIndexRefreshInterval")
    def keep_index_refresh_interval(self) -> Optional[builtins.bool]:
        """
        Aiven automation resets index.refresh_interval to default value for every index to be sure that indices are always visible to search. If it doesn't fit your case, you can disable this by setting up this flag to true.
        """
        return pulumi.get(self, "keep_index_refresh_interval")

    @property
    @pulumi.getter(name="maxIndexCount")
    def max_index_count(self) -> Optional[builtins.int]:
        """
        Use index_patterns instead. Default: `0`.
        """
        return pulumi.get(self, "max_index_count")

    @property
    @pulumi.getter
    def openid(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpenidResult']:
        """
        OpenSearch OpenID Connect Configuration
        """
        return pulumi.get(self, "openid")

    @property
    @pulumi.getter
    def opensearch(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchResult']:
        """
        OpenSearch settings
        """
        return pulumi.get(self, "opensearch")

    @property
    @pulumi.getter(name="opensearchDashboards")
    def opensearch_dashboards(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchDashboardsResult']:
        """
        OpenSearch Dashboards settings
        """
        return pulumi.get(self, "opensearch_dashboards")

    @property
    @pulumi.getter(name="opensearchVersion")
    def opensearch_version(self) -> Optional[builtins.str]:
        """
        Enum: `1`, `2`, and newer. OpenSearch major version.
        """
        return pulumi.get(self, "opensearch_version")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigPrivateAccessResult']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigPrivatelinkAccessResult']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigPublicAccessResult']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryBasebackupName")
    def recovery_basebackup_name(self) -> Optional[builtins.str]:
        """
        Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        """
        return pulumi.get(self, "recovery_basebackup_name")

    @property
    @pulumi.getter(name="s3Migration")
    def s3_migration(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigS3MigrationResult']:
        """
        AWS S3 / AWS S3 compatible migration settings
        """
        return pulumi.get(self, "s3_migration")

    @property
    @pulumi.getter
    def saml(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigSamlResult']:
        """
        OpenSearch SAML configuration
        """
        return pulumi.get(self, "saml")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigAzureMigrationResult(dict):
    def __init__(__self__, *,
                 account: builtins.str,
                 base_path: builtins.str,
                 container: builtins.str,
                 indices: builtins.str,
                 snapshot_name: builtins.str,
                 chunk_size: Optional[builtins.str] = None,
                 compress: Optional[builtins.bool] = None,
                 endpoint_suffix: Optional[builtins.str] = None,
                 include_aliases: Optional[builtins.bool] = None,
                 key: Optional[builtins.str] = None,
                 readonly: Optional[builtins.bool] = None,
                 restore_global_state: Optional[builtins.bool] = None,
                 sas_token: Optional[builtins.str] = None):
        """
        :param builtins.str account: Account name.
        :param builtins.str base_path: The path to the repository data within its container. The value of this setting should not start or end with a /.
        :param builtins.str container: Azure container name.
        :param builtins.str indices: A comma-delimited list of indices to restore from the snapshot. Multi-index syntax is supported. Example: `metrics*,logs*,data-20240823`.
        :param builtins.str snapshot_name: The snapshot name to restore from.
        :param builtins.str chunk_size: Big files can be broken down into chunks during snapshotting if needed. Should be the same as for the 3rd party repository.
        :param builtins.bool compress: When set to true metadata files are stored in compressed format.
        :param builtins.str endpoint_suffix: Defines the DNS suffix for Azure Storage endpoints.
        :param builtins.bool include_aliases: Whether to restore aliases alongside their associated indexes. Default is true.
        :param builtins.str key: Azure account secret key. One of key or sas_token should be specified.
        :param builtins.bool readonly: Whether the repository is read-only. Default: `true`.
        :param builtins.bool restore_global_state: If true, restore the cluster state. Defaults to false.
        :param builtins.str sas_token: A shared access signatures (SAS) token. One of key or sas_token should be specified.
        """
        pulumi.set(__self__, "account", account)
        pulumi.set(__self__, "base_path", base_path)
        pulumi.set(__self__, "container", container)
        pulumi.set(__self__, "indices", indices)
        pulumi.set(__self__, "snapshot_name", snapshot_name)
        if chunk_size is not None:
            pulumi.set(__self__, "chunk_size", chunk_size)
        if compress is not None:
            pulumi.set(__self__, "compress", compress)
        if endpoint_suffix is not None:
            pulumi.set(__self__, "endpoint_suffix", endpoint_suffix)
        if include_aliases is not None:
            pulumi.set(__self__, "include_aliases", include_aliases)
        if key is not None:
            pulumi.set(__self__, "key", key)
        if readonly is not None:
            pulumi.set(__self__, "readonly", readonly)
        if restore_global_state is not None:
            pulumi.set(__self__, "restore_global_state", restore_global_state)
        if sas_token is not None:
            pulumi.set(__self__, "sas_token", sas_token)

    @property
    @pulumi.getter
    def account(self) -> builtins.str:
        """
        Account name.
        """
        return pulumi.get(self, "account")

    @property
    @pulumi.getter(name="basePath")
    def base_path(self) -> builtins.str:
        """
        The path to the repository data within its container. The value of this setting should not start or end with a /.
        """
        return pulumi.get(self, "base_path")

    @property
    @pulumi.getter
    def container(self) -> builtins.str:
        """
        Azure container name.
        """
        return pulumi.get(self, "container")

    @property
    @pulumi.getter
    def indices(self) -> builtins.str:
        """
        A comma-delimited list of indices to restore from the snapshot. Multi-index syntax is supported. Example: `metrics*,logs*,data-20240823`.
        """
        return pulumi.get(self, "indices")

    @property
    @pulumi.getter(name="snapshotName")
    def snapshot_name(self) -> builtins.str:
        """
        The snapshot name to restore from.
        """
        return pulumi.get(self, "snapshot_name")

    @property
    @pulumi.getter(name="chunkSize")
    def chunk_size(self) -> Optional[builtins.str]:
        """
        Big files can be broken down into chunks during snapshotting if needed. Should be the same as for the 3rd party repository.
        """
        return pulumi.get(self, "chunk_size")

    @property
    @pulumi.getter
    def compress(self) -> Optional[builtins.bool]:
        """
        When set to true metadata files are stored in compressed format.
        """
        return pulumi.get(self, "compress")

    @property
    @pulumi.getter(name="endpointSuffix")
    def endpoint_suffix(self) -> Optional[builtins.str]:
        """
        Defines the DNS suffix for Azure Storage endpoints.
        """
        return pulumi.get(self, "endpoint_suffix")

    @property
    @pulumi.getter(name="includeAliases")
    def include_aliases(self) -> Optional[builtins.bool]:
        """
        Whether to restore aliases alongside their associated indexes. Default is true.
        """
        return pulumi.get(self, "include_aliases")

    @property
    @pulumi.getter
    def key(self) -> Optional[builtins.str]:
        """
        Azure account secret key. One of key or sas_token should be specified.
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def readonly(self) -> Optional[builtins.bool]:
        """
        Whether the repository is read-only. Default: `true`.
        """
        return pulumi.get(self, "readonly")

    @property
    @pulumi.getter(name="restoreGlobalState")
    def restore_global_state(self) -> Optional[builtins.bool]:
        """
        If true, restore the cluster state. Defaults to false.
        """
        return pulumi.get(self, "restore_global_state")

    @property
    @pulumi.getter(name="sasToken")
    def sas_token(self) -> Optional[builtins.str]:
        """
        A shared access signatures (SAS) token. One of key or sas_token should be specified.
        """
        return pulumi.get(self, "sas_token")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigGcsMigrationResult(dict):
    def __init__(__self__, *,
                 base_path: builtins.str,
                 bucket: builtins.str,
                 credentials: builtins.str,
                 indices: builtins.str,
                 snapshot_name: builtins.str,
                 chunk_size: Optional[builtins.str] = None,
                 compress: Optional[builtins.bool] = None,
                 include_aliases: Optional[builtins.bool] = None,
                 readonly: Optional[builtins.bool] = None,
                 restore_global_state: Optional[builtins.bool] = None):
        """
        :param builtins.str base_path: The path to the repository data within its container. The value of this setting should not start or end with a /.
        :param builtins.str bucket: The path to the repository data within its container.
        :param builtins.str credentials: Google Cloud Storage credentials file content.
        :param builtins.str indices: A comma-delimited list of indices to restore from the snapshot. Multi-index syntax is supported. Example: `metrics*,logs*,data-20240823`.
        :param builtins.str snapshot_name: The snapshot name to restore from.
        :param builtins.str chunk_size: Big files can be broken down into chunks during snapshotting if needed. Should be the same as for the 3rd party repository.
        :param builtins.bool compress: When set to true metadata files are stored in compressed format.
        :param builtins.bool include_aliases: Whether to restore aliases alongside their associated indexes. Default is true.
        :param builtins.bool readonly: Whether the repository is read-only. Default: `true`.
        :param builtins.bool restore_global_state: If true, restore the cluster state. Defaults to false.
        """
        pulumi.set(__self__, "base_path", base_path)
        pulumi.set(__self__, "bucket", bucket)
        pulumi.set(__self__, "credentials", credentials)
        pulumi.set(__self__, "indices", indices)
        pulumi.set(__self__, "snapshot_name", snapshot_name)
        if chunk_size is not None:
            pulumi.set(__self__, "chunk_size", chunk_size)
        if compress is not None:
            pulumi.set(__self__, "compress", compress)
        if include_aliases is not None:
            pulumi.set(__self__, "include_aliases", include_aliases)
        if readonly is not None:
            pulumi.set(__self__, "readonly", readonly)
        if restore_global_state is not None:
            pulumi.set(__self__, "restore_global_state", restore_global_state)

    @property
    @pulumi.getter(name="basePath")
    def base_path(self) -> builtins.str:
        """
        The path to the repository data within its container. The value of this setting should not start or end with a /.
        """
        return pulumi.get(self, "base_path")

    @property
    @pulumi.getter
    def bucket(self) -> builtins.str:
        """
        The path to the repository data within its container.
        """
        return pulumi.get(self, "bucket")

    @property
    @pulumi.getter
    def credentials(self) -> builtins.str:
        """
        Google Cloud Storage credentials file content.
        """
        return pulumi.get(self, "credentials")

    @property
    @pulumi.getter
    def indices(self) -> builtins.str:
        """
        A comma-delimited list of indices to restore from the snapshot. Multi-index syntax is supported. Example: `metrics*,logs*,data-20240823`.
        """
        return pulumi.get(self, "indices")

    @property
    @pulumi.getter(name="snapshotName")
    def snapshot_name(self) -> builtins.str:
        """
        The snapshot name to restore from.
        """
        return pulumi.get(self, "snapshot_name")

    @property
    @pulumi.getter(name="chunkSize")
    def chunk_size(self) -> Optional[builtins.str]:
        """
        Big files can be broken down into chunks during snapshotting if needed. Should be the same as for the 3rd party repository.
        """
        return pulumi.get(self, "chunk_size")

    @property
    @pulumi.getter
    def compress(self) -> Optional[builtins.bool]:
        """
        When set to true metadata files are stored in compressed format.
        """
        return pulumi.get(self, "compress")

    @property
    @pulumi.getter(name="includeAliases")
    def include_aliases(self) -> Optional[builtins.bool]:
        """
        Whether to restore aliases alongside their associated indexes. Default is true.
        """
        return pulumi.get(self, "include_aliases")

    @property
    @pulumi.getter
    def readonly(self) -> Optional[builtins.bool]:
        """
        Whether the repository is read-only. Default: `true`.
        """
        return pulumi.get(self, "readonly")

    @property
    @pulumi.getter(name="restoreGlobalState")
    def restore_global_state(self) -> Optional[builtins.bool]:
        """
        If true, restore the cluster state. Defaults to false.
        """
        return pulumi.get(self, "restore_global_state")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigIndexPatternResult(dict):
    def __init__(__self__, *,
                 max_index_count: builtins.int,
                 pattern: builtins.str,
                 sorting_algorithm: Optional[builtins.str] = None):
        """
        :param builtins.int max_index_count: Maximum number of indexes to keep. Example: `3`.
        :param builtins.str pattern: fnmatch pattern. Example: `logs_*_foo_*`.
        :param builtins.str sorting_algorithm: Enum: `alphabetical`, `creation_date`. Deletion sorting algorithm. Default: `creation_date`.
        """
        pulumi.set(__self__, "max_index_count", max_index_count)
        pulumi.set(__self__, "pattern", pattern)
        if sorting_algorithm is not None:
            pulumi.set(__self__, "sorting_algorithm", sorting_algorithm)

    @property
    @pulumi.getter(name="maxIndexCount")
    def max_index_count(self) -> builtins.int:
        """
        Maximum number of indexes to keep. Example: `3`.
        """
        return pulumi.get(self, "max_index_count")

    @property
    @pulumi.getter
    def pattern(self) -> builtins.str:
        """
        fnmatch pattern. Example: `logs_*_foo_*`.
        """
        return pulumi.get(self, "pattern")

    @property
    @pulumi.getter(name="sortingAlgorithm")
    def sorting_algorithm(self) -> Optional[builtins.str]:
        """
        Enum: `alphabetical`, `creation_date`. Deletion sorting algorithm. Default: `creation_date`.
        """
        return pulumi.get(self, "sorting_algorithm")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigIndexRollupResult(dict):
    def __init__(__self__, *,
                 rollup_dashboards_enabled: Optional[builtins.bool] = None,
                 rollup_enabled: Optional[builtins.bool] = None,
                 rollup_search_backoff_count: Optional[builtins.int] = None,
                 rollup_search_backoff_millis: Optional[builtins.int] = None,
                 rollup_search_search_all_jobs: Optional[builtins.bool] = None):
        """
        :param builtins.bool rollup_dashboards_enabled: Whether rollups are enabled in OpenSearch Dashboards. Defaults to true.
        :param builtins.bool rollup_enabled: Whether the rollup plugin is enabled. Defaults to true.
        :param builtins.int rollup_search_backoff_count: How many retries the plugin should attempt for failed rollup jobs. Defaults to 5.
        :param builtins.int rollup_search_backoff_millis: The backoff time between retries for failed rollup jobs. Defaults to 1000ms.
        :param builtins.bool rollup_search_search_all_jobs: Whether OpenSearch should return all jobs that match all specified search terms. If disabled, OpenSearch returns just one, as opposed to all, of the jobs that matches the search terms. Defaults to false.
        """
        if rollup_dashboards_enabled is not None:
            pulumi.set(__self__, "rollup_dashboards_enabled", rollup_dashboards_enabled)
        if rollup_enabled is not None:
            pulumi.set(__self__, "rollup_enabled", rollup_enabled)
        if rollup_search_backoff_count is not None:
            pulumi.set(__self__, "rollup_search_backoff_count", rollup_search_backoff_count)
        if rollup_search_backoff_millis is not None:
            pulumi.set(__self__, "rollup_search_backoff_millis", rollup_search_backoff_millis)
        if rollup_search_search_all_jobs is not None:
            pulumi.set(__self__, "rollup_search_search_all_jobs", rollup_search_search_all_jobs)

    @property
    @pulumi.getter(name="rollupDashboardsEnabled")
    def rollup_dashboards_enabled(self) -> Optional[builtins.bool]:
        """
        Whether rollups are enabled in OpenSearch Dashboards. Defaults to true.
        """
        return pulumi.get(self, "rollup_dashboards_enabled")

    @property
    @pulumi.getter(name="rollupEnabled")
    def rollup_enabled(self) -> Optional[builtins.bool]:
        """
        Whether the rollup plugin is enabled. Defaults to true.
        """
        return pulumi.get(self, "rollup_enabled")

    @property
    @pulumi.getter(name="rollupSearchBackoffCount")
    def rollup_search_backoff_count(self) -> Optional[builtins.int]:
        """
        How many retries the plugin should attempt for failed rollup jobs. Defaults to 5.
        """
        return pulumi.get(self, "rollup_search_backoff_count")

    @property
    @pulumi.getter(name="rollupSearchBackoffMillis")
    def rollup_search_backoff_millis(self) -> Optional[builtins.int]:
        """
        The backoff time between retries for failed rollup jobs. Defaults to 1000ms.
        """
        return pulumi.get(self, "rollup_search_backoff_millis")

    @property
    @pulumi.getter(name="rollupSearchSearchAllJobs")
    def rollup_search_search_all_jobs(self) -> Optional[builtins.bool]:
        """
        Whether OpenSearch should return all jobs that match all specified search terms. If disabled, OpenSearch returns just one, as opposed to all, of the jobs that matches the search terms. Defaults to false.
        """
        return pulumi.get(self, "rollup_search_search_all_jobs")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigIndexTemplateResult(dict):
    def __init__(__self__, *,
                 mapping_nested_objects_limit: Optional[builtins.int] = None,
                 number_of_replicas: Optional[builtins.int] = None,
                 number_of_shards: Optional[builtins.int] = None):
        """
        :param builtins.int mapping_nested_objects_limit: The maximum number of nested JSON objects that a single document can contain across all nested types. This limit helps to prevent out of memory errors when a document contains too many nested objects. Default is 10000. Example: `10000`.
        :param builtins.int number_of_replicas: The number of replicas each primary shard has. Example: `1`.
        :param builtins.int number_of_shards: The number of primary shards that an index should have. Example: `1`.
        """
        if mapping_nested_objects_limit is not None:
            pulumi.set(__self__, "mapping_nested_objects_limit", mapping_nested_objects_limit)
        if number_of_replicas is not None:
            pulumi.set(__self__, "number_of_replicas", number_of_replicas)
        if number_of_shards is not None:
            pulumi.set(__self__, "number_of_shards", number_of_shards)

    @property
    @pulumi.getter(name="mappingNestedObjectsLimit")
    def mapping_nested_objects_limit(self) -> Optional[builtins.int]:
        """
        The maximum number of nested JSON objects that a single document can contain across all nested types. This limit helps to prevent out of memory errors when a document contains too many nested objects. Default is 10000. Example: `10000`.
        """
        return pulumi.get(self, "mapping_nested_objects_limit")

    @property
    @pulumi.getter(name="numberOfReplicas")
    def number_of_replicas(self) -> Optional[builtins.int]:
        """
        The number of replicas each primary shard has. Example: `1`.
        """
        return pulumi.get(self, "number_of_replicas")

    @property
    @pulumi.getter(name="numberOfShards")
    def number_of_shards(self) -> Optional[builtins.int]:
        """
        The number of primary shards that an index should have. Example: `1`.
        """
        return pulumi.get(self, "number_of_shards")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpenidResult(dict):
    def __init__(__self__, *,
                 client_id: builtins.str,
                 client_secret: builtins.str,
                 connect_url: builtins.str,
                 enabled: builtins.bool,
                 header: Optional[builtins.str] = None,
                 jwt_header: Optional[builtins.str] = None,
                 jwt_url_parameter: Optional[builtins.str] = None,
                 refresh_rate_limit_count: Optional[builtins.int] = None,
                 refresh_rate_limit_time_window_ms: Optional[builtins.int] = None,
                 roles_key: Optional[builtins.str] = None,
                 scope: Optional[builtins.str] = None,
                 subject_key: Optional[builtins.str] = None):
        """
        :param builtins.str client_id: The ID of the OpenID Connect client configured in your IdP. Required.
        :param builtins.str client_secret: The client secret of the OpenID Connect client configured in your IdP. Required.
        :param builtins.str connect_url: The URL of your IdP where the Security plugin can find the OpenID Connect metadata/configuration settings. Example: `https://test-account.okta.com/app/exk491jujcVc83LEX697/sso/saml/metadata`.
        :param builtins.bool enabled: Enables or disables OpenID Connect authentication for OpenSearch. When enabled, users can authenticate using OpenID Connect with an Identity Provider. Default: `true`.
        :param builtins.str header: HTTP header name of the JWT token. Optional. Default is Authorization. Default: `Authorization`.
        :param builtins.str jwt_header: The HTTP header that stores the token. Typically the Authorization header with the Bearer schema: Authorization: Bearer <token>. Optional. Default is Authorization. Example: `preferred_username`.
        :param builtins.str jwt_url_parameter: If the token is not transmitted in the HTTP header, but as an URL parameter, define the name of the parameter here. Optional. Example: `preferred_username`.
        :param builtins.int refresh_rate_limit_count: The maximum number of unknown key IDs in the time frame. Default is 10. Optional. Default: `10`.
        :param builtins.int refresh_rate_limit_time_window_ms: The time frame to use when checking the maximum number of unknown key IDs, in milliseconds. Optional.Default is 10000 (10 seconds). Default: `10000`.
        :param builtins.str roles_key: The key in the JSON payload that stores the user’s roles. The value of this key must be a comma-separated list of roles. Required only if you want to use roles in the JWT. Example: `roles`.
        :param builtins.str scope: The scope of the identity token issued by the IdP. Optional. Default is openid profile email address phone.
        :param builtins.str subject_key: The key in the JSON payload that stores the user’s name. If not defined, the subject registered claim is used. Most IdP providers use the preferred_username claim. Optional. Example: `preferred_username`.
        """
        pulumi.set(__self__, "client_id", client_id)
        pulumi.set(__self__, "client_secret", client_secret)
        pulumi.set(__self__, "connect_url", connect_url)
        pulumi.set(__self__, "enabled", enabled)
        if header is not None:
            pulumi.set(__self__, "header", header)
        if jwt_header is not None:
            pulumi.set(__self__, "jwt_header", jwt_header)
        if jwt_url_parameter is not None:
            pulumi.set(__self__, "jwt_url_parameter", jwt_url_parameter)
        if refresh_rate_limit_count is not None:
            pulumi.set(__self__, "refresh_rate_limit_count", refresh_rate_limit_count)
        if refresh_rate_limit_time_window_ms is not None:
            pulumi.set(__self__, "refresh_rate_limit_time_window_ms", refresh_rate_limit_time_window_ms)
        if roles_key is not None:
            pulumi.set(__self__, "roles_key", roles_key)
        if scope is not None:
            pulumi.set(__self__, "scope", scope)
        if subject_key is not None:
            pulumi.set(__self__, "subject_key", subject_key)

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> builtins.str:
        """
        The ID of the OpenID Connect client configured in your IdP. Required.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> builtins.str:
        """
        The client secret of the OpenID Connect client configured in your IdP. Required.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter(name="connectUrl")
    def connect_url(self) -> builtins.str:
        """
        The URL of your IdP where the Security plugin can find the OpenID Connect metadata/configuration settings. Example: `https://test-account.okta.com/app/exk491jujcVc83LEX697/sso/saml/metadata`.
        """
        return pulumi.get(self, "connect_url")

    @property
    @pulumi.getter
    def enabled(self) -> builtins.bool:
        """
        Enables or disables OpenID Connect authentication for OpenSearch. When enabled, users can authenticate using OpenID Connect with an Identity Provider. Default: `true`.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter
    def header(self) -> Optional[builtins.str]:
        """
        HTTP header name of the JWT token. Optional. Default is Authorization. Default: `Authorization`.
        """
        return pulumi.get(self, "header")

    @property
    @pulumi.getter(name="jwtHeader")
    def jwt_header(self) -> Optional[builtins.str]:
        """
        The HTTP header that stores the token. Typically the Authorization header with the Bearer schema: Authorization: Bearer <token>. Optional. Default is Authorization. Example: `preferred_username`.
        """
        return pulumi.get(self, "jwt_header")

    @property
    @pulumi.getter(name="jwtUrlParameter")
    def jwt_url_parameter(self) -> Optional[builtins.str]:
        """
        If the token is not transmitted in the HTTP header, but as an URL parameter, define the name of the parameter here. Optional. Example: `preferred_username`.
        """
        return pulumi.get(self, "jwt_url_parameter")

    @property
    @pulumi.getter(name="refreshRateLimitCount")
    def refresh_rate_limit_count(self) -> Optional[builtins.int]:
        """
        The maximum number of unknown key IDs in the time frame. Default is 10. Optional. Default: `10`.
        """
        return pulumi.get(self, "refresh_rate_limit_count")

    @property
    @pulumi.getter(name="refreshRateLimitTimeWindowMs")
    def refresh_rate_limit_time_window_ms(self) -> Optional[builtins.int]:
        """
        The time frame to use when checking the maximum number of unknown key IDs, in milliseconds. Optional.Default is 10000 (10 seconds). Default: `10000`.
        """
        return pulumi.get(self, "refresh_rate_limit_time_window_ms")

    @property
    @pulumi.getter(name="rolesKey")
    def roles_key(self) -> Optional[builtins.str]:
        """
        The key in the JSON payload that stores the user’s roles. The value of this key must be a comma-separated list of roles. Required only if you want to use roles in the JWT. Example: `roles`.
        """
        return pulumi.get(self, "roles_key")

    @property
    @pulumi.getter
    def scope(self) -> Optional[builtins.str]:
        """
        The scope of the identity token issued by the IdP. Optional. Default is openid profile email address phone.
        """
        return pulumi.get(self, "scope")

    @property
    @pulumi.getter(name="subjectKey")
    def subject_key(self) -> Optional[builtins.str]:
        """
        The key in the JSON payload that stores the user’s name. If not defined, the subject registered claim is used. Most IdP providers use the preferred_username claim. Optional. Example: `preferred_username`.
        """
        return pulumi.get(self, "subject_key")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchResult(dict):
    def __init__(__self__, *,
                 action_auto_create_index_enabled: Optional[builtins.bool] = None,
                 action_destructive_requires_name: Optional[builtins.bool] = None,
                 auth_failure_listeners: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchAuthFailureListenersResult'] = None,
                 cluster_max_shards_per_node: Optional[builtins.int] = None,
                 cluster_routing_allocation_balance_prefer_primary: Optional[builtins.bool] = None,
                 cluster_routing_allocation_node_concurrent_recoveries: Optional[builtins.int] = None,
                 cluster_search_request_slowlog: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchClusterSearchRequestSlowlogResult'] = None,
                 disk_watermarks: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchDiskWatermarksResult'] = None,
                 email_sender_name: Optional[builtins.str] = None,
                 email_sender_password: Optional[builtins.str] = None,
                 email_sender_username: Optional[builtins.str] = None,
                 enable_remote_backed_storage: Optional[builtins.bool] = None,
                 enable_searchable_snapshots: Optional[builtins.bool] = None,
                 enable_security_audit: Optional[builtins.bool] = None,
                 enable_snapshot_api: Optional[builtins.bool] = None,
                 http_max_content_length: Optional[builtins.int] = None,
                 http_max_header_size: Optional[builtins.int] = None,
                 http_max_initial_line_length: Optional[builtins.int] = None,
                 indices_fielddata_cache_size: Optional[builtins.int] = None,
                 indices_memory_index_buffer_size: Optional[builtins.int] = None,
                 indices_memory_max_index_buffer_size: Optional[builtins.int] = None,
                 indices_memory_min_index_buffer_size: Optional[builtins.int] = None,
                 indices_queries_cache_size: Optional[builtins.int] = None,
                 indices_query_bool_max_clause_count: Optional[builtins.int] = None,
                 indices_recovery_max_bytes_per_sec: Optional[builtins.int] = None,
                 indices_recovery_max_concurrent_file_chunks: Optional[builtins.int] = None,
                 ism_enabled: Optional[builtins.bool] = None,
                 ism_history_enabled: Optional[builtins.bool] = None,
                 ism_history_max_age: Optional[builtins.int] = None,
                 ism_history_max_docs: Optional[builtins.int] = None,
                 ism_history_rollover_check_period: Optional[builtins.int] = None,
                 ism_history_rollover_retention_period: Optional[builtins.int] = None,
                 knn_memory_circuit_breaker_enabled: Optional[builtins.bool] = None,
                 knn_memory_circuit_breaker_limit: Optional[builtins.int] = None,
                 override_main_response_version: Optional[builtins.bool] = None,
                 plugins_alerting_filter_by_backend_roles: Optional[builtins.bool] = None,
                 reindex_remote_whitelists: Optional[Sequence[builtins.str]] = None,
                 script_max_compilations_rate: Optional[builtins.str] = None,
                 search_backpressure: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureResult'] = None,
                 search_insights_top_queries: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesResult'] = None,
                 search_max_buckets: Optional[builtins.int] = None,
                 segrep: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSegrepResult'] = None,
                 shard_indexing_pressure: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressureResult'] = None,
                 thread_pool_analyze_queue_size: Optional[builtins.int] = None,
                 thread_pool_analyze_size: Optional[builtins.int] = None,
                 thread_pool_force_merge_size: Optional[builtins.int] = None,
                 thread_pool_get_queue_size: Optional[builtins.int] = None,
                 thread_pool_get_size: Optional[builtins.int] = None,
                 thread_pool_search_queue_size: Optional[builtins.int] = None,
                 thread_pool_search_size: Optional[builtins.int] = None,
                 thread_pool_search_throttled_queue_size: Optional[builtins.int] = None,
                 thread_pool_search_throttled_size: Optional[builtins.int] = None,
                 thread_pool_write_queue_size: Optional[builtins.int] = None,
                 thread_pool_write_size: Optional[builtins.int] = None):
        """
        :param builtins.bool action_auto_create_index_enabled: Explicitly allow or block automatic creation of indices. Defaults to true.
        :param builtins.bool action_destructive_requires_name: Require explicit index names when deleting.
        :param 'GetOpenSearchOpensearchUserConfigOpensearchAuthFailureListenersArgs' auth_failure_listeners: Opensearch Security Plugin Settings
        :param builtins.int cluster_max_shards_per_node: Controls the number of shards allowed in the cluster per data node. Example: `1000`.
        :param builtins.bool cluster_routing_allocation_balance_prefer_primary: When set to true, OpenSearch attempts to evenly distribute the primary shards between the cluster nodes. Enabling this setting does not always guarantee an equal number of primary shards on each node, especially in the event of a failover. Changing this setting to false after it was set to true does not invoke redistribution of primary shards. Default is false. Default: `false`.
        :param builtins.int cluster_routing_allocation_node_concurrent_recoveries: How many concurrent incoming/outgoing shard recoveries (normally replicas) are allowed to happen on a node. Defaults to node cpu count * 2.
        :param 'GetOpenSearchOpensearchUserConfigOpensearchDiskWatermarksArgs' disk_watermarks: Watermark settings
        :param builtins.str email_sender_name: Sender name placeholder to be used in Opensearch Dashboards and Opensearch keystore. Example: `alert-sender`.
        :param builtins.str email_sender_password: Sender password for Opensearch alerts to authenticate with SMTP server. Example: `very-secure-mail-password`.
        :param builtins.str email_sender_username: Sender username for Opensearch alerts. Example: `jane@example.com`.
        :param builtins.bool enable_remote_backed_storage: Enable remote-backed storage.
        :param builtins.bool enable_searchable_snapshots: Enable searchable snapshots.
        :param builtins.bool enable_security_audit: Enable/Disable security audit.
        :param builtins.bool enable_snapshot_api: Enable/Disable snapshot API for custom repositories, this requires security management to be enabled.
        :param builtins.int http_max_content_length: Maximum content length for HTTP requests to the OpenSearch HTTP API, in bytes.
        :param builtins.int http_max_header_size: The max size of allowed headers, in bytes. Example: `8192`.
        :param builtins.int http_max_initial_line_length: The max length of an HTTP URL, in bytes. Example: `4096`.
        :param builtins.int indices_fielddata_cache_size: Relative amount. Maximum amount of heap memory used for field data cache. This is an expert setting; decreasing the value too much will increase overhead of loading field data; too much memory used for field data cache will decrease amount of heap available for other operations.
        :param builtins.int indices_memory_index_buffer_size: Percentage value. Default is 10%. Total amount of heap used for indexing buffer, before writing segments to disk. This is an expert setting. Too low value will slow down indexing; too high value will increase indexing performance but causes performance issues for query performance.
        :param builtins.int indices_memory_max_index_buffer_size: Absolute value. Default is unbound. Doesn't work without indices.memory.index_buffer_size. Maximum amount of heap used for query cache, an absolute indices.memory.index_buffer_size maximum hard limit.
        :param builtins.int indices_memory_min_index_buffer_size: Absolute value. Default is 48mb. Doesn't work without indices.memory.index_buffer_size. Minimum amount of heap used for query cache, an absolute indices.memory.index_buffer_size minimal hard limit.
        :param builtins.int indices_queries_cache_size: Percentage value. Default is 10%. Maximum amount of heap used for query cache. This is an expert setting. Too low value will decrease query performance and increase performance for other operations; too high value will cause issues with other OpenSearch functionality.
        :param builtins.int indices_query_bool_max_clause_count: Maximum number of clauses Lucene BooleanQuery can have. The default value (1024) is relatively high, and increasing it may cause performance issues. Investigate other approaches first before increasing this value.
        :param builtins.int indices_recovery_max_bytes_per_sec: Limits total inbound and outbound recovery traffic for each node. Applies to both peer recoveries as well as snapshot recoveries (i.e., restores from a snapshot). Defaults to 40mb.
        :param builtins.int indices_recovery_max_concurrent_file_chunks: Number of file chunks sent in parallel for each recovery. Defaults to 2.
        :param builtins.bool ism_enabled: Specifies whether ISM is enabled or not.
        :param builtins.bool ism_history_enabled: Specifies whether audit history is enabled or not. The logs from ISM are automatically indexed to a logs document.
        :param builtins.int ism_history_max_age: The maximum age before rolling over the audit history index in hours. Example: `24`.
        :param builtins.int ism_history_max_docs: The maximum number of documents before rolling over the audit history index. Example: `2500000`.
        :param builtins.int ism_history_rollover_check_period: The time between rollover checks for the audit history index in hours. Example: `8`.
        :param builtins.int ism_history_rollover_retention_period: How long audit history indices are kept in days. Example: `30`.
        :param builtins.bool knn_memory_circuit_breaker_enabled: Enable or disable KNN memory circuit breaker. Defaults to true.
        :param builtins.int knn_memory_circuit_breaker_limit: Maximum amount of memory that can be used for KNN index. Defaults to 50% of the JVM heap size.
        :param builtins.bool override_main_response_version: Compatibility mode sets OpenSearch to report its version as 7.10 so clients continue to work. Default is false.
        :param builtins.bool plugins_alerting_filter_by_backend_roles: Enable or disable filtering of alerting by backend roles. Requires Security plugin. Defaults to false.
        :param Sequence[builtins.str] reindex_remote_whitelists: Whitelisted addresses for reindexing. Changing this value will cause all OpenSearch instances to restart.
        :param builtins.str script_max_compilations_rate: Script compilation circuit breaker limits the number of inline script compilations within a period of time. Default is use-context. Example: `75/5m`.
        :param 'GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureArgs' search_backpressure: Search Backpressure Settings
        :param builtins.int search_max_buckets: Maximum number of aggregation buckets allowed in a single response. OpenSearch default value is used when this is not defined. Example: `10000`.
        :param 'GetOpenSearchOpensearchUserConfigOpensearchSegrepArgs' segrep: Segment Replication Backpressure Settings
        :param 'GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressureArgs' shard_indexing_pressure: Shard indexing back pressure settings
        :param builtins.int thread_pool_analyze_queue_size: Size for the thread pool queue. See documentation for exact details.
        :param builtins.int thread_pool_analyze_size: Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        :param builtins.int thread_pool_force_merge_size: Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        :param builtins.int thread_pool_get_queue_size: Size for the thread pool queue. See documentation for exact details.
        :param builtins.int thread_pool_get_size: Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        :param builtins.int thread_pool_search_queue_size: Size for the thread pool queue. See documentation for exact details.
        :param builtins.int thread_pool_search_size: Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        :param builtins.int thread_pool_search_throttled_queue_size: Size for the thread pool queue. See documentation for exact details.
        :param builtins.int thread_pool_search_throttled_size: Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        :param builtins.int thread_pool_write_queue_size: Size for the thread pool queue. See documentation for exact details.
        :param builtins.int thread_pool_write_size: Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        """
        if action_auto_create_index_enabled is not None:
            pulumi.set(__self__, "action_auto_create_index_enabled", action_auto_create_index_enabled)
        if action_destructive_requires_name is not None:
            pulumi.set(__self__, "action_destructive_requires_name", action_destructive_requires_name)
        if auth_failure_listeners is not None:
            pulumi.set(__self__, "auth_failure_listeners", auth_failure_listeners)
        if cluster_max_shards_per_node is not None:
            pulumi.set(__self__, "cluster_max_shards_per_node", cluster_max_shards_per_node)
        if cluster_routing_allocation_balance_prefer_primary is not None:
            pulumi.set(__self__, "cluster_routing_allocation_balance_prefer_primary", cluster_routing_allocation_balance_prefer_primary)
        if cluster_routing_allocation_node_concurrent_recoveries is not None:
            pulumi.set(__self__, "cluster_routing_allocation_node_concurrent_recoveries", cluster_routing_allocation_node_concurrent_recoveries)
        if cluster_search_request_slowlog is not None:
            pulumi.set(__self__, "cluster_search_request_slowlog", cluster_search_request_slowlog)
        if disk_watermarks is not None:
            pulumi.set(__self__, "disk_watermarks", disk_watermarks)
        if email_sender_name is not None:
            pulumi.set(__self__, "email_sender_name", email_sender_name)
        if email_sender_password is not None:
            pulumi.set(__self__, "email_sender_password", email_sender_password)
        if email_sender_username is not None:
            pulumi.set(__self__, "email_sender_username", email_sender_username)
        if enable_remote_backed_storage is not None:
            pulumi.set(__self__, "enable_remote_backed_storage", enable_remote_backed_storage)
        if enable_searchable_snapshots is not None:
            pulumi.set(__self__, "enable_searchable_snapshots", enable_searchable_snapshots)
        if enable_security_audit is not None:
            pulumi.set(__self__, "enable_security_audit", enable_security_audit)
        if enable_snapshot_api is not None:
            pulumi.set(__self__, "enable_snapshot_api", enable_snapshot_api)
        if http_max_content_length is not None:
            pulumi.set(__self__, "http_max_content_length", http_max_content_length)
        if http_max_header_size is not None:
            pulumi.set(__self__, "http_max_header_size", http_max_header_size)
        if http_max_initial_line_length is not None:
            pulumi.set(__self__, "http_max_initial_line_length", http_max_initial_line_length)
        if indices_fielddata_cache_size is not None:
            pulumi.set(__self__, "indices_fielddata_cache_size", indices_fielddata_cache_size)
        if indices_memory_index_buffer_size is not None:
            pulumi.set(__self__, "indices_memory_index_buffer_size", indices_memory_index_buffer_size)
        if indices_memory_max_index_buffer_size is not None:
            pulumi.set(__self__, "indices_memory_max_index_buffer_size", indices_memory_max_index_buffer_size)
        if indices_memory_min_index_buffer_size is not None:
            pulumi.set(__self__, "indices_memory_min_index_buffer_size", indices_memory_min_index_buffer_size)
        if indices_queries_cache_size is not None:
            pulumi.set(__self__, "indices_queries_cache_size", indices_queries_cache_size)
        if indices_query_bool_max_clause_count is not None:
            pulumi.set(__self__, "indices_query_bool_max_clause_count", indices_query_bool_max_clause_count)
        if indices_recovery_max_bytes_per_sec is not None:
            pulumi.set(__self__, "indices_recovery_max_bytes_per_sec", indices_recovery_max_bytes_per_sec)
        if indices_recovery_max_concurrent_file_chunks is not None:
            pulumi.set(__self__, "indices_recovery_max_concurrent_file_chunks", indices_recovery_max_concurrent_file_chunks)
        if ism_enabled is not None:
            pulumi.set(__self__, "ism_enabled", ism_enabled)
        if ism_history_enabled is not None:
            pulumi.set(__self__, "ism_history_enabled", ism_history_enabled)
        if ism_history_max_age is not None:
            pulumi.set(__self__, "ism_history_max_age", ism_history_max_age)
        if ism_history_max_docs is not None:
            pulumi.set(__self__, "ism_history_max_docs", ism_history_max_docs)
        if ism_history_rollover_check_period is not None:
            pulumi.set(__self__, "ism_history_rollover_check_period", ism_history_rollover_check_period)
        if ism_history_rollover_retention_period is not None:
            pulumi.set(__self__, "ism_history_rollover_retention_period", ism_history_rollover_retention_period)
        if knn_memory_circuit_breaker_enabled is not None:
            pulumi.set(__self__, "knn_memory_circuit_breaker_enabled", knn_memory_circuit_breaker_enabled)
        if knn_memory_circuit_breaker_limit is not None:
            pulumi.set(__self__, "knn_memory_circuit_breaker_limit", knn_memory_circuit_breaker_limit)
        if override_main_response_version is not None:
            pulumi.set(__self__, "override_main_response_version", override_main_response_version)
        if plugins_alerting_filter_by_backend_roles is not None:
            pulumi.set(__self__, "plugins_alerting_filter_by_backend_roles", plugins_alerting_filter_by_backend_roles)
        if reindex_remote_whitelists is not None:
            pulumi.set(__self__, "reindex_remote_whitelists", reindex_remote_whitelists)
        if script_max_compilations_rate is not None:
            pulumi.set(__self__, "script_max_compilations_rate", script_max_compilations_rate)
        if search_backpressure is not None:
            pulumi.set(__self__, "search_backpressure", search_backpressure)
        if search_insights_top_queries is not None:
            pulumi.set(__self__, "search_insights_top_queries", search_insights_top_queries)
        if search_max_buckets is not None:
            pulumi.set(__self__, "search_max_buckets", search_max_buckets)
        if segrep is not None:
            pulumi.set(__self__, "segrep", segrep)
        if shard_indexing_pressure is not None:
            pulumi.set(__self__, "shard_indexing_pressure", shard_indexing_pressure)
        if thread_pool_analyze_queue_size is not None:
            pulumi.set(__self__, "thread_pool_analyze_queue_size", thread_pool_analyze_queue_size)
        if thread_pool_analyze_size is not None:
            pulumi.set(__self__, "thread_pool_analyze_size", thread_pool_analyze_size)
        if thread_pool_force_merge_size is not None:
            pulumi.set(__self__, "thread_pool_force_merge_size", thread_pool_force_merge_size)
        if thread_pool_get_queue_size is not None:
            pulumi.set(__self__, "thread_pool_get_queue_size", thread_pool_get_queue_size)
        if thread_pool_get_size is not None:
            pulumi.set(__self__, "thread_pool_get_size", thread_pool_get_size)
        if thread_pool_search_queue_size is not None:
            pulumi.set(__self__, "thread_pool_search_queue_size", thread_pool_search_queue_size)
        if thread_pool_search_size is not None:
            pulumi.set(__self__, "thread_pool_search_size", thread_pool_search_size)
        if thread_pool_search_throttled_queue_size is not None:
            pulumi.set(__self__, "thread_pool_search_throttled_queue_size", thread_pool_search_throttled_queue_size)
        if thread_pool_search_throttled_size is not None:
            pulumi.set(__self__, "thread_pool_search_throttled_size", thread_pool_search_throttled_size)
        if thread_pool_write_queue_size is not None:
            pulumi.set(__self__, "thread_pool_write_queue_size", thread_pool_write_queue_size)
        if thread_pool_write_size is not None:
            pulumi.set(__self__, "thread_pool_write_size", thread_pool_write_size)

    @property
    @pulumi.getter(name="actionAutoCreateIndexEnabled")
    def action_auto_create_index_enabled(self) -> Optional[builtins.bool]:
        """
        Explicitly allow or block automatic creation of indices. Defaults to true.
        """
        return pulumi.get(self, "action_auto_create_index_enabled")

    @property
    @pulumi.getter(name="actionDestructiveRequiresName")
    def action_destructive_requires_name(self) -> Optional[builtins.bool]:
        """
        Require explicit index names when deleting.
        """
        return pulumi.get(self, "action_destructive_requires_name")

    @property
    @pulumi.getter(name="authFailureListeners")
    def auth_failure_listeners(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchAuthFailureListenersResult']:
        """
        Opensearch Security Plugin Settings
        """
        return pulumi.get(self, "auth_failure_listeners")

    @property
    @pulumi.getter(name="clusterMaxShardsPerNode")
    def cluster_max_shards_per_node(self) -> Optional[builtins.int]:
        """
        Controls the number of shards allowed in the cluster per data node. Example: `1000`.
        """
        return pulumi.get(self, "cluster_max_shards_per_node")

    @property
    @pulumi.getter(name="clusterRoutingAllocationBalancePreferPrimary")
    def cluster_routing_allocation_balance_prefer_primary(self) -> Optional[builtins.bool]:
        """
        When set to true, OpenSearch attempts to evenly distribute the primary shards between the cluster nodes. Enabling this setting does not always guarantee an equal number of primary shards on each node, especially in the event of a failover. Changing this setting to false after it was set to true does not invoke redistribution of primary shards. Default is false. Default: `false`.
        """
        return pulumi.get(self, "cluster_routing_allocation_balance_prefer_primary")

    @property
    @pulumi.getter(name="clusterRoutingAllocationNodeConcurrentRecoveries")
    def cluster_routing_allocation_node_concurrent_recoveries(self) -> Optional[builtins.int]:
        """
        How many concurrent incoming/outgoing shard recoveries (normally replicas) are allowed to happen on a node. Defaults to node cpu count * 2.
        """
        return pulumi.get(self, "cluster_routing_allocation_node_concurrent_recoveries")

    @property
    @pulumi.getter(name="clusterSearchRequestSlowlog")
    def cluster_search_request_slowlog(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchClusterSearchRequestSlowlogResult']:
        return pulumi.get(self, "cluster_search_request_slowlog")

    @property
    @pulumi.getter(name="diskWatermarks")
    def disk_watermarks(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchDiskWatermarksResult']:
        """
        Watermark settings
        """
        return pulumi.get(self, "disk_watermarks")

    @property
    @pulumi.getter(name="emailSenderName")
    def email_sender_name(self) -> Optional[builtins.str]:
        """
        Sender name placeholder to be used in Opensearch Dashboards and Opensearch keystore. Example: `alert-sender`.
        """
        return pulumi.get(self, "email_sender_name")

    @property
    @pulumi.getter(name="emailSenderPassword")
    def email_sender_password(self) -> Optional[builtins.str]:
        """
        Sender password for Opensearch alerts to authenticate with SMTP server. Example: `very-secure-mail-password`.
        """
        return pulumi.get(self, "email_sender_password")

    @property
    @pulumi.getter(name="emailSenderUsername")
    def email_sender_username(self) -> Optional[builtins.str]:
        """
        Sender username for Opensearch alerts. Example: `jane@example.com`.
        """
        return pulumi.get(self, "email_sender_username")

    @property
    @pulumi.getter(name="enableRemoteBackedStorage")
    def enable_remote_backed_storage(self) -> Optional[builtins.bool]:
        """
        Enable remote-backed storage.
        """
        return pulumi.get(self, "enable_remote_backed_storage")

    @property
    @pulumi.getter(name="enableSearchableSnapshots")
    def enable_searchable_snapshots(self) -> Optional[builtins.bool]:
        """
        Enable searchable snapshots.
        """
        return pulumi.get(self, "enable_searchable_snapshots")

    @property
    @pulumi.getter(name="enableSecurityAudit")
    def enable_security_audit(self) -> Optional[builtins.bool]:
        """
        Enable/Disable security audit.
        """
        return pulumi.get(self, "enable_security_audit")

    @property
    @pulumi.getter(name="enableSnapshotApi")
    def enable_snapshot_api(self) -> Optional[builtins.bool]:
        """
        Enable/Disable snapshot API for custom repositories, this requires security management to be enabled.
        """
        return pulumi.get(self, "enable_snapshot_api")

    @property
    @pulumi.getter(name="httpMaxContentLength")
    def http_max_content_length(self) -> Optional[builtins.int]:
        """
        Maximum content length for HTTP requests to the OpenSearch HTTP API, in bytes.
        """
        return pulumi.get(self, "http_max_content_length")

    @property
    @pulumi.getter(name="httpMaxHeaderSize")
    def http_max_header_size(self) -> Optional[builtins.int]:
        """
        The max size of allowed headers, in bytes. Example: `8192`.
        """
        return pulumi.get(self, "http_max_header_size")

    @property
    @pulumi.getter(name="httpMaxInitialLineLength")
    def http_max_initial_line_length(self) -> Optional[builtins.int]:
        """
        The max length of an HTTP URL, in bytes. Example: `4096`.
        """
        return pulumi.get(self, "http_max_initial_line_length")

    @property
    @pulumi.getter(name="indicesFielddataCacheSize")
    def indices_fielddata_cache_size(self) -> Optional[builtins.int]:
        """
        Relative amount. Maximum amount of heap memory used for field data cache. This is an expert setting; decreasing the value too much will increase overhead of loading field data; too much memory used for field data cache will decrease amount of heap available for other operations.
        """
        return pulumi.get(self, "indices_fielddata_cache_size")

    @property
    @pulumi.getter(name="indicesMemoryIndexBufferSize")
    def indices_memory_index_buffer_size(self) -> Optional[builtins.int]:
        """
        Percentage value. Default is 10%. Total amount of heap used for indexing buffer, before writing segments to disk. This is an expert setting. Too low value will slow down indexing; too high value will increase indexing performance but causes performance issues for query performance.
        """
        return pulumi.get(self, "indices_memory_index_buffer_size")

    @property
    @pulumi.getter(name="indicesMemoryMaxIndexBufferSize")
    def indices_memory_max_index_buffer_size(self) -> Optional[builtins.int]:
        """
        Absolute value. Default is unbound. Doesn't work without indices.memory.index_buffer_size. Maximum amount of heap used for query cache, an absolute indices.memory.index_buffer_size maximum hard limit.
        """
        return pulumi.get(self, "indices_memory_max_index_buffer_size")

    @property
    @pulumi.getter(name="indicesMemoryMinIndexBufferSize")
    def indices_memory_min_index_buffer_size(self) -> Optional[builtins.int]:
        """
        Absolute value. Default is 48mb. Doesn't work without indices.memory.index_buffer_size. Minimum amount of heap used for query cache, an absolute indices.memory.index_buffer_size minimal hard limit.
        """
        return pulumi.get(self, "indices_memory_min_index_buffer_size")

    @property
    @pulumi.getter(name="indicesQueriesCacheSize")
    def indices_queries_cache_size(self) -> Optional[builtins.int]:
        """
        Percentage value. Default is 10%. Maximum amount of heap used for query cache. This is an expert setting. Too low value will decrease query performance and increase performance for other operations; too high value will cause issues with other OpenSearch functionality.
        """
        return pulumi.get(self, "indices_queries_cache_size")

    @property
    @pulumi.getter(name="indicesQueryBoolMaxClauseCount")
    def indices_query_bool_max_clause_count(self) -> Optional[builtins.int]:
        """
        Maximum number of clauses Lucene BooleanQuery can have. The default value (1024) is relatively high, and increasing it may cause performance issues. Investigate other approaches first before increasing this value.
        """
        return pulumi.get(self, "indices_query_bool_max_clause_count")

    @property
    @pulumi.getter(name="indicesRecoveryMaxBytesPerSec")
    def indices_recovery_max_bytes_per_sec(self) -> Optional[builtins.int]:
        """
        Limits total inbound and outbound recovery traffic for each node. Applies to both peer recoveries as well as snapshot recoveries (i.e., restores from a snapshot). Defaults to 40mb.
        """
        return pulumi.get(self, "indices_recovery_max_bytes_per_sec")

    @property
    @pulumi.getter(name="indicesRecoveryMaxConcurrentFileChunks")
    def indices_recovery_max_concurrent_file_chunks(self) -> Optional[builtins.int]:
        """
        Number of file chunks sent in parallel for each recovery. Defaults to 2.
        """
        return pulumi.get(self, "indices_recovery_max_concurrent_file_chunks")

    @property
    @pulumi.getter(name="ismEnabled")
    def ism_enabled(self) -> Optional[builtins.bool]:
        """
        Specifies whether ISM is enabled or not.
        """
        return pulumi.get(self, "ism_enabled")

    @property
    @pulumi.getter(name="ismHistoryEnabled")
    def ism_history_enabled(self) -> Optional[builtins.bool]:
        """
        Specifies whether audit history is enabled or not. The logs from ISM are automatically indexed to a logs document.
        """
        return pulumi.get(self, "ism_history_enabled")

    @property
    @pulumi.getter(name="ismHistoryMaxAge")
    def ism_history_max_age(self) -> Optional[builtins.int]:
        """
        The maximum age before rolling over the audit history index in hours. Example: `24`.
        """
        return pulumi.get(self, "ism_history_max_age")

    @property
    @pulumi.getter(name="ismHistoryMaxDocs")
    def ism_history_max_docs(self) -> Optional[builtins.int]:
        """
        The maximum number of documents before rolling over the audit history index. Example: `2500000`.
        """
        return pulumi.get(self, "ism_history_max_docs")

    @property
    @pulumi.getter(name="ismHistoryRolloverCheckPeriod")
    def ism_history_rollover_check_period(self) -> Optional[builtins.int]:
        """
        The time between rollover checks for the audit history index in hours. Example: `8`.
        """
        return pulumi.get(self, "ism_history_rollover_check_period")

    @property
    @pulumi.getter(name="ismHistoryRolloverRetentionPeriod")
    def ism_history_rollover_retention_period(self) -> Optional[builtins.int]:
        """
        How long audit history indices are kept in days. Example: `30`.
        """
        return pulumi.get(self, "ism_history_rollover_retention_period")

    @property
    @pulumi.getter(name="knnMemoryCircuitBreakerEnabled")
    def knn_memory_circuit_breaker_enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable KNN memory circuit breaker. Defaults to true.
        """
        return pulumi.get(self, "knn_memory_circuit_breaker_enabled")

    @property
    @pulumi.getter(name="knnMemoryCircuitBreakerLimit")
    def knn_memory_circuit_breaker_limit(self) -> Optional[builtins.int]:
        """
        Maximum amount of memory that can be used for KNN index. Defaults to 50% of the JVM heap size.
        """
        return pulumi.get(self, "knn_memory_circuit_breaker_limit")

    @property
    @pulumi.getter(name="overrideMainResponseVersion")
    def override_main_response_version(self) -> Optional[builtins.bool]:
        """
        Compatibility mode sets OpenSearch to report its version as 7.10 so clients continue to work. Default is false.
        """
        return pulumi.get(self, "override_main_response_version")

    @property
    @pulumi.getter(name="pluginsAlertingFilterByBackendRoles")
    def plugins_alerting_filter_by_backend_roles(self) -> Optional[builtins.bool]:
        """
        Enable or disable filtering of alerting by backend roles. Requires Security plugin. Defaults to false.
        """
        return pulumi.get(self, "plugins_alerting_filter_by_backend_roles")

    @property
    @pulumi.getter(name="reindexRemoteWhitelists")
    def reindex_remote_whitelists(self) -> Optional[Sequence[builtins.str]]:
        """
        Whitelisted addresses for reindexing. Changing this value will cause all OpenSearch instances to restart.
        """
        return pulumi.get(self, "reindex_remote_whitelists")

    @property
    @pulumi.getter(name="scriptMaxCompilationsRate")
    def script_max_compilations_rate(self) -> Optional[builtins.str]:
        """
        Script compilation circuit breaker limits the number of inline script compilations within a period of time. Default is use-context. Example: `75/5m`.
        """
        return pulumi.get(self, "script_max_compilations_rate")

    @property
    @pulumi.getter(name="searchBackpressure")
    def search_backpressure(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureResult']:
        """
        Search Backpressure Settings
        """
        return pulumi.get(self, "search_backpressure")

    @property
    @pulumi.getter(name="searchInsightsTopQueries")
    def search_insights_top_queries(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesResult']:
        return pulumi.get(self, "search_insights_top_queries")

    @property
    @pulumi.getter(name="searchMaxBuckets")
    def search_max_buckets(self) -> Optional[builtins.int]:
        """
        Maximum number of aggregation buckets allowed in a single response. OpenSearch default value is used when this is not defined. Example: `10000`.
        """
        return pulumi.get(self, "search_max_buckets")

    @property
    @pulumi.getter
    def segrep(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSegrepResult']:
        """
        Segment Replication Backpressure Settings
        """
        return pulumi.get(self, "segrep")

    @property
    @pulumi.getter(name="shardIndexingPressure")
    def shard_indexing_pressure(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressureResult']:
        """
        Shard indexing back pressure settings
        """
        return pulumi.get(self, "shard_indexing_pressure")

    @property
    @pulumi.getter(name="threadPoolAnalyzeQueueSize")
    def thread_pool_analyze_queue_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool queue. See documentation for exact details.
        """
        return pulumi.get(self, "thread_pool_analyze_queue_size")

    @property
    @pulumi.getter(name="threadPoolAnalyzeSize")
    def thread_pool_analyze_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        """
        return pulumi.get(self, "thread_pool_analyze_size")

    @property
    @pulumi.getter(name="threadPoolForceMergeSize")
    def thread_pool_force_merge_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        """
        return pulumi.get(self, "thread_pool_force_merge_size")

    @property
    @pulumi.getter(name="threadPoolGetQueueSize")
    def thread_pool_get_queue_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool queue. See documentation for exact details.
        """
        return pulumi.get(self, "thread_pool_get_queue_size")

    @property
    @pulumi.getter(name="threadPoolGetSize")
    def thread_pool_get_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        """
        return pulumi.get(self, "thread_pool_get_size")

    @property
    @pulumi.getter(name="threadPoolSearchQueueSize")
    def thread_pool_search_queue_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool queue. See documentation for exact details.
        """
        return pulumi.get(self, "thread_pool_search_queue_size")

    @property
    @pulumi.getter(name="threadPoolSearchSize")
    def thread_pool_search_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        """
        return pulumi.get(self, "thread_pool_search_size")

    @property
    @pulumi.getter(name="threadPoolSearchThrottledQueueSize")
    def thread_pool_search_throttled_queue_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool queue. See documentation for exact details.
        """
        return pulumi.get(self, "thread_pool_search_throttled_queue_size")

    @property
    @pulumi.getter(name="threadPoolSearchThrottledSize")
    def thread_pool_search_throttled_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        """
        return pulumi.get(self, "thread_pool_search_throttled_size")

    @property
    @pulumi.getter(name="threadPoolWriteQueueSize")
    def thread_pool_write_queue_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool queue. See documentation for exact details.
        """
        return pulumi.get(self, "thread_pool_write_queue_size")

    @property
    @pulumi.getter(name="threadPoolWriteSize")
    def thread_pool_write_size(self) -> Optional[builtins.int]:
        """
        Size for the thread pool. See documentation for exact details. Do note this may have maximum value depending on CPU count - value is automatically lowered if set to higher than maximum value.
        """
        return pulumi.get(self, "thread_pool_write_size")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchAuthFailureListenersResult(dict):
    def __init__(__self__, *,
                 internal_authentication_backend_limiting: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchAuthFailureListenersInternalAuthenticationBackendLimitingResult'] = None,
                 ip_rate_limiting: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchAuthFailureListenersIpRateLimitingResult'] = None):
        """
        :param 'GetOpenSearchOpensearchUserConfigOpensearchAuthFailureListenersIpRateLimitingArgs' ip_rate_limiting: IP address rate limiting settings
        """
        if internal_authentication_backend_limiting is not None:
            pulumi.set(__self__, "internal_authentication_backend_limiting", internal_authentication_backend_limiting)
        if ip_rate_limiting is not None:
            pulumi.set(__self__, "ip_rate_limiting", ip_rate_limiting)

    @property
    @pulumi.getter(name="internalAuthenticationBackendLimiting")
    def internal_authentication_backend_limiting(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchAuthFailureListenersInternalAuthenticationBackendLimitingResult']:
        return pulumi.get(self, "internal_authentication_backend_limiting")

    @property
    @pulumi.getter(name="ipRateLimiting")
    @_utilities.deprecated("""This property is deprecated.""")
    def ip_rate_limiting(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchAuthFailureListenersIpRateLimitingResult']:
        """
        IP address rate limiting settings
        """
        return pulumi.get(self, "ip_rate_limiting")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchAuthFailureListenersInternalAuthenticationBackendLimitingResult(dict):
    def __init__(__self__, *,
                 allowed_tries: Optional[builtins.int] = None,
                 authentication_backend: Optional[builtins.str] = None,
                 block_expiry_seconds: Optional[builtins.int] = None,
                 max_blocked_clients: Optional[builtins.int] = None,
                 max_tracked_clients: Optional[builtins.int] = None,
                 time_window_seconds: Optional[builtins.int] = None,
                 type: Optional[builtins.str] = None):
        """
        :param builtins.int allowed_tries: The number of login attempts allowed before login is blocked. Example: `10`.
        :param builtins.str authentication_backend: Enum: `internal`. internal_authentication_backend_limiting.authentication_backend.
        :param builtins.int block_expiry_seconds: The duration of time that login remains blocked after a failed login. Example: `600`.
        :param builtins.int max_blocked_clients: internal_authentication_backend_limiting.max_blocked_clients. Example: `100000`.
        :param builtins.int max_tracked_clients: The maximum number of tracked IP addresses that have failed login. Example: `100000`.
        :param builtins.int time_window_seconds: The window of time in which the value for `allowed_tries` is enforced. Example: `3600`.
        :param builtins.str type: Enum: `username`. internal_authentication_backend_limiting.type.
        """
        if allowed_tries is not None:
            pulumi.set(__self__, "allowed_tries", allowed_tries)
        if authentication_backend is not None:
            pulumi.set(__self__, "authentication_backend", authentication_backend)
        if block_expiry_seconds is not None:
            pulumi.set(__self__, "block_expiry_seconds", block_expiry_seconds)
        if max_blocked_clients is not None:
            pulumi.set(__self__, "max_blocked_clients", max_blocked_clients)
        if max_tracked_clients is not None:
            pulumi.set(__self__, "max_tracked_clients", max_tracked_clients)
        if time_window_seconds is not None:
            pulumi.set(__self__, "time_window_seconds", time_window_seconds)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="allowedTries")
    def allowed_tries(self) -> Optional[builtins.int]:
        """
        The number of login attempts allowed before login is blocked. Example: `10`.
        """
        return pulumi.get(self, "allowed_tries")

    @property
    @pulumi.getter(name="authenticationBackend")
    def authentication_backend(self) -> Optional[builtins.str]:
        """
        Enum: `internal`. internal_authentication_backend_limiting.authentication_backend.
        """
        return pulumi.get(self, "authentication_backend")

    @property
    @pulumi.getter(name="blockExpirySeconds")
    def block_expiry_seconds(self) -> Optional[builtins.int]:
        """
        The duration of time that login remains blocked after a failed login. Example: `600`.
        """
        return pulumi.get(self, "block_expiry_seconds")

    @property
    @pulumi.getter(name="maxBlockedClients")
    def max_blocked_clients(self) -> Optional[builtins.int]:
        """
        internal_authentication_backend_limiting.max_blocked_clients. Example: `100000`.
        """
        return pulumi.get(self, "max_blocked_clients")

    @property
    @pulumi.getter(name="maxTrackedClients")
    def max_tracked_clients(self) -> Optional[builtins.int]:
        """
        The maximum number of tracked IP addresses that have failed login. Example: `100000`.
        """
        return pulumi.get(self, "max_tracked_clients")

    @property
    @pulumi.getter(name="timeWindowSeconds")
    def time_window_seconds(self) -> Optional[builtins.int]:
        """
        The window of time in which the value for `allowed_tries` is enforced. Example: `3600`.
        """
        return pulumi.get(self, "time_window_seconds")

    @property
    @pulumi.getter
    def type(self) -> Optional[builtins.str]:
        """
        Enum: `username`. internal_authentication_backend_limiting.type.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchAuthFailureListenersIpRateLimitingResult(dict):
    def __init__(__self__, *,
                 allowed_tries: Optional[builtins.int] = None,
                 block_expiry_seconds: Optional[builtins.int] = None,
                 max_blocked_clients: Optional[builtins.int] = None,
                 max_tracked_clients: Optional[builtins.int] = None,
                 time_window_seconds: Optional[builtins.int] = None,
                 type: Optional[builtins.str] = None):
        """
        :param builtins.int allowed_tries: The number of login attempts allowed before login is blocked. Example: `10`.
        :param builtins.int block_expiry_seconds: The duration of time that login remains blocked after a failed login. Example: `600`.
        :param builtins.int max_blocked_clients: The maximum number of blocked IP addresses. Example: `100000`.
        :param builtins.int max_tracked_clients: The maximum number of tracked IP addresses that have failed login. Example: `100000`.
        :param builtins.int time_window_seconds: The window of time in which the value for `allowed_tries` is enforced. Example: `3600`.
        :param builtins.str type: Enum: `ip`. The type of rate limiting.
        """
        if allowed_tries is not None:
            pulumi.set(__self__, "allowed_tries", allowed_tries)
        if block_expiry_seconds is not None:
            pulumi.set(__self__, "block_expiry_seconds", block_expiry_seconds)
        if max_blocked_clients is not None:
            pulumi.set(__self__, "max_blocked_clients", max_blocked_clients)
        if max_tracked_clients is not None:
            pulumi.set(__self__, "max_tracked_clients", max_tracked_clients)
        if time_window_seconds is not None:
            pulumi.set(__self__, "time_window_seconds", time_window_seconds)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="allowedTries")
    def allowed_tries(self) -> Optional[builtins.int]:
        """
        The number of login attempts allowed before login is blocked. Example: `10`.
        """
        return pulumi.get(self, "allowed_tries")

    @property
    @pulumi.getter(name="blockExpirySeconds")
    def block_expiry_seconds(self) -> Optional[builtins.int]:
        """
        The duration of time that login remains blocked after a failed login. Example: `600`.
        """
        return pulumi.get(self, "block_expiry_seconds")

    @property
    @pulumi.getter(name="maxBlockedClients")
    def max_blocked_clients(self) -> Optional[builtins.int]:
        """
        The maximum number of blocked IP addresses. Example: `100000`.
        """
        return pulumi.get(self, "max_blocked_clients")

    @property
    @pulumi.getter(name="maxTrackedClients")
    def max_tracked_clients(self) -> Optional[builtins.int]:
        """
        The maximum number of tracked IP addresses that have failed login. Example: `100000`.
        """
        return pulumi.get(self, "max_tracked_clients")

    @property
    @pulumi.getter(name="timeWindowSeconds")
    def time_window_seconds(self) -> Optional[builtins.int]:
        """
        The window of time in which the value for `allowed_tries` is enforced. Example: `3600`.
        """
        return pulumi.get(self, "time_window_seconds")

    @property
    @pulumi.getter
    def type(self) -> Optional[builtins.str]:
        """
        Enum: `ip`. The type of rate limiting.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchClusterSearchRequestSlowlogResult(dict):
    def __init__(__self__, *,
                 level: Optional[builtins.str] = None,
                 threshold: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchClusterSearchRequestSlowlogThresholdResult'] = None):
        """
        :param builtins.str level: Enum: `debug`, `info`, `trace`, `warn`. Log level. Default: `trace`.
        """
        if level is not None:
            pulumi.set(__self__, "level", level)
        if threshold is not None:
            pulumi.set(__self__, "threshold", threshold)

    @property
    @pulumi.getter
    def level(self) -> Optional[builtins.str]:
        """
        Enum: `debug`, `info`, `trace`, `warn`. Log level. Default: `trace`.
        """
        return pulumi.get(self, "level")

    @property
    @pulumi.getter
    def threshold(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchClusterSearchRequestSlowlogThresholdResult']:
        return pulumi.get(self, "threshold")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchClusterSearchRequestSlowlogThresholdResult(dict):
    def __init__(__self__, *,
                 debug: Optional[builtins.str] = None,
                 info: Optional[builtins.str] = None,
                 trace: Optional[builtins.str] = None,
                 warn: Optional[builtins.str] = None):
        """
        :param builtins.str debug: Debug threshold for total request took time. The value should be in the form count and unit, where unit one of (s,m,h,d,nanos,ms,micros) or -1. Default is -1.
        :param builtins.str info: Info threshold for total request took time. The value should be in the form count and unit, where unit one of (s,m,h,d,nanos,ms,micros) or -1. Default is -1.
        :param builtins.str trace: Trace threshold for total request took time. The value should be in the form count and unit, where unit one of (s,m,h,d,nanos,ms,micros) or -1. Default is -1.
        :param builtins.str warn: Warning threshold for total request took time. The value should be in the form count and unit, where unit one of (s,m,h,d,nanos,ms,micros) or -1. Default is -1.
        """
        if debug is not None:
            pulumi.set(__self__, "debug", debug)
        if info is not None:
            pulumi.set(__self__, "info", info)
        if trace is not None:
            pulumi.set(__self__, "trace", trace)
        if warn is not None:
            pulumi.set(__self__, "warn", warn)

    @property
    @pulumi.getter
    def debug(self) -> Optional[builtins.str]:
        """
        Debug threshold for total request took time. The value should be in the form count and unit, where unit one of (s,m,h,d,nanos,ms,micros) or -1. Default is -1.
        """
        return pulumi.get(self, "debug")

    @property
    @pulumi.getter
    def info(self) -> Optional[builtins.str]:
        """
        Info threshold for total request took time. The value should be in the form count and unit, where unit one of (s,m,h,d,nanos,ms,micros) or -1. Default is -1.
        """
        return pulumi.get(self, "info")

    @property
    @pulumi.getter
    def trace(self) -> Optional[builtins.str]:
        """
        Trace threshold for total request took time. The value should be in the form count and unit, where unit one of (s,m,h,d,nanos,ms,micros) or -1. Default is -1.
        """
        return pulumi.get(self, "trace")

    @property
    @pulumi.getter
    def warn(self) -> Optional[builtins.str]:
        """
        Warning threshold for total request took time. The value should be in the form count and unit, where unit one of (s,m,h,d,nanos,ms,micros) or -1. Default is -1.
        """
        return pulumi.get(self, "warn")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchDashboardsResult(dict):
    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None,
                 max_old_space_size: Optional[builtins.int] = None,
                 multiple_data_source_enabled: Optional[builtins.bool] = None,
                 opensearch_request_timeout: Optional[builtins.int] = None):
        """
        :param builtins.bool enabled: Enable or disable OpenSearch Dashboards. Default: `true`.
        :param builtins.int max_old_space_size: Limits the maximum amount of memory (in MiB) the OpenSearch Dashboards process can use. This sets the max_old_space_size option of the nodejs running the OpenSearch Dashboards. Note: the memory reserved by OpenSearch Dashboards is not available for OpenSearch. Default: `128`.
        :param builtins.bool multiple_data_source_enabled: Enable or disable multiple data sources in OpenSearch Dashboards. Default: `true`.
        :param builtins.int opensearch_request_timeout: Timeout in milliseconds for requests made by OpenSearch Dashboards towards OpenSearch. Default: `30000`.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if max_old_space_size is not None:
            pulumi.set(__self__, "max_old_space_size", max_old_space_size)
        if multiple_data_source_enabled is not None:
            pulumi.set(__self__, "multiple_data_source_enabled", multiple_data_source_enabled)
        if opensearch_request_timeout is not None:
            pulumi.set(__self__, "opensearch_request_timeout", opensearch_request_timeout)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable OpenSearch Dashboards. Default: `true`.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="maxOldSpaceSize")
    def max_old_space_size(self) -> Optional[builtins.int]:
        """
        Limits the maximum amount of memory (in MiB) the OpenSearch Dashboards process can use. This sets the max_old_space_size option of the nodejs running the OpenSearch Dashboards. Note: the memory reserved by OpenSearch Dashboards is not available for OpenSearch. Default: `128`.
        """
        return pulumi.get(self, "max_old_space_size")

    @property
    @pulumi.getter(name="multipleDataSourceEnabled")
    def multiple_data_source_enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable multiple data sources in OpenSearch Dashboards. Default: `true`.
        """
        return pulumi.get(self, "multiple_data_source_enabled")

    @property
    @pulumi.getter(name="opensearchRequestTimeout")
    def opensearch_request_timeout(self) -> Optional[builtins.int]:
        """
        Timeout in milliseconds for requests made by OpenSearch Dashboards towards OpenSearch. Default: `30000`.
        """
        return pulumi.get(self, "opensearch_request_timeout")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchDiskWatermarksResult(dict):
    def __init__(__self__, *,
                 flood_stage: builtins.int,
                 high: builtins.int,
                 low: builtins.int):
        """
        :param builtins.int flood_stage: The flood stage watermark for disk usage. Example: `95`.
        :param builtins.int high: The high watermark for disk usage. Example: `90`.
        :param builtins.int low: The low watermark for disk usage. Example: `85`.
        """
        pulumi.set(__self__, "flood_stage", flood_stage)
        pulumi.set(__self__, "high", high)
        pulumi.set(__self__, "low", low)

    @property
    @pulumi.getter(name="floodStage")
    def flood_stage(self) -> builtins.int:
        """
        The flood stage watermark for disk usage. Example: `95`.
        """
        return pulumi.get(self, "flood_stage")

    @property
    @pulumi.getter
    def high(self) -> builtins.int:
        """
        The high watermark for disk usage. Example: `90`.
        """
        return pulumi.get(self, "high")

    @property
    @pulumi.getter
    def low(self) -> builtins.int:
        """
        The low watermark for disk usage. Example: `85`.
        """
        return pulumi.get(self, "low")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureResult(dict):
    def __init__(__self__, *,
                 mode: Optional[builtins.str] = None,
                 node_duress: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureNodeDuressResult'] = None,
                 search_shard_task: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchShardTaskResult'] = None,
                 search_task: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchTaskResult'] = None):
        """
        :param builtins.str mode: Enum: `disabled`, `enforced`, `monitor_only`. The search backpressure mode. Valid values are monitor_only, enforced, or disabled. Default is monitor_only.
        :param 'GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureNodeDuressArgs' node_duress: Node duress settings
        :param 'GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchShardTaskArgs' search_shard_task: Search shard settings
        :param 'GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchTaskArgs' search_task: Search task settings
        """
        if mode is not None:
            pulumi.set(__self__, "mode", mode)
        if node_duress is not None:
            pulumi.set(__self__, "node_duress", node_duress)
        if search_shard_task is not None:
            pulumi.set(__self__, "search_shard_task", search_shard_task)
        if search_task is not None:
            pulumi.set(__self__, "search_task", search_task)

    @property
    @pulumi.getter
    def mode(self) -> Optional[builtins.str]:
        """
        Enum: `disabled`, `enforced`, `monitor_only`. The search backpressure mode. Valid values are monitor_only, enforced, or disabled. Default is monitor_only.
        """
        return pulumi.get(self, "mode")

    @property
    @pulumi.getter(name="nodeDuress")
    def node_duress(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureNodeDuressResult']:
        """
        Node duress settings
        """
        return pulumi.get(self, "node_duress")

    @property
    @pulumi.getter(name="searchShardTask")
    def search_shard_task(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchShardTaskResult']:
        """
        Search shard settings
        """
        return pulumi.get(self, "search_shard_task")

    @property
    @pulumi.getter(name="searchTask")
    def search_task(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchTaskResult']:
        """
        Search task settings
        """
        return pulumi.get(self, "search_task")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureNodeDuressResult(dict):
    def __init__(__self__, *,
                 cpu_threshold: Optional[builtins.float] = None,
                 heap_threshold: Optional[builtins.float] = None,
                 num_successive_breaches: Optional[builtins.int] = None):
        """
        :param builtins.float cpu_threshold: The CPU usage threshold (as a percentage) required for a node to be considered to be under duress. Default is 0.9.
        :param builtins.float heap_threshold: The heap usage threshold (as a percentage) required for a node to be considered to be under duress. Default is 0.7.
        :param builtins.int num_successive_breaches: The number of successive limit breaches after which the node is considered to be under duress. Default is 3.
        """
        if cpu_threshold is not None:
            pulumi.set(__self__, "cpu_threshold", cpu_threshold)
        if heap_threshold is not None:
            pulumi.set(__self__, "heap_threshold", heap_threshold)
        if num_successive_breaches is not None:
            pulumi.set(__self__, "num_successive_breaches", num_successive_breaches)

    @property
    @pulumi.getter(name="cpuThreshold")
    def cpu_threshold(self) -> Optional[builtins.float]:
        """
        The CPU usage threshold (as a percentage) required for a node to be considered to be under duress. Default is 0.9.
        """
        return pulumi.get(self, "cpu_threshold")

    @property
    @pulumi.getter(name="heapThreshold")
    def heap_threshold(self) -> Optional[builtins.float]:
        """
        The heap usage threshold (as a percentage) required for a node to be considered to be under duress. Default is 0.7.
        """
        return pulumi.get(self, "heap_threshold")

    @property
    @pulumi.getter(name="numSuccessiveBreaches")
    def num_successive_breaches(self) -> Optional[builtins.int]:
        """
        The number of successive limit breaches after which the node is considered to be under duress. Default is 3.
        """
        return pulumi.get(self, "num_successive_breaches")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchShardTaskResult(dict):
    def __init__(__self__, *,
                 cancellation_burst: Optional[builtins.float] = None,
                 cancellation_rate: Optional[builtins.float] = None,
                 cancellation_ratio: Optional[builtins.float] = None,
                 cpu_time_millis_threshold: Optional[builtins.int] = None,
                 elapsed_time_millis_threshold: Optional[builtins.int] = None,
                 heap_moving_average_window_size: Optional[builtins.int] = None,
                 heap_percent_threshold: Optional[builtins.float] = None,
                 heap_variance: Optional[builtins.float] = None,
                 total_heap_percent_threshold: Optional[builtins.float] = None):
        """
        :param builtins.float cancellation_burst: The maximum number of search tasks to cancel in a single iteration of the observer thread. Default is 10.0.
        :param builtins.float cancellation_rate: The maximum number of tasks to cancel per millisecond of elapsed time. Default is 0.003.
        :param builtins.float cancellation_ratio: The maximum number of tasks to cancel, as a percentage of successful task completions. Default is 0.1.
        :param builtins.int cpu_time_millis_threshold: The CPU usage threshold (in milliseconds) required for a single search shard task before it is considered for cancellation. Default is 15000.
        :param builtins.int elapsed_time_millis_threshold: The elapsed time threshold (in milliseconds) required for a single search shard task before it is considered for cancellation. Default is 30000.
        :param builtins.int heap_moving_average_window_size: The number of previously completed search shard tasks to consider when calculating the rolling average of heap usage. Default is 100.
        :param builtins.float heap_percent_threshold: The heap usage threshold (as a percentage) required for a single search shard task before it is considered for cancellation. Default is 0.5.
        :param builtins.float heap_variance: The minimum variance required for a single search shard task’s heap usage compared to the rolling average of previously completed tasks before it is considered for cancellation. Default is 2.0.
        :param builtins.float total_heap_percent_threshold: The heap usage threshold (as a percentage) required for the sum of heap usages of all search shard tasks before cancellation is applied. Default is 0.5.
        """
        if cancellation_burst is not None:
            pulumi.set(__self__, "cancellation_burst", cancellation_burst)
        if cancellation_rate is not None:
            pulumi.set(__self__, "cancellation_rate", cancellation_rate)
        if cancellation_ratio is not None:
            pulumi.set(__self__, "cancellation_ratio", cancellation_ratio)
        if cpu_time_millis_threshold is not None:
            pulumi.set(__self__, "cpu_time_millis_threshold", cpu_time_millis_threshold)
        if elapsed_time_millis_threshold is not None:
            pulumi.set(__self__, "elapsed_time_millis_threshold", elapsed_time_millis_threshold)
        if heap_moving_average_window_size is not None:
            pulumi.set(__self__, "heap_moving_average_window_size", heap_moving_average_window_size)
        if heap_percent_threshold is not None:
            pulumi.set(__self__, "heap_percent_threshold", heap_percent_threshold)
        if heap_variance is not None:
            pulumi.set(__self__, "heap_variance", heap_variance)
        if total_heap_percent_threshold is not None:
            pulumi.set(__self__, "total_heap_percent_threshold", total_heap_percent_threshold)

    @property
    @pulumi.getter(name="cancellationBurst")
    def cancellation_burst(self) -> Optional[builtins.float]:
        """
        The maximum number of search tasks to cancel in a single iteration of the observer thread. Default is 10.0.
        """
        return pulumi.get(self, "cancellation_burst")

    @property
    @pulumi.getter(name="cancellationRate")
    def cancellation_rate(self) -> Optional[builtins.float]:
        """
        The maximum number of tasks to cancel per millisecond of elapsed time. Default is 0.003.
        """
        return pulumi.get(self, "cancellation_rate")

    @property
    @pulumi.getter(name="cancellationRatio")
    def cancellation_ratio(self) -> Optional[builtins.float]:
        """
        The maximum number of tasks to cancel, as a percentage of successful task completions. Default is 0.1.
        """
        return pulumi.get(self, "cancellation_ratio")

    @property
    @pulumi.getter(name="cpuTimeMillisThreshold")
    def cpu_time_millis_threshold(self) -> Optional[builtins.int]:
        """
        The CPU usage threshold (in milliseconds) required for a single search shard task before it is considered for cancellation. Default is 15000.
        """
        return pulumi.get(self, "cpu_time_millis_threshold")

    @property
    @pulumi.getter(name="elapsedTimeMillisThreshold")
    def elapsed_time_millis_threshold(self) -> Optional[builtins.int]:
        """
        The elapsed time threshold (in milliseconds) required for a single search shard task before it is considered for cancellation. Default is 30000.
        """
        return pulumi.get(self, "elapsed_time_millis_threshold")

    @property
    @pulumi.getter(name="heapMovingAverageWindowSize")
    def heap_moving_average_window_size(self) -> Optional[builtins.int]:
        """
        The number of previously completed search shard tasks to consider when calculating the rolling average of heap usage. Default is 100.
        """
        return pulumi.get(self, "heap_moving_average_window_size")

    @property
    @pulumi.getter(name="heapPercentThreshold")
    def heap_percent_threshold(self) -> Optional[builtins.float]:
        """
        The heap usage threshold (as a percentage) required for a single search shard task before it is considered for cancellation. Default is 0.5.
        """
        return pulumi.get(self, "heap_percent_threshold")

    @property
    @pulumi.getter(name="heapVariance")
    def heap_variance(self) -> Optional[builtins.float]:
        """
        The minimum variance required for a single search shard task’s heap usage compared to the rolling average of previously completed tasks before it is considered for cancellation. Default is 2.0.
        """
        return pulumi.get(self, "heap_variance")

    @property
    @pulumi.getter(name="totalHeapPercentThreshold")
    def total_heap_percent_threshold(self) -> Optional[builtins.float]:
        """
        The heap usage threshold (as a percentage) required for the sum of heap usages of all search shard tasks before cancellation is applied. Default is 0.5.
        """
        return pulumi.get(self, "total_heap_percent_threshold")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchSearchBackpressureSearchTaskResult(dict):
    def __init__(__self__, *,
                 cancellation_burst: Optional[builtins.float] = None,
                 cancellation_rate: Optional[builtins.float] = None,
                 cancellation_ratio: Optional[builtins.float] = None,
                 cpu_time_millis_threshold: Optional[builtins.int] = None,
                 elapsed_time_millis_threshold: Optional[builtins.int] = None,
                 heap_moving_average_window_size: Optional[builtins.int] = None,
                 heap_percent_threshold: Optional[builtins.float] = None,
                 heap_variance: Optional[builtins.float] = None,
                 total_heap_percent_threshold: Optional[builtins.float] = None):
        """
        :param builtins.float cancellation_burst: The maximum number of search tasks to cancel in a single iteration of the observer thread. Default is 5.0.
        :param builtins.float cancellation_rate: The maximum number of search tasks to cancel per millisecond of elapsed time. Default is 0.003.
        :param builtins.float cancellation_ratio: The maximum number of search tasks to cancel, as a percentage of successful search task completions. Default is 0.1.
        :param builtins.int cpu_time_millis_threshold: The CPU usage threshold (in milliseconds) required for an individual parent task before it is considered for cancellation. Default is 30000.
        :param builtins.int elapsed_time_millis_threshold: The elapsed time threshold (in milliseconds) required for an individual parent task before it is considered for cancellation. Default is 45000.
        :param builtins.int heap_moving_average_window_size: The window size used to calculate the rolling average of the heap usage for the completed parent tasks. Default is 10.
        :param builtins.float heap_percent_threshold: The heap usage threshold (as a percentage) required for an individual parent task before it is considered for cancellation. Default is 0.2.
        :param builtins.float heap_variance: The heap usage variance required for an individual parent task before it is considered for cancellation. A task is considered for cancellation when taskHeapUsage is greater than or equal to heapUsageMovingAverage * variance. Default is 2.0.
        :param builtins.float total_heap_percent_threshold: The heap usage threshold (as a percentage) required for the sum of heap usages of all search tasks before cancellation is applied. Default is 0.5.
        """
        if cancellation_burst is not None:
            pulumi.set(__self__, "cancellation_burst", cancellation_burst)
        if cancellation_rate is not None:
            pulumi.set(__self__, "cancellation_rate", cancellation_rate)
        if cancellation_ratio is not None:
            pulumi.set(__self__, "cancellation_ratio", cancellation_ratio)
        if cpu_time_millis_threshold is not None:
            pulumi.set(__self__, "cpu_time_millis_threshold", cpu_time_millis_threshold)
        if elapsed_time_millis_threshold is not None:
            pulumi.set(__self__, "elapsed_time_millis_threshold", elapsed_time_millis_threshold)
        if heap_moving_average_window_size is not None:
            pulumi.set(__self__, "heap_moving_average_window_size", heap_moving_average_window_size)
        if heap_percent_threshold is not None:
            pulumi.set(__self__, "heap_percent_threshold", heap_percent_threshold)
        if heap_variance is not None:
            pulumi.set(__self__, "heap_variance", heap_variance)
        if total_heap_percent_threshold is not None:
            pulumi.set(__self__, "total_heap_percent_threshold", total_heap_percent_threshold)

    @property
    @pulumi.getter(name="cancellationBurst")
    def cancellation_burst(self) -> Optional[builtins.float]:
        """
        The maximum number of search tasks to cancel in a single iteration of the observer thread. Default is 5.0.
        """
        return pulumi.get(self, "cancellation_burst")

    @property
    @pulumi.getter(name="cancellationRate")
    def cancellation_rate(self) -> Optional[builtins.float]:
        """
        The maximum number of search tasks to cancel per millisecond of elapsed time. Default is 0.003.
        """
        return pulumi.get(self, "cancellation_rate")

    @property
    @pulumi.getter(name="cancellationRatio")
    def cancellation_ratio(self) -> Optional[builtins.float]:
        """
        The maximum number of search tasks to cancel, as a percentage of successful search task completions. Default is 0.1.
        """
        return pulumi.get(self, "cancellation_ratio")

    @property
    @pulumi.getter(name="cpuTimeMillisThreshold")
    def cpu_time_millis_threshold(self) -> Optional[builtins.int]:
        """
        The CPU usage threshold (in milliseconds) required for an individual parent task before it is considered for cancellation. Default is 30000.
        """
        return pulumi.get(self, "cpu_time_millis_threshold")

    @property
    @pulumi.getter(name="elapsedTimeMillisThreshold")
    def elapsed_time_millis_threshold(self) -> Optional[builtins.int]:
        """
        The elapsed time threshold (in milliseconds) required for an individual parent task before it is considered for cancellation. Default is 45000.
        """
        return pulumi.get(self, "elapsed_time_millis_threshold")

    @property
    @pulumi.getter(name="heapMovingAverageWindowSize")
    def heap_moving_average_window_size(self) -> Optional[builtins.int]:
        """
        The window size used to calculate the rolling average of the heap usage for the completed parent tasks. Default is 10.
        """
        return pulumi.get(self, "heap_moving_average_window_size")

    @property
    @pulumi.getter(name="heapPercentThreshold")
    def heap_percent_threshold(self) -> Optional[builtins.float]:
        """
        The heap usage threshold (as a percentage) required for an individual parent task before it is considered for cancellation. Default is 0.2.
        """
        return pulumi.get(self, "heap_percent_threshold")

    @property
    @pulumi.getter(name="heapVariance")
    def heap_variance(self) -> Optional[builtins.float]:
        """
        The heap usage variance required for an individual parent task before it is considered for cancellation. A task is considered for cancellation when taskHeapUsage is greater than or equal to heapUsageMovingAverage * variance. Default is 2.0.
        """
        return pulumi.get(self, "heap_variance")

    @property
    @pulumi.getter(name="totalHeapPercentThreshold")
    def total_heap_percent_threshold(self) -> Optional[builtins.float]:
        """
        The heap usage threshold (as a percentage) required for the sum of heap usages of all search tasks before cancellation is applied. Default is 0.5.
        """
        return pulumi.get(self, "total_heap_percent_threshold")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesResult(dict):
    def __init__(__self__, *,
                 cpu: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesCpuResult'] = None,
                 latency: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesLatencyResult'] = None,
                 memory: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesMemoryResult'] = None):
        """
        :param 'GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesCpuArgs' cpu: Top N queries monitoring by CPU
        :param 'GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesLatencyArgs' latency: Top N queries monitoring by latency
        :param 'GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesMemoryArgs' memory: Top N queries monitoring by memory
        """
        if cpu is not None:
            pulumi.set(__self__, "cpu", cpu)
        if latency is not None:
            pulumi.set(__self__, "latency", latency)
        if memory is not None:
            pulumi.set(__self__, "memory", memory)

    @property
    @pulumi.getter
    def cpu(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesCpuResult']:
        """
        Top N queries monitoring by CPU
        """
        return pulumi.get(self, "cpu")

    @property
    @pulumi.getter
    def latency(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesLatencyResult']:
        """
        Top N queries monitoring by latency
        """
        return pulumi.get(self, "latency")

    @property
    @pulumi.getter
    def memory(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesMemoryResult']:
        """
        Top N queries monitoring by memory
        """
        return pulumi.get(self, "memory")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesCpuResult(dict):
    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None,
                 top_n_size: Optional[builtins.int] = None,
                 window_size: Optional[builtins.str] = None):
        """
        :param builtins.bool enabled: Enable or disable top N query monitoring by the metric. Default: `false`.
        :param builtins.int top_n_size: Specify the value of N for the top N queries by the metric.
        :param builtins.str window_size: The window size of the top N queries by the metric.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if top_n_size is not None:
            pulumi.set(__self__, "top_n_size", top_n_size)
        if window_size is not None:
            pulumi.set(__self__, "window_size", window_size)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable top N query monitoring by the metric. Default: `false`.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="topNSize")
    def top_n_size(self) -> Optional[builtins.int]:
        """
        Specify the value of N for the top N queries by the metric.
        """
        return pulumi.get(self, "top_n_size")

    @property
    @pulumi.getter(name="windowSize")
    def window_size(self) -> Optional[builtins.str]:
        """
        The window size of the top N queries by the metric.
        """
        return pulumi.get(self, "window_size")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesLatencyResult(dict):
    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None,
                 top_n_size: Optional[builtins.int] = None,
                 window_size: Optional[builtins.str] = None):
        """
        :param builtins.bool enabled: Enable or disable top N query monitoring by the metric. Default: `false`.
        :param builtins.int top_n_size: Specify the value of N for the top N queries by the metric.
        :param builtins.str window_size: The window size of the top N queries by the metric.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if top_n_size is not None:
            pulumi.set(__self__, "top_n_size", top_n_size)
        if window_size is not None:
            pulumi.set(__self__, "window_size", window_size)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable top N query monitoring by the metric. Default: `false`.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="topNSize")
    def top_n_size(self) -> Optional[builtins.int]:
        """
        Specify the value of N for the top N queries by the metric.
        """
        return pulumi.get(self, "top_n_size")

    @property
    @pulumi.getter(name="windowSize")
    def window_size(self) -> Optional[builtins.str]:
        """
        The window size of the top N queries by the metric.
        """
        return pulumi.get(self, "window_size")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchSearchInsightsTopQueriesMemoryResult(dict):
    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None,
                 top_n_size: Optional[builtins.int] = None,
                 window_size: Optional[builtins.str] = None):
        """
        :param builtins.bool enabled: Enable or disable top N query monitoring by the metric. Default: `false`.
        :param builtins.int top_n_size: Specify the value of N for the top N queries by the metric.
        :param builtins.str window_size: The window size of the top N queries by the metric.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if top_n_size is not None:
            pulumi.set(__self__, "top_n_size", top_n_size)
        if window_size is not None:
            pulumi.set(__self__, "window_size", window_size)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable top N query monitoring by the metric. Default: `false`.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="topNSize")
    def top_n_size(self) -> Optional[builtins.int]:
        """
        Specify the value of N for the top N queries by the metric.
        """
        return pulumi.get(self, "top_n_size")

    @property
    @pulumi.getter(name="windowSize")
    def window_size(self) -> Optional[builtins.str]:
        """
        The window size of the top N queries by the metric.
        """
        return pulumi.get(self, "window_size")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchSegrepResult(dict):
    def __init__(__self__, *,
                 pressure_checkpoint_limit: Optional[builtins.int] = None,
                 pressure_enabled: Optional[builtins.bool] = None,
                 pressure_replica_stale_limit: Optional[builtins.float] = None,
                 pressure_time_limit: Optional[builtins.str] = None):
        """
        :param builtins.int pressure_checkpoint_limit: The maximum number of indexing checkpoints that a replica shard can fall behind when copying from primary. Once `segrep.pressure.checkpoint.limit` is breached along with `segrep.pressure.time.limit`, the segment replication backpressure mechanism is initiated. Default is 4 checkpoints. Default: `4`.
        :param builtins.bool pressure_enabled: Enables the segment replication backpressure mechanism. Default is false. Default: `false`.
        :param builtins.float pressure_replica_stale_limit: The maximum number of stale replica shards that can exist in a replication group. Once `segrep.pressure.replica.stale.limit` is breached, the segment replication backpressure mechanism is initiated. Default is .5, which is 50% of a replication group. Default: `0.5`.
        :param builtins.str pressure_time_limit: The maximum amount of time that a replica shard can take to copy from the primary shard. Once segrep.pressure.time.limit is breached along with segrep.pressure.checkpoint.limit, the segment replication backpressure mechanism is initiated. Default is 5 minutes. Default: `5m`.
        """
        if pressure_checkpoint_limit is not None:
            pulumi.set(__self__, "pressure_checkpoint_limit", pressure_checkpoint_limit)
        if pressure_enabled is not None:
            pulumi.set(__self__, "pressure_enabled", pressure_enabled)
        if pressure_replica_stale_limit is not None:
            pulumi.set(__self__, "pressure_replica_stale_limit", pressure_replica_stale_limit)
        if pressure_time_limit is not None:
            pulumi.set(__self__, "pressure_time_limit", pressure_time_limit)

    @property
    @pulumi.getter(name="pressureCheckpointLimit")
    def pressure_checkpoint_limit(self) -> Optional[builtins.int]:
        """
        The maximum number of indexing checkpoints that a replica shard can fall behind when copying from primary. Once `segrep.pressure.checkpoint.limit` is breached along with `segrep.pressure.time.limit`, the segment replication backpressure mechanism is initiated. Default is 4 checkpoints. Default: `4`.
        """
        return pulumi.get(self, "pressure_checkpoint_limit")

    @property
    @pulumi.getter(name="pressureEnabled")
    def pressure_enabled(self) -> Optional[builtins.bool]:
        """
        Enables the segment replication backpressure mechanism. Default is false. Default: `false`.
        """
        return pulumi.get(self, "pressure_enabled")

    @property
    @pulumi.getter(name="pressureReplicaStaleLimit")
    def pressure_replica_stale_limit(self) -> Optional[builtins.float]:
        """
        The maximum number of stale replica shards that can exist in a replication group. Once `segrep.pressure.replica.stale.limit` is breached, the segment replication backpressure mechanism is initiated. Default is .5, which is 50% of a replication group. Default: `0.5`.
        """
        return pulumi.get(self, "pressure_replica_stale_limit")

    @property
    @pulumi.getter(name="pressureTimeLimit")
    def pressure_time_limit(self) -> Optional[builtins.str]:
        """
        The maximum amount of time that a replica shard can take to copy from the primary shard. Once segrep.pressure.time.limit is breached along with segrep.pressure.checkpoint.limit, the segment replication backpressure mechanism is initiated. Default is 5 minutes. Default: `5m`.
        """
        return pulumi.get(self, "pressure_time_limit")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressureResult(dict):
    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None,
                 enforced: Optional[builtins.bool] = None,
                 operating_factor: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressureOperatingFactorResult'] = None,
                 primary_parameter: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterResult'] = None):
        """
        :param builtins.bool enabled: Enable or disable shard indexing backpressure. Default is false.
        :param builtins.bool enforced: Run shard indexing backpressure in shadow mode or enforced mode.
                           In shadow mode (value set as false), shard indexing backpressure tracks all granular-level metrics,
                           but it doesn’t actually reject any indexing requests.
                           In enforced mode (value set as true),
                           shard indexing backpressure rejects any requests to the cluster that might cause a dip in its performance.
                           Default is false.
        :param 'GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressureOperatingFactorArgs' operating_factor: Operating factor
        :param 'GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterArgs' primary_parameter: Primary parameter
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if enforced is not None:
            pulumi.set(__self__, "enforced", enforced)
        if operating_factor is not None:
            pulumi.set(__self__, "operating_factor", operating_factor)
        if primary_parameter is not None:
            pulumi.set(__self__, "primary_parameter", primary_parameter)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[builtins.bool]:
        """
        Enable or disable shard indexing backpressure. Default is false.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter
    def enforced(self) -> Optional[builtins.bool]:
        """
        Run shard indexing backpressure in shadow mode or enforced mode.
                    In shadow mode (value set as false), shard indexing backpressure tracks all granular-level metrics,
                    but it doesn’t actually reject any indexing requests.
                    In enforced mode (value set as true),
                    shard indexing backpressure rejects any requests to the cluster that might cause a dip in its performance.
                    Default is false.
        """
        return pulumi.get(self, "enforced")

    @property
    @pulumi.getter(name="operatingFactor")
    def operating_factor(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressureOperatingFactorResult']:
        """
        Operating factor
        """
        return pulumi.get(self, "operating_factor")

    @property
    @pulumi.getter(name="primaryParameter")
    def primary_parameter(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterResult']:
        """
        Primary parameter
        """
        return pulumi.get(self, "primary_parameter")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressureOperatingFactorResult(dict):
    def __init__(__self__, *,
                 lower: Optional[builtins.float] = None,
                 optimal: Optional[builtins.float] = None,
                 upper: Optional[builtins.float] = None):
        """
        :param builtins.float lower: Specify the lower occupancy limit of the allocated quota of memory for the shard.
                                   If the total memory usage of a shard is below this limit,
                                   shard indexing backpressure decreases the current allocated memory for that shard.
                                   Default is 0.75.
        :param builtins.float optimal: Specify the optimal occupancy of the allocated quota of memory for the shard.
                                   If the total memory usage of a shard is at this level,
                                   shard indexing backpressure doesn’t change the current allocated memory for that shard.
                                   Default is 0.85.
        :param builtins.float upper: Specify the upper occupancy limit of the allocated quota of memory for the shard.
                                   If the total memory usage of a shard is above this limit,
                                   shard indexing backpressure increases the current allocated memory for that shard.
                                   Default is 0.95.
        """
        if lower is not None:
            pulumi.set(__self__, "lower", lower)
        if optimal is not None:
            pulumi.set(__self__, "optimal", optimal)
        if upper is not None:
            pulumi.set(__self__, "upper", upper)

    @property
    @pulumi.getter
    def lower(self) -> Optional[builtins.float]:
        """
        Specify the lower occupancy limit of the allocated quota of memory for the shard.
                            If the total memory usage of a shard is below this limit,
                            shard indexing backpressure decreases the current allocated memory for that shard.
                            Default is 0.75.
        """
        return pulumi.get(self, "lower")

    @property
    @pulumi.getter
    def optimal(self) -> Optional[builtins.float]:
        """
        Specify the optimal occupancy of the allocated quota of memory for the shard.
                            If the total memory usage of a shard is at this level,
                            shard indexing backpressure doesn’t change the current allocated memory for that shard.
                            Default is 0.85.
        """
        return pulumi.get(self, "optimal")

    @property
    @pulumi.getter
    def upper(self) -> Optional[builtins.float]:
        """
        Specify the upper occupancy limit of the allocated quota of memory for the shard.
                            If the total memory usage of a shard is above this limit,
                            shard indexing backpressure increases the current allocated memory for that shard.
                            Default is 0.95.
        """
        return pulumi.get(self, "upper")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterResult(dict):
    def __init__(__self__, *,
                 node: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterNodeResult'] = None,
                 shard: Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterShardResult'] = None):
        if node is not None:
            pulumi.set(__self__, "node", node)
        if shard is not None:
            pulumi.set(__self__, "shard", shard)

    @property
    @pulumi.getter
    def node(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterNodeResult']:
        return pulumi.get(self, "node")

    @property
    @pulumi.getter
    def shard(self) -> Optional['outputs.GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterShardResult']:
        return pulumi.get(self, "shard")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterNodeResult(dict):
    def __init__(__self__, *,
                 soft_limit: Optional[builtins.float] = None):
        """
        :param builtins.float soft_limit: Define the percentage of the node-level memory
                                           threshold that acts as a soft indicator for strain on a node.
                                           Default is 0.7.
        """
        if soft_limit is not None:
            pulumi.set(__self__, "soft_limit", soft_limit)

    @property
    @pulumi.getter(name="softLimit")
    def soft_limit(self) -> Optional[builtins.float]:
        """
        Define the percentage of the node-level memory
                                    threshold that acts as a soft indicator for strain on a node.
                                    Default is 0.7.
        """
        return pulumi.get(self, "soft_limit")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigOpensearchShardIndexingPressurePrimaryParameterShardResult(dict):
    def __init__(__self__, *,
                 min_limit: Optional[builtins.float] = None):
        """
        :param builtins.float min_limit: Specify the minimum assigned quota for a new shard in any role (coordinator, primary, or replica).
                                           Shard indexing backpressure increases or decreases this allocated quota based on the inflow of traffic for the shard.
                                           Default is 0.001.
        """
        if min_limit is not None:
            pulumi.set(__self__, "min_limit", min_limit)

    @property
    @pulumi.getter(name="minLimit")
    def min_limit(self) -> Optional[builtins.float]:
        """
        Specify the minimum assigned quota for a new shard in any role (coordinator, primary, or replica).
                                    Shard indexing backpressure increases or decreases this allocated quota based on the inflow of traffic for the shard.
                                    Default is 0.001.
        """
        return pulumi.get(self, "min_limit")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigPrivateAccessResult(dict):
    def __init__(__self__, *,
                 opensearch: Optional[builtins.bool] = None,
                 opensearch_dashboards: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool opensearch: Allow clients to connect to opensearch with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool opensearch_dashboards: Allow clients to connect to opensearch_dashboards with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if opensearch is not None:
            pulumi.set(__self__, "opensearch", opensearch)
        if opensearch_dashboards is not None:
            pulumi.set(__self__, "opensearch_dashboards", opensearch_dashboards)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def opensearch(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to opensearch with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "opensearch")

    @property
    @pulumi.getter(name="opensearchDashboards")
    def opensearch_dashboards(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to opensearch_dashboards with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "opensearch_dashboards")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigPrivatelinkAccessResult(dict):
    def __init__(__self__, *,
                 opensearch: Optional[builtins.bool] = None,
                 opensearch_dashboards: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool opensearch: Enable opensearch.
        :param builtins.bool opensearch_dashboards: Enable opensearch_dashboards.
        :param builtins.bool prometheus: Enable prometheus.
        """
        if opensearch is not None:
            pulumi.set(__self__, "opensearch", opensearch)
        if opensearch_dashboards is not None:
            pulumi.set(__self__, "opensearch_dashboards", opensearch_dashboards)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def opensearch(self) -> Optional[builtins.bool]:
        """
        Enable opensearch.
        """
        return pulumi.get(self, "opensearch")

    @property
    @pulumi.getter(name="opensearchDashboards")
    def opensearch_dashboards(self) -> Optional[builtins.bool]:
        """
        Enable opensearch_dashboards.
        """
        return pulumi.get(self, "opensearch_dashboards")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigPublicAccessResult(dict):
    def __init__(__self__, *,
                 opensearch: Optional[builtins.bool] = None,
                 opensearch_dashboards: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool opensearch: Allow clients to connect to opensearch from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool opensearch_dashboards: Allow clients to connect to opensearch_dashboards from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if opensearch is not None:
            pulumi.set(__self__, "opensearch", opensearch)
        if opensearch_dashboards is not None:
            pulumi.set(__self__, "opensearch_dashboards", opensearch_dashboards)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def opensearch(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to opensearch from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "opensearch")

    @property
    @pulumi.getter(name="opensearchDashboards")
    def opensearch_dashboards(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to opensearch_dashboards from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "opensearch_dashboards")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigS3MigrationResult(dict):
    def __init__(__self__, *,
                 access_key: builtins.str,
                 base_path: builtins.str,
                 bucket: builtins.str,
                 indices: builtins.str,
                 region: builtins.str,
                 secret_key: builtins.str,
                 snapshot_name: builtins.str,
                 chunk_size: Optional[builtins.str] = None,
                 compress: Optional[builtins.bool] = None,
                 endpoint: Optional[builtins.str] = None,
                 include_aliases: Optional[builtins.bool] = None,
                 readonly: Optional[builtins.bool] = None,
                 restore_global_state: Optional[builtins.bool] = None,
                 server_side_encryption: Optional[builtins.bool] = None):
        """
        :param builtins.str access_key: AWS Access key.
        :param builtins.str base_path: The path to the repository data within its container. The value of this setting should not start or end with a /.
        :param builtins.str bucket: S3 bucket name.
        :param builtins.str indices: A comma-delimited list of indices to restore from the snapshot. Multi-index syntax is supported. Example: `metrics*,logs*,data-20240823`.
        :param builtins.str region: S3 region.
        :param builtins.str secret_key: AWS secret key.
        :param builtins.str snapshot_name: The snapshot name to restore from.
        :param builtins.str chunk_size: Big files can be broken down into chunks during snapshotting if needed. Should be the same as for the 3rd party repository.
        :param builtins.bool compress: When set to true metadata files are stored in compressed format.
        :param builtins.str endpoint: The S3 service endpoint to connect to. If you are using an S3-compatible service then you should set this to the service’s endpoint.
        :param builtins.bool include_aliases: Whether to restore aliases alongside their associated indexes. Default is true.
        :param builtins.bool readonly: Whether the repository is read-only. Default: `true`.
        :param builtins.bool restore_global_state: If true, restore the cluster state. Defaults to false.
        :param builtins.bool server_side_encryption: When set to true files are encrypted on server side.
        """
        pulumi.set(__self__, "access_key", access_key)
        pulumi.set(__self__, "base_path", base_path)
        pulumi.set(__self__, "bucket", bucket)
        pulumi.set(__self__, "indices", indices)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "secret_key", secret_key)
        pulumi.set(__self__, "snapshot_name", snapshot_name)
        if chunk_size is not None:
            pulumi.set(__self__, "chunk_size", chunk_size)
        if compress is not None:
            pulumi.set(__self__, "compress", compress)
        if endpoint is not None:
            pulumi.set(__self__, "endpoint", endpoint)
        if include_aliases is not None:
            pulumi.set(__self__, "include_aliases", include_aliases)
        if readonly is not None:
            pulumi.set(__self__, "readonly", readonly)
        if restore_global_state is not None:
            pulumi.set(__self__, "restore_global_state", restore_global_state)
        if server_side_encryption is not None:
            pulumi.set(__self__, "server_side_encryption", server_side_encryption)

    @property
    @pulumi.getter(name="accessKey")
    def access_key(self) -> builtins.str:
        """
        AWS Access key.
        """
        return pulumi.get(self, "access_key")

    @property
    @pulumi.getter(name="basePath")
    def base_path(self) -> builtins.str:
        """
        The path to the repository data within its container. The value of this setting should not start or end with a /.
        """
        return pulumi.get(self, "base_path")

    @property
    @pulumi.getter
    def bucket(self) -> builtins.str:
        """
        S3 bucket name.
        """
        return pulumi.get(self, "bucket")

    @property
    @pulumi.getter
    def indices(self) -> builtins.str:
        """
        A comma-delimited list of indices to restore from the snapshot. Multi-index syntax is supported. Example: `metrics*,logs*,data-20240823`.
        """
        return pulumi.get(self, "indices")

    @property
    @pulumi.getter
    def region(self) -> builtins.str:
        """
        S3 region.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="secretKey")
    def secret_key(self) -> builtins.str:
        """
        AWS secret key.
        """
        return pulumi.get(self, "secret_key")

    @property
    @pulumi.getter(name="snapshotName")
    def snapshot_name(self) -> builtins.str:
        """
        The snapshot name to restore from.
        """
        return pulumi.get(self, "snapshot_name")

    @property
    @pulumi.getter(name="chunkSize")
    def chunk_size(self) -> Optional[builtins.str]:
        """
        Big files can be broken down into chunks during snapshotting if needed. Should be the same as for the 3rd party repository.
        """
        return pulumi.get(self, "chunk_size")

    @property
    @pulumi.getter
    def compress(self) -> Optional[builtins.bool]:
        """
        When set to true metadata files are stored in compressed format.
        """
        return pulumi.get(self, "compress")

    @property
    @pulumi.getter
    def endpoint(self) -> Optional[builtins.str]:
        """
        The S3 service endpoint to connect to. If you are using an S3-compatible service then you should set this to the service’s endpoint.
        """
        return pulumi.get(self, "endpoint")

    @property
    @pulumi.getter(name="includeAliases")
    def include_aliases(self) -> Optional[builtins.bool]:
        """
        Whether to restore aliases alongside their associated indexes. Default is true.
        """
        return pulumi.get(self, "include_aliases")

    @property
    @pulumi.getter
    def readonly(self) -> Optional[builtins.bool]:
        """
        Whether the repository is read-only. Default: `true`.
        """
        return pulumi.get(self, "readonly")

    @property
    @pulumi.getter(name="restoreGlobalState")
    def restore_global_state(self) -> Optional[builtins.bool]:
        """
        If true, restore the cluster state. Defaults to false.
        """
        return pulumi.get(self, "restore_global_state")

    @property
    @pulumi.getter(name="serverSideEncryption")
    def server_side_encryption(self) -> Optional[builtins.bool]:
        """
        When set to true files are encrypted on server side.
        """
        return pulumi.get(self, "server_side_encryption")


@pulumi.output_type
class GetOpenSearchOpensearchUserConfigSamlResult(dict):
    def __init__(__self__, *,
                 enabled: builtins.bool,
                 idp_entity_id: builtins.str,
                 idp_metadata_url: builtins.str,
                 sp_entity_id: builtins.str,
                 idp_pemtrustedcas_content: Optional[builtins.str] = None,
                 roles_key: Optional[builtins.str] = None,
                 subject_key: Optional[builtins.str] = None):
        """
        :param builtins.bool enabled: Enables or disables SAML-based authentication for OpenSearch. When enabled, users can authenticate using SAML with an Identity Provider. Default: `true`.
        :param builtins.str idp_entity_id: The unique identifier for the Identity Provider (IdP) entity that is used for SAML authentication. This value is typically provided by the IdP. Example: `test-idp-entity-id`.
        :param builtins.str idp_metadata_url: The URL of the SAML metadata for the Identity Provider (IdP). This is used to configure SAML-based authentication with the IdP. Example: `https://test-account.okta.com/app/exk491jujcVc83LEX697/sso/saml/metadata`.
        :param builtins.str sp_entity_id: The unique identifier for the Service Provider (SP) entity that is used for SAML authentication. This value is typically provided by the SP. Example: `test-sp-entity-id`.
        :param builtins.str idp_pemtrustedcas_content: This parameter specifies the PEM-encoded root certificate authority (CA) content for the SAML identity provider (IdP) server verification. The root CA content is used to verify the SSL/TLS certificate presented by the server. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        :param builtins.str roles_key: Optional. Specifies the attribute in the SAML response where role information is stored, if available. Role attributes are not required for SAML authentication, but can be included in SAML assertions by most Identity Providers (IdPs) to determine user access levels or permissions. Example: `RoleName`.
        :param builtins.str subject_key: Optional. Specifies the attribute in the SAML response where the subject identifier is stored. If not configured, the NameID attribute is used by default. Example: `NameID`.
        """
        pulumi.set(__self__, "enabled", enabled)
        pulumi.set(__self__, "idp_entity_id", idp_entity_id)
        pulumi.set(__self__, "idp_metadata_url", idp_metadata_url)
        pulumi.set(__self__, "sp_entity_id", sp_entity_id)
        if idp_pemtrustedcas_content is not None:
            pulumi.set(__self__, "idp_pemtrustedcas_content", idp_pemtrustedcas_content)
        if roles_key is not None:
            pulumi.set(__self__, "roles_key", roles_key)
        if subject_key is not None:
            pulumi.set(__self__, "subject_key", subject_key)

    @property
    @pulumi.getter
    def enabled(self) -> builtins.bool:
        """
        Enables or disables SAML-based authentication for OpenSearch. When enabled, users can authenticate using SAML with an Identity Provider. Default: `true`.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="idpEntityId")
    def idp_entity_id(self) -> builtins.str:
        """
        The unique identifier for the Identity Provider (IdP) entity that is used for SAML authentication. This value is typically provided by the IdP. Example: `test-idp-entity-id`.
        """
        return pulumi.get(self, "idp_entity_id")

    @property
    @pulumi.getter(name="idpMetadataUrl")
    def idp_metadata_url(self) -> builtins.str:
        """
        The URL of the SAML metadata for the Identity Provider (IdP). This is used to configure SAML-based authentication with the IdP. Example: `https://test-account.okta.com/app/exk491jujcVc83LEX697/sso/saml/metadata`.
        """
        return pulumi.get(self, "idp_metadata_url")

    @property
    @pulumi.getter(name="spEntityId")
    def sp_entity_id(self) -> builtins.str:
        """
        The unique identifier for the Service Provider (SP) entity that is used for SAML authentication. This value is typically provided by the SP. Example: `test-sp-entity-id`.
        """
        return pulumi.get(self, "sp_entity_id")

    @property
    @pulumi.getter(name="idpPemtrustedcasContent")
    def idp_pemtrustedcas_content(self) -> Optional[builtins.str]:
        """
        This parameter specifies the PEM-encoded root certificate authority (CA) content for the SAML identity provider (IdP) server verification. The root CA content is used to verify the SSL/TLS certificate presented by the server. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "idp_pemtrustedcas_content")

    @property
    @pulumi.getter(name="rolesKey")
    def roles_key(self) -> Optional[builtins.str]:
        """
        Optional. Specifies the attribute in the SAML response where role information is stored, if available. Role attributes are not required for SAML authentication, but can be included in SAML assertions by most Identity Providers (IdPs) to determine user access levels or permissions. Example: `RoleName`.
        """
        return pulumi.get(self, "roles_key")

    @property
    @pulumi.getter(name="subjectKey")
    def subject_key(self) -> Optional[builtins.str]:
        """
        Optional. Specifies the attribute in the SAML response where the subject identifier is stored. If not configured, the NameID attribute is used by default. Example: `NameID`.
        """
        return pulumi.get(self, "subject_key")


@pulumi.output_type
class GetOpenSearchServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetOpenSearchTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetOpenSearchTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetOrganizationAddressTimeoutsResult(dict):
    def __init__(__self__, *,
                 read: Optional[builtins.str] = None):
        """
        :param builtins.str read: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        if read is not None:
            pulumi.set(__self__, "read", read)

    @property
    @pulumi.getter
    def read(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "read")


@pulumi.output_type
class GetOrganizationBillingGroupListBillingGroupResult(dict):
    def __init__(__self__, *,
                 billing_address_id: builtins.str,
                 billing_contact_emails: Sequence[builtins.str],
                 billing_currency: builtins.str,
                 billing_emails: Sequence[builtins.str],
                 billing_group_id: builtins.str,
                 billing_group_name: builtins.str,
                 custom_invoice_text: builtins.str,
                 organization_id: builtins.str,
                 payment_method_id: builtins.str,
                 shipping_address_id: builtins.str,
                 vat_id: builtins.str):
        """
        :param builtins.str billing_address_id: Billing address ID.
        :param Sequence[builtins.str] billing_contact_emails: List of billing contact emails.
        :param builtins.str billing_currency: Acceptable currencies for a billing group. The possible values are `AUD`, `CAD`, `CHF`, `DKK`, `EUR`, `GBP`, `JPY`, `NOK`, `NZD`, `SEK`, `SGD` and `USD`.
        :param Sequence[builtins.str] billing_emails: List of billing contact emails.
        :param builtins.str billing_group_id: Billing group ID.
        :param builtins.str billing_group_name: Billing Group Name.
        :param builtins.str custom_invoice_text: Extra billing text.
        :param builtins.str organization_id: Organization ID.
        :param builtins.str payment_method_id: Payment method ID.
        :param builtins.str shipping_address_id: Shipping address ID.
        :param builtins.str vat_id: VAT ID.
        """
        pulumi.set(__self__, "billing_address_id", billing_address_id)
        pulumi.set(__self__, "billing_contact_emails", billing_contact_emails)
        pulumi.set(__self__, "billing_currency", billing_currency)
        pulumi.set(__self__, "billing_emails", billing_emails)
        pulumi.set(__self__, "billing_group_id", billing_group_id)
        pulumi.set(__self__, "billing_group_name", billing_group_name)
        pulumi.set(__self__, "custom_invoice_text", custom_invoice_text)
        pulumi.set(__self__, "organization_id", organization_id)
        pulumi.set(__self__, "payment_method_id", payment_method_id)
        pulumi.set(__self__, "shipping_address_id", shipping_address_id)
        pulumi.set(__self__, "vat_id", vat_id)

    @property
    @pulumi.getter(name="billingAddressId")
    def billing_address_id(self) -> builtins.str:
        """
        Billing address ID.
        """
        return pulumi.get(self, "billing_address_id")

    @property
    @pulumi.getter(name="billingContactEmails")
    def billing_contact_emails(self) -> Sequence[builtins.str]:
        """
        List of billing contact emails.
        """
        return pulumi.get(self, "billing_contact_emails")

    @property
    @pulumi.getter(name="billingCurrency")
    def billing_currency(self) -> builtins.str:
        """
        Acceptable currencies for a billing group. The possible values are `AUD`, `CAD`, `CHF`, `DKK`, `EUR`, `GBP`, `JPY`, `NOK`, `NZD`, `SEK`, `SGD` and `USD`.
        """
        return pulumi.get(self, "billing_currency")

    @property
    @pulumi.getter(name="billingEmails")
    def billing_emails(self) -> Sequence[builtins.str]:
        """
        List of billing contact emails.
        """
        return pulumi.get(self, "billing_emails")

    @property
    @pulumi.getter(name="billingGroupId")
    def billing_group_id(self) -> builtins.str:
        """
        Billing group ID.
        """
        return pulumi.get(self, "billing_group_id")

    @property
    @pulumi.getter(name="billingGroupName")
    def billing_group_name(self) -> builtins.str:
        """
        Billing Group Name.
        """
        return pulumi.get(self, "billing_group_name")

    @property
    @pulumi.getter(name="customInvoiceText")
    def custom_invoice_text(self) -> builtins.str:
        """
        Extra billing text.
        """
        return pulumi.get(self, "custom_invoice_text")

    @property
    @pulumi.getter(name="organizationId")
    def organization_id(self) -> builtins.str:
        """
        Organization ID.
        """
        return pulumi.get(self, "organization_id")

    @property
    @pulumi.getter(name="paymentMethodId")
    def payment_method_id(self) -> builtins.str:
        """
        Payment method ID.
        """
        return pulumi.get(self, "payment_method_id")

    @property
    @pulumi.getter(name="shippingAddressId")
    def shipping_address_id(self) -> builtins.str:
        """
        Shipping address ID.
        """
        return pulumi.get(self, "shipping_address_id")

    @property
    @pulumi.getter(name="vatId")
    def vat_id(self) -> builtins.str:
        """
        VAT ID.
        """
        return pulumi.get(self, "vat_id")


@pulumi.output_type
class GetOrganizationBillingGroupListTimeoutsResult(dict):
    def __init__(__self__, *,
                 read: Optional[builtins.str] = None):
        """
        :param builtins.str read: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        if read is not None:
            pulumi.set(__self__, "read", read)

    @property
    @pulumi.getter
    def read(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "read")


@pulumi.output_type
class GetOrganizationBillingGroupTimeoutsResult(dict):
    def __init__(__self__, *,
                 read: Optional[builtins.str] = None):
        """
        :param builtins.str read: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        if read is not None:
            pulumi.set(__self__, "read", read)

    @property
    @pulumi.getter
    def read(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "read")


@pulumi.output_type
class GetOrganizationProjectTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Project tag key.
        :param builtins.str value: Project tag value.
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Project tag key.
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Project tag value.
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetOrganizationProjectTimeoutsResult(dict):
    def __init__(__self__, *,
                 read: Optional[builtins.str] = None):
        """
        :param builtins.str read: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        if read is not None:
            pulumi.set(__self__, "read", read)

    @property
    @pulumi.getter
    def read(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "read")


@pulumi.output_type
class GetOrganizationTimeoutsResult(dict):
    def __init__(__self__, *,
                 read: Optional[builtins.str] = None):
        """
        :param builtins.str read: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        if read is not None:
            pulumi.set(__self__, "read", read)

    @property
    @pulumi.getter
    def read(self) -> Optional[builtins.str]:
        """
        A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
        """
        return pulumi.get(self, "read")


@pulumi.output_type
class GetOrganizationUserListUserResult(dict):
    def __init__(__self__, *,
                 is_super_admin: builtins.bool,
                 join_time: builtins.str,
                 last_activity_time: builtins.str,
                 user_id: builtins.str,
                 user_infos: Sequence['outputs.GetOrganizationUserListUserUserInfoResult']):
        """
        :param builtins.bool is_super_admin: Indicates whether the user is a [super admin](https://aiven.io/docs/platform/concepts/permissions).
        :param builtins.str join_time: Date and time when the user joined the organization.
        :param builtins.str last_activity_time: Last activity time.
        :param builtins.str user_id: User ID.
        """
        pulumi.set(__self__, "is_super_admin", is_super_admin)
        pulumi.set(__self__, "join_time", join_time)
        pulumi.set(__self__, "last_activity_time", last_activity_time)
        pulumi.set(__self__, "user_id", user_id)
        pulumi.set(__self__, "user_infos", user_infos)

    @property
    @pulumi.getter(name="isSuperAdmin")
    def is_super_admin(self) -> builtins.bool:
        """
        Indicates whether the user is a [super admin](https://aiven.io/docs/platform/concepts/permissions).
        """
        return pulumi.get(self, "is_super_admin")

    @property
    @pulumi.getter(name="joinTime")
    def join_time(self) -> builtins.str:
        """
        Date and time when the user joined the organization.
        """
        return pulumi.get(self, "join_time")

    @property
    @pulumi.getter(name="lastActivityTime")
    def last_activity_time(self) -> builtins.str:
        """
        Last activity time.
        """
        return pulumi.get(self, "last_activity_time")

    @property
    @pulumi.getter(name="userId")
    def user_id(self) -> builtins.str:
        """
        User ID.
        """
        return pulumi.get(self, "user_id")

    @property
    @pulumi.getter(name="userInfos")
    def user_infos(self) -> Sequence['outputs.GetOrganizationUserListUserUserInfoResult']:
        return pulumi.get(self, "user_infos")


@pulumi.output_type
class GetOrganizationUserListUserUserInfoResult(dict):
    def __init__(__self__, *,
                 city: builtins.str,
                 country: builtins.str,
                 create_time: builtins.str,
                 department: builtins.str,
                 is_application_user: builtins.bool,
                 job_title: builtins.str,
                 managed_by_scim: builtins.bool,
                 managing_organization_id: builtins.str,
                 real_name: builtins.str,
                 state: builtins.str,
                 user_email: builtins.str):
        """
        :param builtins.str city: City
        :param builtins.str country: Country
        :param builtins.str create_time: Date and time when the user was created.
        :param builtins.str department: Department
        :param builtins.bool is_application_user: Inidicates whether the user is an [application user](https://aiven.io/docs/platform/concepts/application-users).
        :param builtins.str job_title: Job title
        :param builtins.bool managed_by_scim: Indicates whether the user is managed by [System for Cross-domain Identity Management (SCIM)](https://aiven.io/docs/platform/howto/list-identity-providers).
        :param builtins.str managing_organization_id: The ID of the organization that [manages the user](https://aiven.io/docs/platform/concepts/managed-users).
        :param builtins.str real_name: Full name of the user.
        :param builtins.str state: State
        :param builtins.str user_email: Email address.
        """
        pulumi.set(__self__, "city", city)
        pulumi.set(__self__, "country", country)
        pulumi.set(__self__, "create_time", create_time)
        pulumi.set(__self__, "department", department)
        pulumi.set(__self__, "is_application_user", is_application_user)
        pulumi.set(__self__, "job_title", job_title)
        pulumi.set(__self__, "managed_by_scim", managed_by_scim)
        pulumi.set(__self__, "managing_organization_id", managing_organization_id)
        pulumi.set(__self__, "real_name", real_name)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "user_email", user_email)

    @property
    @pulumi.getter
    def city(self) -> builtins.str:
        """
        City
        """
        return pulumi.get(self, "city")

    @property
    @pulumi.getter
    def country(self) -> builtins.str:
        """
        Country
        """
        return pulumi.get(self, "country")

    @property
    @pulumi.getter(name="createTime")
    def create_time(self) -> builtins.str:
        """
        Date and time when the user was created.
        """
        return pulumi.get(self, "create_time")

    @property
    @pulumi.getter
    def department(self) -> builtins.str:
        """
        Department
        """
        return pulumi.get(self, "department")

    @property
    @pulumi.getter(name="isApplicationUser")
    def is_application_user(self) -> builtins.bool:
        """
        Inidicates whether the user is an [application user](https://aiven.io/docs/platform/concepts/application-users).
        """
        return pulumi.get(self, "is_application_user")

    @property
    @pulumi.getter(name="jobTitle")
    def job_title(self) -> builtins.str:
        """
        Job title
        """
        return pulumi.get(self, "job_title")

    @property
    @pulumi.getter(name="managedByScim")
    def managed_by_scim(self) -> builtins.bool:
        """
        Indicates whether the user is managed by [System for Cross-domain Identity Management (SCIM)](https://aiven.io/docs/platform/howto/list-identity-providers).
        """
        return pulumi.get(self, "managed_by_scim")

    @property
    @pulumi.getter(name="managingOrganizationId")
    def managing_organization_id(self) -> builtins.str:
        """
        The ID of the organization that [manages the user](https://aiven.io/docs/platform/concepts/managed-users).
        """
        return pulumi.get(self, "managing_organization_id")

    @property
    @pulumi.getter(name="realName")
    def real_name(self) -> builtins.str:
        """
        Full name of the user.
        """
        return pulumi.get(self, "real_name")

    @property
    @pulumi.getter
    def state(self) -> builtins.str:
        """
        State
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="userEmail")
    def user_email(self) -> builtins.str:
        """
        Email address.
        """
        return pulumi.get(self, "user_email")


@pulumi.output_type
class GetPgComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetPgPgResult(dict):
    def __init__(__self__, *,
                 bouncer: builtins.str,
                 dbname: builtins.str,
                 host: builtins.str,
                 max_connections: builtins.int,
                 params: Sequence['outputs.GetPgPgParamResult'],
                 password: builtins.str,
                 port: builtins.int,
                 replica_uri: builtins.str,
                 sslmode: builtins.str,
                 standby_uris: Sequence[builtins.str],
                 syncing_uris: Sequence[builtins.str],
                 uri: builtins.str,
                 uris: Sequence[builtins.str],
                 user: builtins.str):
        """
        :param builtins.str bouncer: PgBouncer connection details for [connection pooling](https://aiven.io/docs/products/postgresql/concepts/pg-connection-pooling).
        :param builtins.str dbname: Primary PostgreSQL database name.
        :param builtins.str host: PostgreSQL primary node host IP or name.
        :param builtins.int max_connections: The [number of allowed connections](https://aiven.io/docs/products/postgresql/reference/pg-connection-limits). Varies based on the service plan.
        :param Sequence['GetPgPgParamArgs'] params: PostgreSQL connection parameters.
        :param builtins.str password: PostgreSQL admin user password.
        :param builtins.int port: PostgreSQL port.
        :param builtins.str replica_uri: PostgreSQL replica URI for services with a replica.
        :param builtins.str sslmode: PostgreSQL SSL mode setting.
        :param Sequence[builtins.str] standby_uris: PostgreSQL standby connection URIs.
        :param Sequence[builtins.str] syncing_uris: PostgreSQL syncing connection URIs.
        :param builtins.str uri: PostgreSQL primary connection URI.
        :param Sequence[builtins.str] uris: PostgreSQL primary connection URIs.
        :param builtins.str user: PostgreSQL admin user name.
        """
        pulumi.set(__self__, "bouncer", bouncer)
        pulumi.set(__self__, "dbname", dbname)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "max_connections", max_connections)
        pulumi.set(__self__, "params", params)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "replica_uri", replica_uri)
        pulumi.set(__self__, "sslmode", sslmode)
        pulumi.set(__self__, "standby_uris", standby_uris)
        pulumi.set(__self__, "syncing_uris", syncing_uris)
        pulumi.set(__self__, "uri", uri)
        pulumi.set(__self__, "uris", uris)
        pulumi.set(__self__, "user", user)

    @property
    @pulumi.getter
    @_utilities.deprecated("""This field was added by mistake and has never worked. It will be removed in future versions.""")
    def bouncer(self) -> builtins.str:
        """
        PgBouncer connection details for [connection pooling](https://aiven.io/docs/products/postgresql/concepts/pg-connection-pooling).
        """
        return pulumi.get(self, "bouncer")

    @property
    @pulumi.getter
    def dbname(self) -> builtins.str:
        """
        Primary PostgreSQL database name.
        """
        return pulumi.get(self, "dbname")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        PostgreSQL primary node host IP or name.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="maxConnections")
    def max_connections(self) -> builtins.int:
        """
        The [number of allowed connections](https://aiven.io/docs/products/postgresql/reference/pg-connection-limits). Varies based on the service plan.
        """
        return pulumi.get(self, "max_connections")

    @property
    @pulumi.getter
    def params(self) -> Sequence['outputs.GetPgPgParamResult']:
        """
        PostgreSQL connection parameters.
        """
        return pulumi.get(self, "params")

    @property
    @pulumi.getter
    def password(self) -> builtins.str:
        """
        PostgreSQL admin user password.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        PostgreSQL port.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter(name="replicaUri")
    def replica_uri(self) -> builtins.str:
        """
        PostgreSQL replica URI for services with a replica.
        """
        return pulumi.get(self, "replica_uri")

    @property
    @pulumi.getter
    def sslmode(self) -> builtins.str:
        """
        PostgreSQL SSL mode setting.
        """
        return pulumi.get(self, "sslmode")

    @property
    @pulumi.getter(name="standbyUris")
    def standby_uris(self) -> Sequence[builtins.str]:
        """
        PostgreSQL standby connection URIs.
        """
        return pulumi.get(self, "standby_uris")

    @property
    @pulumi.getter(name="syncingUris")
    def syncing_uris(self) -> Sequence[builtins.str]:
        """
        PostgreSQL syncing connection URIs.
        """
        return pulumi.get(self, "syncing_uris")

    @property
    @pulumi.getter
    def uri(self) -> builtins.str:
        """
        PostgreSQL primary connection URI.
        """
        return pulumi.get(self, "uri")

    @property
    @pulumi.getter
    def uris(self) -> Sequence[builtins.str]:
        """
        PostgreSQL primary connection URIs.
        """
        return pulumi.get(self, "uris")

    @property
    @pulumi.getter
    def user(self) -> builtins.str:
        """
        PostgreSQL admin user name.
        """
        return pulumi.get(self, "user")


@pulumi.output_type
class GetPgPgParamResult(dict):
    def __init__(__self__, *,
                 database_name: builtins.str,
                 host: builtins.str,
                 password: builtins.str,
                 port: builtins.int,
                 sslmode: builtins.str,
                 user: builtins.str):
        """
        :param builtins.str database_name: Primary PostgreSQL database name.
        :param builtins.str host: PostgreSQL host IP or name.
        :param builtins.str password: PostgreSQL admin user password.
        :param builtins.int port: PostgreSQL port.
        :param builtins.str sslmode: PostgreSQL SSL mode setting.
        :param builtins.str user: PostgreSQL admin user name.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "sslmode", sslmode)
        pulumi.set(__self__, "user", user)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> builtins.str:
        """
        Primary PostgreSQL database name.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        PostgreSQL host IP or name.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def password(self) -> builtins.str:
        """
        PostgreSQL admin user password.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        PostgreSQL port.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def sslmode(self) -> builtins.str:
        """
        PostgreSQL SSL mode setting.
        """
        return pulumi.get(self, "sslmode")

    @property
    @pulumi.getter
    def user(self) -> builtins.str:
        """
        PostgreSQL admin user name.
        """
        return pulumi.get(self, "user")


@pulumi.output_type
class GetPgPgUserConfigResult(dict):
    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 admin_password: Optional[builtins.str] = None,
                 admin_username: Optional[builtins.str] = None,
                 backup_hour: Optional[builtins.int] = None,
                 backup_minute: Optional[builtins.int] = None,
                 enable_ipv6: Optional[builtins.bool] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetPgPgUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 migration: Optional['outputs.GetPgPgUserConfigMigrationResult'] = None,
                 pg: Optional['outputs.GetPgPgUserConfigPgResult'] = None,
                 pg_qualstats: Optional['outputs.GetPgPgUserConfigPgQualstatsResult'] = None,
                 pg_read_replica: Optional[builtins.bool] = None,
                 pg_service_to_fork_from: Optional[builtins.str] = None,
                 pg_stat_monitor_enable: Optional[builtins.bool] = None,
                 pg_version: Optional[builtins.str] = None,
                 pgaudit: Optional['outputs.GetPgPgUserConfigPgauditResult'] = None,
                 pgbouncer: Optional['outputs.GetPgPgUserConfigPgbouncerResult'] = None,
                 pglookout: Optional['outputs.GetPgPgUserConfigPglookoutResult'] = None,
                 private_access: Optional['outputs.GetPgPgUserConfigPrivateAccessResult'] = None,
                 privatelink_access: Optional['outputs.GetPgPgUserConfigPrivatelinkAccessResult'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.GetPgPgUserConfigPublicAccessResult'] = None,
                 recovery_target_time: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 shared_buffers_percentage: Optional[builtins.float] = None,
                 static_ips: Optional[builtins.bool] = None,
                 synchronous_replication: Optional[builtins.str] = None,
                 timescaledb: Optional['outputs.GetPgPgUserConfigTimescaledbResult'] = None,
                 variant: Optional[builtins.str] = None,
                 work_mem: Optional[builtins.int] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.str admin_password: Custom password for admin user. Defaults to random string. This must be set only when a new service is being created.
        :param builtins.str admin_username: Custom username for admin user. This must be set only when a new service is being created. Example: `avnadmin`.
        :param builtins.int backup_hour: The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        :param builtins.int backup_minute: The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        :param builtins.bool enable_ipv6: Register AAAA DNS records for the service, and allow IPv6 packets to service ports.
        :param Sequence['GetPgPgUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'GetPgPgUserConfigMigrationArgs' migration: Migrate data from existing server
        :param 'GetPgPgUserConfigPgArgs' pg: postgresql.conf configuration values
        :param 'GetPgPgUserConfigPgQualstatsArgs' pg_qualstats: System-wide settings for the pg_qualstats extension
        :param builtins.bool pg_read_replica: Should the service which is being forked be a read replica (deprecated, use read_replica service integration instead).
        :param builtins.str pg_service_to_fork_from: Name of the PG Service from which to fork (deprecated, use service_to_fork_from). This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool pg_stat_monitor_enable: Enable the pg_stat_monitor extension. Changing this parameter causes a service restart. When this extension is enabled, pg_stat_statements results for utility commands are unreliable. Default: `false`.
        :param builtins.str pg_version: Enum: `10`, `11`, `12`, `13`, `14`, `15`, `16`, `17`, and newer. PostgreSQL major version.
        :param 'GetPgPgUserConfigPgauditArgs' pgaudit: System-wide settings for the pgaudit extension
        :param 'GetPgPgUserConfigPgbouncerArgs' pgbouncer: PGBouncer connection pooling settings
        :param 'GetPgPgUserConfigPglookoutArgs' pglookout: System-wide settings for pglookout
        :param 'GetPgPgUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'GetPgPgUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'GetPgPgUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_target_time: Recovery target time when forking a service. This has effect only when a new service is being created. Example: `2019-01-01 23:34:45`.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.float shared_buffers_percentage: Percentage of total RAM that the database server uses for shared memory buffers. Valid range is 20-60 (float), which corresponds to 20% - 60%. This setting adjusts the shared_buffers configuration value. Changing this parameter causes a service restart. Example: `41.5`.
        :param builtins.bool static_ips: Use static public IP addresses.
        :param builtins.str synchronous_replication: Enum: `off`, `quorum`. Synchronous replication type. Note that the service plan also needs to support synchronous replication.
        :param 'GetPgPgUserConfigTimescaledbArgs' timescaledb: System-wide settings for the timescaledb extension
        :param builtins.str variant: Enum: `aiven`, `timescale`. Variant of the PostgreSQL service, may affect the features that are exposed by default.
        :param builtins.int work_mem: Sets the maximum amount of memory to be used by a query operation (such as a sort or hash table) before writing to temporary disk files, in MB. The default is 1MB + 0.075% of total RAM (up to 32MB). Example: `4`.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if admin_password is not None:
            pulumi.set(__self__, "admin_password", admin_password)
        if admin_username is not None:
            pulumi.set(__self__, "admin_username", admin_username)
        if backup_hour is not None:
            pulumi.set(__self__, "backup_hour", backup_hour)
        if backup_minute is not None:
            pulumi.set(__self__, "backup_minute", backup_minute)
        if enable_ipv6 is not None:
            pulumi.set(__self__, "enable_ipv6", enable_ipv6)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if migration is not None:
            pulumi.set(__self__, "migration", migration)
        if pg is not None:
            pulumi.set(__self__, "pg", pg)
        if pg_qualstats is not None:
            pulumi.set(__self__, "pg_qualstats", pg_qualstats)
        if pg_read_replica is not None:
            pulumi.set(__self__, "pg_read_replica", pg_read_replica)
        if pg_service_to_fork_from is not None:
            pulumi.set(__self__, "pg_service_to_fork_from", pg_service_to_fork_from)
        if pg_stat_monitor_enable is not None:
            pulumi.set(__self__, "pg_stat_monitor_enable", pg_stat_monitor_enable)
        if pg_version is not None:
            pulumi.set(__self__, "pg_version", pg_version)
        if pgaudit is not None:
            pulumi.set(__self__, "pgaudit", pgaudit)
        if pgbouncer is not None:
            pulumi.set(__self__, "pgbouncer", pgbouncer)
        if pglookout is not None:
            pulumi.set(__self__, "pglookout", pglookout)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_target_time is not None:
            pulumi.set(__self__, "recovery_target_time", recovery_target_time)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if shared_buffers_percentage is not None:
            pulumi.set(__self__, "shared_buffers_percentage", shared_buffers_percentage)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)
        if synchronous_replication is not None:
            pulumi.set(__self__, "synchronous_replication", synchronous_replication)
        if timescaledb is not None:
            pulumi.set(__self__, "timescaledb", timescaledb)
        if variant is not None:
            pulumi.set(__self__, "variant", variant)
        if work_mem is not None:
            pulumi.set(__self__, "work_mem", work_mem)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="adminPassword")
    def admin_password(self) -> Optional[builtins.str]:
        """
        Custom password for admin user. Defaults to random string. This must be set only when a new service is being created.
        """
        return pulumi.get(self, "admin_password")

    @property
    @pulumi.getter(name="adminUsername")
    def admin_username(self) -> Optional[builtins.str]:
        """
        Custom username for admin user. This must be set only when a new service is being created. Example: `avnadmin`.
        """
        return pulumi.get(self, "admin_username")

    @property
    @pulumi.getter(name="backupHour")
    def backup_hour(self) -> Optional[builtins.int]:
        """
        The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        """
        return pulumi.get(self, "backup_hour")

    @property
    @pulumi.getter(name="backupMinute")
    def backup_minute(self) -> Optional[builtins.int]:
        """
        The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        """
        return pulumi.get(self, "backup_minute")

    @property
    @pulumi.getter(name="enableIpv6")
    def enable_ipv6(self) -> Optional[builtins.bool]:
        """
        Register AAAA DNS records for the service, and allow IPv6 packets to service ports.
        """
        return pulumi.get(self, "enable_ipv6")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetPgPgUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter
    def migration(self) -> Optional['outputs.GetPgPgUserConfigMigrationResult']:
        """
        Migrate data from existing server
        """
        return pulumi.get(self, "migration")

    @property
    @pulumi.getter
    def pg(self) -> Optional['outputs.GetPgPgUserConfigPgResult']:
        """
        postgresql.conf configuration values
        """
        return pulumi.get(self, "pg")

    @property
    @pulumi.getter(name="pgQualstats")
    @_utilities.deprecated("""This property is deprecated.""")
    def pg_qualstats(self) -> Optional['outputs.GetPgPgUserConfigPgQualstatsResult']:
        """
        System-wide settings for the pg_qualstats extension
        """
        return pulumi.get(self, "pg_qualstats")

    @property
    @pulumi.getter(name="pgReadReplica")
    def pg_read_replica(self) -> Optional[builtins.bool]:
        """
        Should the service which is being forked be a read replica (deprecated, use read_replica service integration instead).
        """
        return pulumi.get(self, "pg_read_replica")

    @property
    @pulumi.getter(name="pgServiceToForkFrom")
    def pg_service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of the PG Service from which to fork (deprecated, use service_to_fork_from). This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "pg_service_to_fork_from")

    @property
    @pulumi.getter(name="pgStatMonitorEnable")
    def pg_stat_monitor_enable(self) -> Optional[builtins.bool]:
        """
        Enable the pg_stat_monitor extension. Changing this parameter causes a service restart. When this extension is enabled, pg_stat_statements results for utility commands are unreliable. Default: `false`.
        """
        return pulumi.get(self, "pg_stat_monitor_enable")

    @property
    @pulumi.getter(name="pgVersion")
    def pg_version(self) -> Optional[builtins.str]:
        """
        Enum: `10`, `11`, `12`, `13`, `14`, `15`, `16`, `17`, and newer. PostgreSQL major version.
        """
        return pulumi.get(self, "pg_version")

    @property
    @pulumi.getter
    def pgaudit(self) -> Optional['outputs.GetPgPgUserConfigPgauditResult']:
        """
        System-wide settings for the pgaudit extension
        """
        return pulumi.get(self, "pgaudit")

    @property
    @pulumi.getter
    def pgbouncer(self) -> Optional['outputs.GetPgPgUserConfigPgbouncerResult']:
        """
        PGBouncer connection pooling settings
        """
        return pulumi.get(self, "pgbouncer")

    @property
    @pulumi.getter
    def pglookout(self) -> Optional['outputs.GetPgPgUserConfigPglookoutResult']:
        """
        System-wide settings for pglookout
        """
        return pulumi.get(self, "pglookout")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.GetPgPgUserConfigPrivateAccessResult']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.GetPgPgUserConfigPrivatelinkAccessResult']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GetPgPgUserConfigPublicAccessResult']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryTargetTime")
    def recovery_target_time(self) -> Optional[builtins.str]:
        """
        Recovery target time when forking a service. This has effect only when a new service is being created. Example: `2019-01-01 23:34:45`.
        """
        return pulumi.get(self, "recovery_target_time")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="sharedBuffersPercentage")
    def shared_buffers_percentage(self) -> Optional[builtins.float]:
        """
        Percentage of total RAM that the database server uses for shared memory buffers. Valid range is 20-60 (float), which corresponds to 20% - 60%. This setting adjusts the shared_buffers configuration value. Changing this parameter causes a service restart. Example: `41.5`.
        """
        return pulumi.get(self, "shared_buffers_percentage")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")

    @property
    @pulumi.getter(name="synchronousReplication")
    def synchronous_replication(self) -> Optional[builtins.str]:
        """
        Enum: `off`, `quorum`. Synchronous replication type. Note that the service plan also needs to support synchronous replication.
        """
        return pulumi.get(self, "synchronous_replication")

    @property
    @pulumi.getter
    def timescaledb(self) -> Optional['outputs.GetPgPgUserConfigTimescaledbResult']:
        """
        System-wide settings for the timescaledb extension
        """
        return pulumi.get(self, "timescaledb")

    @property
    @pulumi.getter
    def variant(self) -> Optional[builtins.str]:
        """
        Enum: `aiven`, `timescale`. Variant of the PostgreSQL service, may affect the features that are exposed by default.
        """
        return pulumi.get(self, "variant")

    @property
    @pulumi.getter(name="workMem")
    def work_mem(self) -> Optional[builtins.int]:
        """
        Sets the maximum amount of memory to be used by a query operation (such as a sort or hash table) before writing to temporary disk files, in MB. The default is 1MB + 0.075% of total RAM (up to 32MB). Example: `4`.
        """
        return pulumi.get(self, "work_mem")


@pulumi.output_type
class GetPgPgUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetPgPgUserConfigMigrationResult(dict):
    def __init__(__self__, *,
                 host: builtins.str,
                 port: builtins.int,
                 dbname: Optional[builtins.str] = None,
                 ignore_dbs: Optional[builtins.str] = None,
                 ignore_roles: Optional[builtins.str] = None,
                 method: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 username: Optional[builtins.str] = None):
        """
        :param builtins.str host: Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        :param builtins.int port: Port number of the server where to migrate data from. Example: `1234`.
        :param builtins.str dbname: Database name for bootstrapping the initial connection. Example: `defaultdb`.
        :param builtins.str ignore_dbs: Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        :param builtins.str ignore_roles: Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        :param builtins.str method: Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        :param builtins.str password: Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        :param builtins.bool ssl: The server where to migrate data from is secured with SSL. Default: `true`.
        :param builtins.str username: User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "port", port)
        if dbname is not None:
            pulumi.set(__self__, "dbname", dbname)
        if ignore_dbs is not None:
            pulumi.set(__self__, "ignore_dbs", ignore_dbs)
        if ignore_roles is not None:
            pulumi.set(__self__, "ignore_roles", ignore_roles)
        if method is not None:
            pulumi.set(__self__, "method", method)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number of the server where to migrate data from. Example: `1234`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def dbname(self) -> Optional[builtins.str]:
        """
        Database name for bootstrapping the initial connection. Example: `defaultdb`.
        """
        return pulumi.get(self, "dbname")

    @property
    @pulumi.getter(name="ignoreDbs")
    def ignore_dbs(self) -> Optional[builtins.str]:
        """
        Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        """
        return pulumi.get(self, "ignore_dbs")

    @property
    @pulumi.getter(name="ignoreRoles")
    def ignore_roles(self) -> Optional[builtins.str]:
        """
        Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        """
        return pulumi.get(self, "ignore_roles")

    @property
    @pulumi.getter
    def method(self) -> Optional[builtins.str]:
        """
        Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        """
        return pulumi.get(self, "method")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        The server where to migrate data from is secured with SSL. Default: `true`.
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def username(self) -> Optional[builtins.str]:
        """
        User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class GetPgPgUserConfigPgResult(dict):
    def __init__(__self__, *,
                 autovacuum_analyze_scale_factor: Optional[builtins.float] = None,
                 autovacuum_analyze_threshold: Optional[builtins.int] = None,
                 autovacuum_freeze_max_age: Optional[builtins.int] = None,
                 autovacuum_max_workers: Optional[builtins.int] = None,
                 autovacuum_naptime: Optional[builtins.int] = None,
                 autovacuum_vacuum_cost_delay: Optional[builtins.int] = None,
                 autovacuum_vacuum_cost_limit: Optional[builtins.int] = None,
                 autovacuum_vacuum_scale_factor: Optional[builtins.float] = None,
                 autovacuum_vacuum_threshold: Optional[builtins.int] = None,
                 bgwriter_delay: Optional[builtins.int] = None,
                 bgwriter_flush_after: Optional[builtins.int] = None,
                 bgwriter_lru_maxpages: Optional[builtins.int] = None,
                 bgwriter_lru_multiplier: Optional[builtins.float] = None,
                 deadlock_timeout: Optional[builtins.int] = None,
                 default_toast_compression: Optional[builtins.str] = None,
                 idle_in_transaction_session_timeout: Optional[builtins.int] = None,
                 jit: Optional[builtins.bool] = None,
                 log_autovacuum_min_duration: Optional[builtins.int] = None,
                 log_error_verbosity: Optional[builtins.str] = None,
                 log_line_prefix: Optional[builtins.str] = None,
                 log_min_duration_statement: Optional[builtins.int] = None,
                 log_temp_files: Optional[builtins.int] = None,
                 max_files_per_process: Optional[builtins.int] = None,
                 max_locks_per_transaction: Optional[builtins.int] = None,
                 max_logical_replication_workers: Optional[builtins.int] = None,
                 max_parallel_workers: Optional[builtins.int] = None,
                 max_parallel_workers_per_gather: Optional[builtins.int] = None,
                 max_pred_locks_per_transaction: Optional[builtins.int] = None,
                 max_prepared_transactions: Optional[builtins.int] = None,
                 max_replication_slots: Optional[builtins.int] = None,
                 max_slot_wal_keep_size: Optional[builtins.int] = None,
                 max_stack_depth: Optional[builtins.int] = None,
                 max_standby_archive_delay: Optional[builtins.int] = None,
                 max_standby_streaming_delay: Optional[builtins.int] = None,
                 max_wal_senders: Optional[builtins.int] = None,
                 max_worker_processes: Optional[builtins.int] = None,
                 password_encryption: Optional[builtins.str] = None,
                 pg_partman_bgw_dot_interval: Optional[builtins.int] = None,
                 pg_partman_bgw_dot_role: Optional[builtins.str] = None,
                 pg_stat_monitor_dot_pgsm_enable_query_plan: Optional[builtins.bool] = None,
                 pg_stat_monitor_dot_pgsm_max_buckets: Optional[builtins.int] = None,
                 pg_stat_statements_dot_track: Optional[builtins.str] = None,
                 temp_file_limit: Optional[builtins.int] = None,
                 timezone: Optional[builtins.str] = None,
                 track_activity_query_size: Optional[builtins.int] = None,
                 track_commit_timestamp: Optional[builtins.str] = None,
                 track_functions: Optional[builtins.str] = None,
                 track_io_timing: Optional[builtins.str] = None,
                 wal_sender_timeout: Optional[builtins.int] = None,
                 wal_writer_delay: Optional[builtins.int] = None):
        """
        :param builtins.float autovacuum_analyze_scale_factor: Specifies a fraction of the table size to add to autovacuum_analyze_threshold when deciding whether to trigger an ANALYZE (e.g. `0.2` for 20% of the table size). The default is `0.2`.
        :param builtins.int autovacuum_analyze_threshold: Specifies the minimum number of inserted, updated or deleted tuples needed to trigger an ANALYZE in any one table. The default is `50`.
        :param builtins.int autovacuum_freeze_max_age: Specifies the maximum age (in transactions) that a table's pg_class.relfrozenxid field can attain before a VACUUM operation is forced to prevent transaction ID wraparound within the table. The system launches autovacuum processes to prevent wraparound even when autovacuum is otherwise disabled. Changing this parameter causes a service restart. Example: `200000000`.
        :param builtins.int autovacuum_max_workers: Specifies the maximum number of autovacuum processes (other than the autovacuum launcher) that may be running at any one time. The default is `3`. Changing this parameter causes a service restart.
        :param builtins.int autovacuum_naptime: Specifies the minimum delay between autovacuum runs on any given database. The delay is measured in seconds. The default is `60`.
        :param builtins.int autovacuum_vacuum_cost_delay: Specifies the cost delay value that will be used in automatic VACUUM operations. If `-1` is specified, the regular vacuum_cost_delay value will be used. The default is `2` (upstream default).
        :param builtins.int autovacuum_vacuum_cost_limit: Specifies the cost limit value that will be used in automatic VACUUM operations. If `-1` is specified, the regular vacuum_cost_limit value will be used. The default is `-1` (upstream default).
        :param builtins.float autovacuum_vacuum_scale_factor: Specifies a fraction of the table size to add to autovacuum_vacuum_threshold when deciding whether to trigger a VACUUM (e.g. `0.2` for 20% of the table size). The default is `0.2`.
        :param builtins.int autovacuum_vacuum_threshold: Specifies the minimum number of updated or deleted tuples needed to trigger a VACUUM in any one table. The default is `50`.
        :param builtins.int bgwriter_delay: Specifies the delay between activity rounds for the background writer in milliseconds. The default is `200`. Example: `200`.
        :param builtins.int bgwriter_flush_after: Whenever more than bgwriter_flush_after bytes have been written by the background writer, attempt to force the OS to issue these writes to the underlying storage. Specified in kilobytes. Setting of 0 disables forced writeback. The default is `512`. Example: `512`.
        :param builtins.int bgwriter_lru_maxpages: In each round, no more than this many buffers will be written by the background writer. Setting this to zero disables background writing. The default is `100`. Example: `100`.
        :param builtins.float bgwriter_lru_multiplier: The average recent need for new buffers is multiplied by bgwriter_lru_multiplier to arrive at an estimate of the number that will be needed during the next round, (up to bgwriter_lru_maxpages). 1.0 represents a “just in time” policy of writing exactly the number of buffers predicted to be needed. Larger values provide some cushion against spikes in demand, while smaller values intentionally leave writes to be done by server processes. The default is `2.0`. Example: `2.0`.
        :param builtins.int deadlock_timeout: This is the amount of time, in milliseconds, to wait on a lock before checking to see if there is a deadlock condition. The default is `1000` (upstream default). Example: `1000`.
        :param builtins.str default_toast_compression: Enum: `lz4`, `pglz`. Specifies the default TOAST compression method for values of compressible columns. The default is `lz4`. Only available for PostgreSQL 14+.
        :param builtins.int idle_in_transaction_session_timeout: Time out sessions with open transactions after this number of milliseconds.
        :param builtins.bool jit: Controls system-wide use of Just-in-Time Compilation (JIT).
        :param builtins.int log_autovacuum_min_duration: Causes each action executed by autovacuum to be logged if it ran for at least the specified number of milliseconds. Setting this to zero logs all autovacuum actions. Minus-one disables logging autovacuum actions. The default is `1000`.
        :param builtins.str log_error_verbosity: Enum: `DEFAULT`, `TERSE`, `VERBOSE`. Controls the amount of detail written in the server log for each message that is logged.
        :param builtins.str log_line_prefix: Enum: `'%m [%p] %q[user=%u,db=%d,app=%a] '`, `'%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '`, `'pid=%p,user=%u,db=%d,app=%a,client=%h '`, `'pid=%p,user=%u,db=%d,app=%a,client=%h,txid=%x,qid=%Q '`. Choose from one of the available log formats.
        :param builtins.int log_min_duration_statement: Log statements that take more than this number of milliseconds to run, -1 disables.
        :param builtins.int log_temp_files: Log statements for each temporary file created larger than this number of kilobytes, -1 disables.
        :param builtins.int max_files_per_process: PostgreSQL maximum number of files that can be open per process. The default is `1000` (upstream default). Changing this parameter causes a service restart.
        :param builtins.int max_locks_per_transaction: PostgreSQL maximum locks per transaction. Changing this parameter causes a service restart.
        :param builtins.int max_logical_replication_workers: PostgreSQL maximum logical replication workers (taken from the pool of max_parallel_workers). The default is `4` (upstream default). Changing this parameter causes a service restart.
        :param builtins.int max_parallel_workers: Sets the maximum number of workers that the system can support for parallel queries. The default is `8` (upstream default).
        :param builtins.int max_parallel_workers_per_gather: Sets the maximum number of workers that can be started by a single Gather or Gather Merge node. The default is `2` (upstream default).
        :param builtins.int max_pred_locks_per_transaction: PostgreSQL maximum predicate locks per transaction. The default is `64` (upstream default). Changing this parameter causes a service restart.
        :param builtins.int max_prepared_transactions: PostgreSQL maximum prepared transactions. The default is `0`. Changing this parameter causes a service restart.
        :param builtins.int max_replication_slots: PostgreSQL maximum replication slots. The default is `20`. Changing this parameter causes a service restart.
        :param builtins.int max_slot_wal_keep_size: PostgreSQL maximum WAL size (MB) reserved for replication slots. If `-1` is specified, replication slots may retain an unlimited amount of WAL files. The default is `-1` (upstream default). wal_keep_size minimum WAL size setting takes precedence over this.
        :param builtins.int max_stack_depth: Maximum depth of the stack in bytes. The default is `2097152` (upstream default).
        :param builtins.int max_standby_archive_delay: Max standby archive delay in milliseconds. The default is `30000` (upstream default).
        :param builtins.int max_standby_streaming_delay: Max standby streaming delay in milliseconds. The default is `30000` (upstream default).
        :param builtins.int max_wal_senders: PostgreSQL maximum WAL senders. The default is `20`. Changing this parameter causes a service restart.
        :param builtins.int max_worker_processes: Sets the maximum number of background processes that the system can support. The default is `8`. Changing this parameter causes a service restart.
        :param builtins.str password_encryption: Enum: `md5`, `scram-sha-256`. Chooses the algorithm for encrypting passwords. Default: `md5`.
        :param builtins.int pg_partman_bgw_dot_interval: Sets the time interval in seconds to run pg_partman's scheduled tasks. The default is `3600`. Example: `3600`.
        :param builtins.str pg_partman_bgw_dot_role: Controls which role to use for pg_partman's scheduled background tasks. Example: `myrolename`.
        :param builtins.bool pg_stat_monitor_dot_pgsm_enable_query_plan: Enables or disables query plan monitoring. Changing this parameter causes a service restart. Only available for PostgreSQL 13+.
        :param builtins.int pg_stat_monitor_dot_pgsm_max_buckets: Sets the maximum number of buckets. Changing this parameter causes a service restart. Only available for PostgreSQL 13+. Example: `10`.
        :param builtins.str pg_stat_statements_dot_track: Enum: `all`, `none`, `top`. Controls which statements are counted. Specify top to track top-level statements (those issued directly by clients), all to also track nested statements (such as statements invoked within functions), or none to disable statement statistics collection. The default is `top`.
        :param builtins.int temp_file_limit: PostgreSQL temporary file limit in KiB, -1 for unlimited. Example: `5000000`.
        :param builtins.str timezone: PostgreSQL service timezone. Example: `Europe/Helsinki`.
        :param builtins.int track_activity_query_size: Specifies the number of bytes reserved to track the currently executing command for each active session. Changing this parameter causes a service restart. Example: `1024`.
        :param builtins.str track_commit_timestamp: Enum: `off`, `on`. Record commit time of transactions. Changing this parameter causes a service restart.
        :param builtins.str track_functions: Enum: `all`, `none`, `pl`. Enables tracking of function call counts and time used.
        :param builtins.str track_io_timing: Enum: `off`, `on`. Enables timing of database I/O calls. The default is `off`. When on, it will repeatedly query the operating system for the current time, which may cause significant overhead on some platforms.
        :param builtins.int wal_sender_timeout: Terminate replication connections that are inactive for longer than this amount of time, in milliseconds. Setting this value to zero disables the timeout. Example: `60000`.
        :param builtins.int wal_writer_delay: WAL flush interval in milliseconds. The default is `200`. Setting this parameter to a lower value may negatively impact performance. Example: `50`.
        """
        if autovacuum_analyze_scale_factor is not None:
            pulumi.set(__self__, "autovacuum_analyze_scale_factor", autovacuum_analyze_scale_factor)
        if autovacuum_analyze_threshold is not None:
            pulumi.set(__self__, "autovacuum_analyze_threshold", autovacuum_analyze_threshold)
        if autovacuum_freeze_max_age is not None:
            pulumi.set(__self__, "autovacuum_freeze_max_age", autovacuum_freeze_max_age)
        if autovacuum_max_workers is not None:
            pulumi.set(__self__, "autovacuum_max_workers", autovacuum_max_workers)
        if autovacuum_naptime is not None:
            pulumi.set(__self__, "autovacuum_naptime", autovacuum_naptime)
        if autovacuum_vacuum_cost_delay is not None:
            pulumi.set(__self__, "autovacuum_vacuum_cost_delay", autovacuum_vacuum_cost_delay)
        if autovacuum_vacuum_cost_limit is not None:
            pulumi.set(__self__, "autovacuum_vacuum_cost_limit", autovacuum_vacuum_cost_limit)
        if autovacuum_vacuum_scale_factor is not None:
            pulumi.set(__self__, "autovacuum_vacuum_scale_factor", autovacuum_vacuum_scale_factor)
        if autovacuum_vacuum_threshold is not None:
            pulumi.set(__self__, "autovacuum_vacuum_threshold", autovacuum_vacuum_threshold)
        if bgwriter_delay is not None:
            pulumi.set(__self__, "bgwriter_delay", bgwriter_delay)
        if bgwriter_flush_after is not None:
            pulumi.set(__self__, "bgwriter_flush_after", bgwriter_flush_after)
        if bgwriter_lru_maxpages is not None:
            pulumi.set(__self__, "bgwriter_lru_maxpages", bgwriter_lru_maxpages)
        if bgwriter_lru_multiplier is not None:
            pulumi.set(__self__, "bgwriter_lru_multiplier", bgwriter_lru_multiplier)
        if deadlock_timeout is not None:
            pulumi.set(__self__, "deadlock_timeout", deadlock_timeout)
        if default_toast_compression is not None:
            pulumi.set(__self__, "default_toast_compression", default_toast_compression)
        if idle_in_transaction_session_timeout is not None:
            pulumi.set(__self__, "idle_in_transaction_session_timeout", idle_in_transaction_session_timeout)
        if jit is not None:
            pulumi.set(__self__, "jit", jit)
        if log_autovacuum_min_duration is not None:
            pulumi.set(__self__, "log_autovacuum_min_duration", log_autovacuum_min_duration)
        if log_error_verbosity is not None:
            pulumi.set(__self__, "log_error_verbosity", log_error_verbosity)
        if log_line_prefix is not None:
            pulumi.set(__self__, "log_line_prefix", log_line_prefix)
        if log_min_duration_statement is not None:
            pulumi.set(__self__, "log_min_duration_statement", log_min_duration_statement)
        if log_temp_files is not None:
            pulumi.set(__self__, "log_temp_files", log_temp_files)
        if max_files_per_process is not None:
            pulumi.set(__self__, "max_files_per_process", max_files_per_process)
        if max_locks_per_transaction is not None:
            pulumi.set(__self__, "max_locks_per_transaction", max_locks_per_transaction)
        if max_logical_replication_workers is not None:
            pulumi.set(__self__, "max_logical_replication_workers", max_logical_replication_workers)
        if max_parallel_workers is not None:
            pulumi.set(__self__, "max_parallel_workers", max_parallel_workers)
        if max_parallel_workers_per_gather is not None:
            pulumi.set(__self__, "max_parallel_workers_per_gather", max_parallel_workers_per_gather)
        if max_pred_locks_per_transaction is not None:
            pulumi.set(__self__, "max_pred_locks_per_transaction", max_pred_locks_per_transaction)
        if max_prepared_transactions is not None:
            pulumi.set(__self__, "max_prepared_transactions", max_prepared_transactions)
        if max_replication_slots is not None:
            pulumi.set(__self__, "max_replication_slots", max_replication_slots)
        if max_slot_wal_keep_size is not None:
            pulumi.set(__self__, "max_slot_wal_keep_size", max_slot_wal_keep_size)
        if max_stack_depth is not None:
            pulumi.set(__self__, "max_stack_depth", max_stack_depth)
        if max_standby_archive_delay is not None:
            pulumi.set(__self__, "max_standby_archive_delay", max_standby_archive_delay)
        if max_standby_streaming_delay is not None:
            pulumi.set(__self__, "max_standby_streaming_delay", max_standby_streaming_delay)
        if max_wal_senders is not None:
            pulumi.set(__self__, "max_wal_senders", max_wal_senders)
        if max_worker_processes is not None:
            pulumi.set(__self__, "max_worker_processes", max_worker_processes)
        if password_encryption is not None:
            pulumi.set(__self__, "password_encryption", password_encryption)
        if pg_partman_bgw_dot_interval is not None:
            pulumi.set(__self__, "pg_partman_bgw_dot_interval", pg_partman_bgw_dot_interval)
        if pg_partman_bgw_dot_role is not None:
            pulumi.set(__self__, "pg_partman_bgw_dot_role", pg_partman_bgw_dot_role)
        if pg_stat_monitor_dot_pgsm_enable_query_plan is not None:
            pulumi.set(__self__, "pg_stat_monitor_dot_pgsm_enable_query_plan", pg_stat_monitor_dot_pgsm_enable_query_plan)
        if pg_stat_monitor_dot_pgsm_max_buckets is not None:
            pulumi.set(__self__, "pg_stat_monitor_dot_pgsm_max_buckets", pg_stat_monitor_dot_pgsm_max_buckets)
        if pg_stat_statements_dot_track is not None:
            pulumi.set(__self__, "pg_stat_statements_dot_track", pg_stat_statements_dot_track)
        if temp_file_limit is not None:
            pulumi.set(__self__, "temp_file_limit", temp_file_limit)
        if timezone is not None:
            pulumi.set(__self__, "timezone", timezone)
        if track_activity_query_size is not None:
            pulumi.set(__self__, "track_activity_query_size", track_activity_query_size)
        if track_commit_timestamp is not None:
            pulumi.set(__self__, "track_commit_timestamp", track_commit_timestamp)
        if track_functions is not None:
            pulumi.set(__self__, "track_functions", track_functions)
        if track_io_timing is not None:
            pulumi.set(__self__, "track_io_timing", track_io_timing)
        if wal_sender_timeout is not None:
            pulumi.set(__self__, "wal_sender_timeout", wal_sender_timeout)
        if wal_writer_delay is not None:
            pulumi.set(__self__, "wal_writer_delay", wal_writer_delay)

    @property
    @pulumi.getter(name="autovacuumAnalyzeScaleFactor")
    def autovacuum_analyze_scale_factor(self) -> Optional[builtins.float]:
        """
        Specifies a fraction of the table size to add to autovacuum_analyze_threshold when deciding whether to trigger an ANALYZE (e.g. `0.2` for 20% of the table size). The default is `0.2`.
        """
        return pulumi.get(self, "autovacuum_analyze_scale_factor")

    @property
    @pulumi.getter(name="autovacuumAnalyzeThreshold")
    def autovacuum_analyze_threshold(self) -> Optional[builtins.int]:
        """
        Specifies the minimum number of inserted, updated or deleted tuples needed to trigger an ANALYZE in any one table. The default is `50`.
        """
        return pulumi.get(self, "autovacuum_analyze_threshold")

    @property
    @pulumi.getter(name="autovacuumFreezeMaxAge")
    def autovacuum_freeze_max_age(self) -> Optional[builtins.int]:
        """
        Specifies the maximum age (in transactions) that a table's pg_class.relfrozenxid field can attain before a VACUUM operation is forced to prevent transaction ID wraparound within the table. The system launches autovacuum processes to prevent wraparound even when autovacuum is otherwise disabled. Changing this parameter causes a service restart. Example: `200000000`.
        """
        return pulumi.get(self, "autovacuum_freeze_max_age")

    @property
    @pulumi.getter(name="autovacuumMaxWorkers")
    def autovacuum_max_workers(self) -> Optional[builtins.int]:
        """
        Specifies the maximum number of autovacuum processes (other than the autovacuum launcher) that may be running at any one time. The default is `3`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "autovacuum_max_workers")

    @property
    @pulumi.getter(name="autovacuumNaptime")
    def autovacuum_naptime(self) -> Optional[builtins.int]:
        """
        Specifies the minimum delay between autovacuum runs on any given database. The delay is measured in seconds. The default is `60`.
        """
        return pulumi.get(self, "autovacuum_naptime")

    @property
    @pulumi.getter(name="autovacuumVacuumCostDelay")
    def autovacuum_vacuum_cost_delay(self) -> Optional[builtins.int]:
        """
        Specifies the cost delay value that will be used in automatic VACUUM operations. If `-1` is specified, the regular vacuum_cost_delay value will be used. The default is `2` (upstream default).
        """
        return pulumi.get(self, "autovacuum_vacuum_cost_delay")

    @property
    @pulumi.getter(name="autovacuumVacuumCostLimit")
    def autovacuum_vacuum_cost_limit(self) -> Optional[builtins.int]:
        """
        Specifies the cost limit value that will be used in automatic VACUUM operations. If `-1` is specified, the regular vacuum_cost_limit value will be used. The default is `-1` (upstream default).
        """
        return pulumi.get(self, "autovacuum_vacuum_cost_limit")

    @property
    @pulumi.getter(name="autovacuumVacuumScaleFactor")
    def autovacuum_vacuum_scale_factor(self) -> Optional[builtins.float]:
        """
        Specifies a fraction of the table size to add to autovacuum_vacuum_threshold when deciding whether to trigger a VACUUM (e.g. `0.2` for 20% of the table size). The default is `0.2`.
        """
        return pulumi.get(self, "autovacuum_vacuum_scale_factor")

    @property
    @pulumi.getter(name="autovacuumVacuumThreshold")
    def autovacuum_vacuum_threshold(self) -> Optional[builtins.int]:
        """
        Specifies the minimum number of updated or deleted tuples needed to trigger a VACUUM in any one table. The default is `50`.
        """
        return pulumi.get(self, "autovacuum_vacuum_threshold")

    @property
    @pulumi.getter(name="bgwriterDelay")
    def bgwriter_delay(self) -> Optional[builtins.int]:
        """
        Specifies the delay between activity rounds for the background writer in milliseconds. The default is `200`. Example: `200`.
        """
        return pulumi.get(self, "bgwriter_delay")

    @property
    @pulumi.getter(name="bgwriterFlushAfter")
    def bgwriter_flush_after(self) -> Optional[builtins.int]:
        """
        Whenever more than bgwriter_flush_after bytes have been written by the background writer, attempt to force the OS to issue these writes to the underlying storage. Specified in kilobytes. Setting of 0 disables forced writeback. The default is `512`. Example: `512`.
        """
        return pulumi.get(self, "bgwriter_flush_after")

    @property
    @pulumi.getter(name="bgwriterLruMaxpages")
    def bgwriter_lru_maxpages(self) -> Optional[builtins.int]:
        """
        In each round, no more than this many buffers will be written by the background writer. Setting this to zero disables background writing. The default is `100`. Example: `100`.
        """
        return pulumi.get(self, "bgwriter_lru_maxpages")

    @property
    @pulumi.getter(name="bgwriterLruMultiplier")
    def bgwriter_lru_multiplier(self) -> Optional[builtins.float]:
        """
        The average recent need for new buffers is multiplied by bgwriter_lru_multiplier to arrive at an estimate of the number that will be needed during the next round, (up to bgwriter_lru_maxpages). 1.0 represents a “just in time” policy of writing exactly the number of buffers predicted to be needed. Larger values provide some cushion against spikes in demand, while smaller values intentionally leave writes to be done by server processes. The default is `2.0`. Example: `2.0`.
        """
        return pulumi.get(self, "bgwriter_lru_multiplier")

    @property
    @pulumi.getter(name="deadlockTimeout")
    def deadlock_timeout(self) -> Optional[builtins.int]:
        """
        This is the amount of time, in milliseconds, to wait on a lock before checking to see if there is a deadlock condition. The default is `1000` (upstream default). Example: `1000`.
        """
        return pulumi.get(self, "deadlock_timeout")

    @property
    @pulumi.getter(name="defaultToastCompression")
    def default_toast_compression(self) -> Optional[builtins.str]:
        """
        Enum: `lz4`, `pglz`. Specifies the default TOAST compression method for values of compressible columns. The default is `lz4`. Only available for PostgreSQL 14+.
        """
        return pulumi.get(self, "default_toast_compression")

    @property
    @pulumi.getter(name="idleInTransactionSessionTimeout")
    def idle_in_transaction_session_timeout(self) -> Optional[builtins.int]:
        """
        Time out sessions with open transactions after this number of milliseconds.
        """
        return pulumi.get(self, "idle_in_transaction_session_timeout")

    @property
    @pulumi.getter
    def jit(self) -> Optional[builtins.bool]:
        """
        Controls system-wide use of Just-in-Time Compilation (JIT).
        """
        return pulumi.get(self, "jit")

    @property
    @pulumi.getter(name="logAutovacuumMinDuration")
    def log_autovacuum_min_duration(self) -> Optional[builtins.int]:
        """
        Causes each action executed by autovacuum to be logged if it ran for at least the specified number of milliseconds. Setting this to zero logs all autovacuum actions. Minus-one disables logging autovacuum actions. The default is `1000`.
        """
        return pulumi.get(self, "log_autovacuum_min_duration")

    @property
    @pulumi.getter(name="logErrorVerbosity")
    def log_error_verbosity(self) -> Optional[builtins.str]:
        """
        Enum: `DEFAULT`, `TERSE`, `VERBOSE`. Controls the amount of detail written in the server log for each message that is logged.
        """
        return pulumi.get(self, "log_error_verbosity")

    @property
    @pulumi.getter(name="logLinePrefix")
    def log_line_prefix(self) -> Optional[builtins.str]:
        """
        Enum: `'%m [%p] %q[user=%u,db=%d,app=%a] '`, `'%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '`, `'pid=%p,user=%u,db=%d,app=%a,client=%h '`, `'pid=%p,user=%u,db=%d,app=%a,client=%h,txid=%x,qid=%Q '`. Choose from one of the available log formats.
        """
        return pulumi.get(self, "log_line_prefix")

    @property
    @pulumi.getter(name="logMinDurationStatement")
    def log_min_duration_statement(self) -> Optional[builtins.int]:
        """
        Log statements that take more than this number of milliseconds to run, -1 disables.
        """
        return pulumi.get(self, "log_min_duration_statement")

    @property
    @pulumi.getter(name="logTempFiles")
    def log_temp_files(self) -> Optional[builtins.int]:
        """
        Log statements for each temporary file created larger than this number of kilobytes, -1 disables.
        """
        return pulumi.get(self, "log_temp_files")

    @property
    @pulumi.getter(name="maxFilesPerProcess")
    def max_files_per_process(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum number of files that can be open per process. The default is `1000` (upstream default). Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_files_per_process")

    @property
    @pulumi.getter(name="maxLocksPerTransaction")
    def max_locks_per_transaction(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum locks per transaction. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_locks_per_transaction")

    @property
    @pulumi.getter(name="maxLogicalReplicationWorkers")
    def max_logical_replication_workers(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum logical replication workers (taken from the pool of max_parallel_workers). The default is `4` (upstream default). Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_logical_replication_workers")

    @property
    @pulumi.getter(name="maxParallelWorkers")
    def max_parallel_workers(self) -> Optional[builtins.int]:
        """
        Sets the maximum number of workers that the system can support for parallel queries. The default is `8` (upstream default).
        """
        return pulumi.get(self, "max_parallel_workers")

    @property
    @pulumi.getter(name="maxParallelWorkersPerGather")
    def max_parallel_workers_per_gather(self) -> Optional[builtins.int]:
        """
        Sets the maximum number of workers that can be started by a single Gather or Gather Merge node. The default is `2` (upstream default).
        """
        return pulumi.get(self, "max_parallel_workers_per_gather")

    @property
    @pulumi.getter(name="maxPredLocksPerTransaction")
    def max_pred_locks_per_transaction(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum predicate locks per transaction. The default is `64` (upstream default). Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_pred_locks_per_transaction")

    @property
    @pulumi.getter(name="maxPreparedTransactions")
    def max_prepared_transactions(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum prepared transactions. The default is `0`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_prepared_transactions")

    @property
    @pulumi.getter(name="maxReplicationSlots")
    def max_replication_slots(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum replication slots. The default is `20`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_replication_slots")

    @property
    @pulumi.getter(name="maxSlotWalKeepSize")
    def max_slot_wal_keep_size(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum WAL size (MB) reserved for replication slots. If `-1` is specified, replication slots may retain an unlimited amount of WAL files. The default is `-1` (upstream default). wal_keep_size minimum WAL size setting takes precedence over this.
        """
        return pulumi.get(self, "max_slot_wal_keep_size")

    @property
    @pulumi.getter(name="maxStackDepth")
    def max_stack_depth(self) -> Optional[builtins.int]:
        """
        Maximum depth of the stack in bytes. The default is `2097152` (upstream default).
        """
        return pulumi.get(self, "max_stack_depth")

    @property
    @pulumi.getter(name="maxStandbyArchiveDelay")
    def max_standby_archive_delay(self) -> Optional[builtins.int]:
        """
        Max standby archive delay in milliseconds. The default is `30000` (upstream default).
        """
        return pulumi.get(self, "max_standby_archive_delay")

    @property
    @pulumi.getter(name="maxStandbyStreamingDelay")
    def max_standby_streaming_delay(self) -> Optional[builtins.int]:
        """
        Max standby streaming delay in milliseconds. The default is `30000` (upstream default).
        """
        return pulumi.get(self, "max_standby_streaming_delay")

    @property
    @pulumi.getter(name="maxWalSenders")
    def max_wal_senders(self) -> Optional[builtins.int]:
        """
        PostgreSQL maximum WAL senders. The default is `20`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_wal_senders")

    @property
    @pulumi.getter(name="maxWorkerProcesses")
    def max_worker_processes(self) -> Optional[builtins.int]:
        """
        Sets the maximum number of background processes that the system can support. The default is `8`. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "max_worker_processes")

    @property
    @pulumi.getter(name="passwordEncryption")
    def password_encryption(self) -> Optional[builtins.str]:
        """
        Enum: `md5`, `scram-sha-256`. Chooses the algorithm for encrypting passwords. Default: `md5`.
        """
        return pulumi.get(self, "password_encryption")

    @property
    @pulumi.getter(name="pgPartmanBgwDotInterval")
    def pg_partman_bgw_dot_interval(self) -> Optional[builtins.int]:
        """
        Sets the time interval in seconds to run pg_partman's scheduled tasks. The default is `3600`. Example: `3600`.
        """
        return pulumi.get(self, "pg_partman_bgw_dot_interval")

    @property
    @pulumi.getter(name="pgPartmanBgwDotRole")
    def pg_partman_bgw_dot_role(self) -> Optional[builtins.str]:
        """
        Controls which role to use for pg_partman's scheduled background tasks. Example: `myrolename`.
        """
        return pulumi.get(self, "pg_partman_bgw_dot_role")

    @property
    @pulumi.getter(name="pgStatMonitorDotPgsmEnableQueryPlan")
    def pg_stat_monitor_dot_pgsm_enable_query_plan(self) -> Optional[builtins.bool]:
        """
        Enables or disables query plan monitoring. Changing this parameter causes a service restart. Only available for PostgreSQL 13+.
        """
        return pulumi.get(self, "pg_stat_monitor_dot_pgsm_enable_query_plan")

    @property
    @pulumi.getter(name="pgStatMonitorDotPgsmMaxBuckets")
    def pg_stat_monitor_dot_pgsm_max_buckets(self) -> Optional[builtins.int]:
        """
        Sets the maximum number of buckets. Changing this parameter causes a service restart. Only available for PostgreSQL 13+. Example: `10`.
        """
        return pulumi.get(self, "pg_stat_monitor_dot_pgsm_max_buckets")

    @property
    @pulumi.getter(name="pgStatStatementsDotTrack")
    def pg_stat_statements_dot_track(self) -> Optional[builtins.str]:
        """
        Enum: `all`, `none`, `top`. Controls which statements are counted. Specify top to track top-level statements (those issued directly by clients), all to also track nested statements (such as statements invoked within functions), or none to disable statement statistics collection. The default is `top`.
        """
        return pulumi.get(self, "pg_stat_statements_dot_track")

    @property
    @pulumi.getter(name="tempFileLimit")
    def temp_file_limit(self) -> Optional[builtins.int]:
        """
        PostgreSQL temporary file limit in KiB, -1 for unlimited. Example: `5000000`.
        """
        return pulumi.get(self, "temp_file_limit")

    @property
    @pulumi.getter
    def timezone(self) -> Optional[builtins.str]:
        """
        PostgreSQL service timezone. Example: `Europe/Helsinki`.
        """
        return pulumi.get(self, "timezone")

    @property
    @pulumi.getter(name="trackActivityQuerySize")
    def track_activity_query_size(self) -> Optional[builtins.int]:
        """
        Specifies the number of bytes reserved to track the currently executing command for each active session. Changing this parameter causes a service restart. Example: `1024`.
        """
        return pulumi.get(self, "track_activity_query_size")

    @property
    @pulumi.getter(name="trackCommitTimestamp")
    def track_commit_timestamp(self) -> Optional[builtins.str]:
        """
        Enum: `off`, `on`. Record commit time of transactions. Changing this parameter causes a service restart.
        """
        return pulumi.get(self, "track_commit_timestamp")

    @property
    @pulumi.getter(name="trackFunctions")
    def track_functions(self) -> Optional[builtins.str]:
        """
        Enum: `all`, `none`, `pl`. Enables tracking of function call counts and time used.
        """
        return pulumi.get(self, "track_functions")

    @property
    @pulumi.getter(name="trackIoTiming")
    def track_io_timing(self) -> Optional[builtins.str]:
        """
        Enum: `off`, `on`. Enables timing of database I/O calls. The default is `off`. When on, it will repeatedly query the operating system for the current time, which may cause significant overhead on some platforms.
        """
        return pulumi.get(self, "track_io_timing")

    @property
    @pulumi.getter(name="walSenderTimeout")
    def wal_sender_timeout(self) -> Optional[builtins.int]:
        """
        Terminate replication connections that are inactive for longer than this amount of time, in milliseconds. Setting this value to zero disables the timeout. Example: `60000`.
        """
        return pulumi.get(self, "wal_sender_timeout")

    @property
    @pulumi.getter(name="walWriterDelay")
    def wal_writer_delay(self) -> Optional[builtins.int]:
        """
        WAL flush interval in milliseconds. The default is `200`. Setting this parameter to a lower value may negatively impact performance. Example: `50`.
        """
        return pulumi.get(self, "wal_writer_delay")


@pulumi.output_type
class GetPgPgUserConfigPgQualstatsResult(dict):
    def __init__(__self__, *,
                 enabled: Optional[builtins.bool] = None,
                 min_err_estimate_num: Optional[builtins.int] = None,
                 min_err_estimate_ratio: Optional[builtins.int] = None,
                 track_constants: Optional[builtins.bool] = None,
                 track_pg_catalog: Optional[builtins.bool] = None):
        """
        :param builtins.bool enabled: Enable / Disable pg_qualstats. Default: `false`.
        :param builtins.int min_err_estimate_num: Error estimation num threshold to save quals. Default: `0`.
        :param builtins.int min_err_estimate_ratio: Error estimation ratio threshold to save quals. Default: `0`.
        :param builtins.bool track_constants: Enable / Disable pg_qualstats constants tracking. Default: `true`.
        :param builtins.bool track_pg_catalog: Track quals on system catalogs too. Default: `false`.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if min_err_estimate_num is not None:
            pulumi.set(__self__, "min_err_estimate_num", min_err_estimate_num)
        if min_err_estimate_ratio is not None:
            pulumi.set(__self__, "min_err_estimate_ratio", min_err_estimate_ratio)
        if track_constants is not None:
            pulumi.set(__self__, "track_constants", track_constants)
        if track_pg_catalog is not None:
            pulumi.set(__self__, "track_pg_catalog", track_pg_catalog)

    @property
    @pulumi.getter
    @_utilities.deprecated("""This property is deprecated.""")
    def enabled(self) -> Optional[builtins.bool]:
        """
        Enable / Disable pg_qualstats. Default: `false`.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="minErrEstimateNum")
    @_utilities.deprecated("""This property is deprecated.""")
    def min_err_estimate_num(self) -> Optional[builtins.int]:
        """
        Error estimation num threshold to save quals. Default: `0`.
        """
        return pulumi.get(self, "min_err_estimate_num")

    @property
    @pulumi.getter(name="minErrEstimateRatio")
    @_utilities.deprecated("""This property is deprecated.""")
    def min_err_estimate_ratio(self) -> Optional[builtins.int]:
        """
        Error estimation ratio threshold to save quals. Default: `0`.
        """
        return pulumi.get(self, "min_err_estimate_ratio")

    @property
    @pulumi.getter(name="trackConstants")
    @_utilities.deprecated("""This property is deprecated.""")
    def track_constants(self) -> Optional[builtins.bool]:
        """
        Enable / Disable pg_qualstats constants tracking. Default: `true`.
        """
        return pulumi.get(self, "track_constants")

    @property
    @pulumi.getter(name="trackPgCatalog")
    @_utilities.deprecated("""This property is deprecated.""")
    def track_pg_catalog(self) -> Optional[builtins.bool]:
        """
        Track quals on system catalogs too. Default: `false`.
        """
        return pulumi.get(self, "track_pg_catalog")


@pulumi.output_type
class GetPgPgUserConfigPgauditResult(dict):
    def __init__(__self__, *,
                 feature_enabled: Optional[builtins.bool] = None,
                 log_catalog: Optional[builtins.bool] = None,
                 log_client: Optional[builtins.bool] = None,
                 log_level: Optional[builtins.str] = None,
                 log_max_string_length: Optional[builtins.int] = None,
                 log_nested_statements: Optional[builtins.bool] = None,
                 log_parameter: Optional[builtins.bool] = None,
                 log_parameter_max_size: Optional[builtins.int] = None,
                 log_relation: Optional[builtins.bool] = None,
                 log_rows: Optional[builtins.bool] = None,
                 log_statement: Optional[builtins.bool] = None,
                 log_statement_once: Optional[builtins.bool] = None,
                 logs: Optional[Sequence[builtins.str]] = None,
                 role: Optional[builtins.str] = None):
        """
        :param builtins.bool feature_enabled: Enable pgaudit extension. When enabled, pgaudit extension will be automatically installed.Otherwise, extension will be uninstalled but auditing configurations will be preserved. Default: `false`.
        :param builtins.bool log_catalog: Specifies that session logging should be enabled in the casewhere all relations in a statement are in pg_catalog. Default: `true`.
        :param builtins.bool log_client: Specifies whether log messages will be visible to a client process such as psql. Default: `false`.
        :param builtins.str log_level: Enum: `debug1`, `debug2`, `debug3`, `debug4`, `debug5`, `info`, `log`, `notice`, `warning`. Specifies the log level that will be used for log entries. Default: `log`.
        :param builtins.int log_max_string_length: Crop parameters representation and whole statements if they exceed this threshold. A (default) value of -1 disable the truncation. Default: `-1`.
        :param builtins.bool log_nested_statements: This GUC allows to turn off logging nested statements, that is, statements that are executed as part of another ExecutorRun. Default: `true`.
        :param builtins.bool log_parameter: Specifies that audit logging should include the parameters that were passed with the statement. Default: `false`.
        :param builtins.int log_parameter_max_size: Specifies that parameter values longer than this setting (in bytes) should not be logged, but replaced with <long param suppressed>. Default: `0`.
        :param builtins.bool log_relation: Specifies whether session audit logging should create a separate log entry for each relation (TABLE, VIEW, etc.) referenced in a SELECT or DML statement. Default: `false`.
        :param builtins.bool log_rows: Specifies that audit logging should include the rows retrieved or affected by a statement. When enabled the rows field will be included after the parameter field. Default: `false`.
        :param builtins.bool log_statement: Specifies whether logging will include the statement text and parameters (if enabled). Default: `true`.
        :param builtins.bool log_statement_once: Specifies whether logging will include the statement text and parameters with the first log entry for a statement/substatement combination or with every entry. Default: `false`.
        :param Sequence[builtins.str] logs: Specifies which classes of statements will be logged by session audit logging.
        :param builtins.str role: Specifies the master role to use for object audit logging.
        """
        if feature_enabled is not None:
            pulumi.set(__self__, "feature_enabled", feature_enabled)
        if log_catalog is not None:
            pulumi.set(__self__, "log_catalog", log_catalog)
        if log_client is not None:
            pulumi.set(__self__, "log_client", log_client)
        if log_level is not None:
            pulumi.set(__self__, "log_level", log_level)
        if log_max_string_length is not None:
            pulumi.set(__self__, "log_max_string_length", log_max_string_length)
        if log_nested_statements is not None:
            pulumi.set(__self__, "log_nested_statements", log_nested_statements)
        if log_parameter is not None:
            pulumi.set(__self__, "log_parameter", log_parameter)
        if log_parameter_max_size is not None:
            pulumi.set(__self__, "log_parameter_max_size", log_parameter_max_size)
        if log_relation is not None:
            pulumi.set(__self__, "log_relation", log_relation)
        if log_rows is not None:
            pulumi.set(__self__, "log_rows", log_rows)
        if log_statement is not None:
            pulumi.set(__self__, "log_statement", log_statement)
        if log_statement_once is not None:
            pulumi.set(__self__, "log_statement_once", log_statement_once)
        if logs is not None:
            pulumi.set(__self__, "logs", logs)
        if role is not None:
            pulumi.set(__self__, "role", role)

    @property
    @pulumi.getter(name="featureEnabled")
    def feature_enabled(self) -> Optional[builtins.bool]:
        """
        Enable pgaudit extension. When enabled, pgaudit extension will be automatically installed.Otherwise, extension will be uninstalled but auditing configurations will be preserved. Default: `false`.
        """
        return pulumi.get(self, "feature_enabled")

    @property
    @pulumi.getter(name="logCatalog")
    def log_catalog(self) -> Optional[builtins.bool]:
        """
        Specifies that session logging should be enabled in the casewhere all relations in a statement are in pg_catalog. Default: `true`.
        """
        return pulumi.get(self, "log_catalog")

    @property
    @pulumi.getter(name="logClient")
    def log_client(self) -> Optional[builtins.bool]:
        """
        Specifies whether log messages will be visible to a client process such as psql. Default: `false`.
        """
        return pulumi.get(self, "log_client")

    @property
    @pulumi.getter(name="logLevel")
    def log_level(self) -> Optional[builtins.str]:
        """
        Enum: `debug1`, `debug2`, `debug3`, `debug4`, `debug5`, `info`, `log`, `notice`, `warning`. Specifies the log level that will be used for log entries. Default: `log`.
        """
        return pulumi.get(self, "log_level")

    @property
    @pulumi.getter(name="logMaxStringLength")
    def log_max_string_length(self) -> Optional[builtins.int]:
        """
        Crop parameters representation and whole statements if they exceed this threshold. A (default) value of -1 disable the truncation. Default: `-1`.
        """
        return pulumi.get(self, "log_max_string_length")

    @property
    @pulumi.getter(name="logNestedStatements")
    def log_nested_statements(self) -> Optional[builtins.bool]:
        """
        This GUC allows to turn off logging nested statements, that is, statements that are executed as part of another ExecutorRun. Default: `true`.
        """
        return pulumi.get(self, "log_nested_statements")

    @property
    @pulumi.getter(name="logParameter")
    def log_parameter(self) -> Optional[builtins.bool]:
        """
        Specifies that audit logging should include the parameters that were passed with the statement. Default: `false`.
        """
        return pulumi.get(self, "log_parameter")

    @property
    @pulumi.getter(name="logParameterMaxSize")
    def log_parameter_max_size(self) -> Optional[builtins.int]:
        """
        Specifies that parameter values longer than this setting (in bytes) should not be logged, but replaced with <long param suppressed>. Default: `0`.
        """
        return pulumi.get(self, "log_parameter_max_size")

    @property
    @pulumi.getter(name="logRelation")
    def log_relation(self) -> Optional[builtins.bool]:
        """
        Specifies whether session audit logging should create a separate log entry for each relation (TABLE, VIEW, etc.) referenced in a SELECT or DML statement. Default: `false`.
        """
        return pulumi.get(self, "log_relation")

    @property
    @pulumi.getter(name="logRows")
    def log_rows(self) -> Optional[builtins.bool]:
        """
        Specifies that audit logging should include the rows retrieved or affected by a statement. When enabled the rows field will be included after the parameter field. Default: `false`.
        """
        return pulumi.get(self, "log_rows")

    @property
    @pulumi.getter(name="logStatement")
    def log_statement(self) -> Optional[builtins.bool]:
        """
        Specifies whether logging will include the statement text and parameters (if enabled). Default: `true`.
        """
        return pulumi.get(self, "log_statement")

    @property
    @pulumi.getter(name="logStatementOnce")
    def log_statement_once(self) -> Optional[builtins.bool]:
        """
        Specifies whether logging will include the statement text and parameters with the first log entry for a statement/substatement combination or with every entry. Default: `false`.
        """
        return pulumi.get(self, "log_statement_once")

    @property
    @pulumi.getter
    def logs(self) -> Optional[Sequence[builtins.str]]:
        """
        Specifies which classes of statements will be logged by session audit logging.
        """
        return pulumi.get(self, "logs")

    @property
    @pulumi.getter
    def role(self) -> Optional[builtins.str]:
        """
        Specifies the master role to use for object audit logging.
        """
        return pulumi.get(self, "role")


@pulumi.output_type
class GetPgPgUserConfigPgbouncerResult(dict):
    def __init__(__self__, *,
                 autodb_idle_timeout: Optional[builtins.int] = None,
                 autodb_max_db_connections: Optional[builtins.int] = None,
                 autodb_pool_mode: Optional[builtins.str] = None,
                 autodb_pool_size: Optional[builtins.int] = None,
                 ignore_startup_parameters: Optional[Sequence[builtins.str]] = None,
                 max_prepared_statements: Optional[builtins.int] = None,
                 min_pool_size: Optional[builtins.int] = None,
                 server_idle_timeout: Optional[builtins.int] = None,
                 server_lifetime: Optional[builtins.int] = None,
                 server_reset_query_always: Optional[builtins.bool] = None):
        """
        :param builtins.int autodb_idle_timeout: If the automatically created database pools have been unused this many seconds, they are freed. If 0 then timeout is disabled. (seconds). Default: `3600`.
        :param builtins.int autodb_max_db_connections: Do not allow more than this many server connections per database (regardless of user). Setting it to 0 means unlimited. Example: `0`.
        :param builtins.str autodb_pool_mode: Enum: `session`, `statement`, `transaction`. PGBouncer pool mode. Default: `transaction`.
        :param builtins.int autodb_pool_size: If non-zero then create automatically a pool of that size per user when a pool doesn't exist. Default: `0`.
        :param Sequence[builtins.str] ignore_startup_parameters: List of parameters to ignore when given in startup packet.
        :param builtins.int max_prepared_statements: PgBouncer tracks protocol-level named prepared statements related commands sent by the client in transaction and statement pooling modes when max_prepared_statements is set to a non-zero value. Setting it to 0 disables prepared statements. max_prepared_statements defaults to 100, and its maximum is 3000. Default: `100`.
        :param builtins.int min_pool_size: Add more server connections to pool if below this number. Improves behavior when usual load comes suddenly back after period of total inactivity. The value is effectively capped at the pool size. Default: `0`.
        :param builtins.int server_idle_timeout: If a server connection has been idle more than this many seconds it will be dropped. If 0 then timeout is disabled. (seconds). Default: `600`.
        :param builtins.int server_lifetime: The pooler will close an unused server connection that has been connected longer than this. (seconds). Default: `3600`.
        :param builtins.bool server_reset_query_always: Run server_reset_query (DISCARD ALL) in all pooling modes. Default: `false`.
        """
        if autodb_idle_timeout is not None:
            pulumi.set(__self__, "autodb_idle_timeout", autodb_idle_timeout)
        if autodb_max_db_connections is not None:
            pulumi.set(__self__, "autodb_max_db_connections", autodb_max_db_connections)
        if autodb_pool_mode is not None:
            pulumi.set(__self__, "autodb_pool_mode", autodb_pool_mode)
        if autodb_pool_size is not None:
            pulumi.set(__self__, "autodb_pool_size", autodb_pool_size)
        if ignore_startup_parameters is not None:
            pulumi.set(__self__, "ignore_startup_parameters", ignore_startup_parameters)
        if max_prepared_statements is not None:
            pulumi.set(__self__, "max_prepared_statements", max_prepared_statements)
        if min_pool_size is not None:
            pulumi.set(__self__, "min_pool_size", min_pool_size)
        if server_idle_timeout is not None:
            pulumi.set(__self__, "server_idle_timeout", server_idle_timeout)
        if server_lifetime is not None:
            pulumi.set(__self__, "server_lifetime", server_lifetime)
        if server_reset_query_always is not None:
            pulumi.set(__self__, "server_reset_query_always", server_reset_query_always)

    @property
    @pulumi.getter(name="autodbIdleTimeout")
    def autodb_idle_timeout(self) -> Optional[builtins.int]:
        """
        If the automatically created database pools have been unused this many seconds, they are freed. If 0 then timeout is disabled. (seconds). Default: `3600`.
        """
        return pulumi.get(self, "autodb_idle_timeout")

    @property
    @pulumi.getter(name="autodbMaxDbConnections")
    def autodb_max_db_connections(self) -> Optional[builtins.int]:
        """
        Do not allow more than this many server connections per database (regardless of user). Setting it to 0 means unlimited. Example: `0`.
        """
        return pulumi.get(self, "autodb_max_db_connections")

    @property
    @pulumi.getter(name="autodbPoolMode")
    def autodb_pool_mode(self) -> Optional[builtins.str]:
        """
        Enum: `session`, `statement`, `transaction`. PGBouncer pool mode. Default: `transaction`.
        """
        return pulumi.get(self, "autodb_pool_mode")

    @property
    @pulumi.getter(name="autodbPoolSize")
    def autodb_pool_size(self) -> Optional[builtins.int]:
        """
        If non-zero then create automatically a pool of that size per user when a pool doesn't exist. Default: `0`.
        """
        return pulumi.get(self, "autodb_pool_size")

    @property
    @pulumi.getter(name="ignoreStartupParameters")
    def ignore_startup_parameters(self) -> Optional[Sequence[builtins.str]]:
        """
        List of parameters to ignore when given in startup packet.
        """
        return pulumi.get(self, "ignore_startup_parameters")

    @property
    @pulumi.getter(name="maxPreparedStatements")
    def max_prepared_statements(self) -> Optional[builtins.int]:
        """
        PgBouncer tracks protocol-level named prepared statements related commands sent by the client in transaction and statement pooling modes when max_prepared_statements is set to a non-zero value. Setting it to 0 disables prepared statements. max_prepared_statements defaults to 100, and its maximum is 3000. Default: `100`.
        """
        return pulumi.get(self, "max_prepared_statements")

    @property
    @pulumi.getter(name="minPoolSize")
    def min_pool_size(self) -> Optional[builtins.int]:
        """
        Add more server connections to pool if below this number. Improves behavior when usual load comes suddenly back after period of total inactivity. The value is effectively capped at the pool size. Default: `0`.
        """
        return pulumi.get(self, "min_pool_size")

    @property
    @pulumi.getter(name="serverIdleTimeout")
    def server_idle_timeout(self) -> Optional[builtins.int]:
        """
        If a server connection has been idle more than this many seconds it will be dropped. If 0 then timeout is disabled. (seconds). Default: `600`.
        """
        return pulumi.get(self, "server_idle_timeout")

    @property
    @pulumi.getter(name="serverLifetime")
    def server_lifetime(self) -> Optional[builtins.int]:
        """
        The pooler will close an unused server connection that has been connected longer than this. (seconds). Default: `3600`.
        """
        return pulumi.get(self, "server_lifetime")

    @property
    @pulumi.getter(name="serverResetQueryAlways")
    def server_reset_query_always(self) -> Optional[builtins.bool]:
        """
        Run server_reset_query (DISCARD ALL) in all pooling modes. Default: `false`.
        """
        return pulumi.get(self, "server_reset_query_always")


@pulumi.output_type
class GetPgPgUserConfigPglookoutResult(dict):
    def __init__(__self__, *,
                 max_failover_replication_time_lag: Optional[builtins.int] = None):
        """
        :param builtins.int max_failover_replication_time_lag: Number of seconds of master unavailability before triggering database failover to standby. Default: `60`.
        """
        if max_failover_replication_time_lag is not None:
            pulumi.set(__self__, "max_failover_replication_time_lag", max_failover_replication_time_lag)

    @property
    @pulumi.getter(name="maxFailoverReplicationTimeLag")
    def max_failover_replication_time_lag(self) -> Optional[builtins.int]:
        """
        Number of seconds of master unavailability before triggering database failover to standby. Default: `60`.
        """
        return pulumi.get(self, "max_failover_replication_time_lag")


@pulumi.output_type
class GetPgPgUserConfigPrivateAccessResult(dict):
    def __init__(__self__, *,
                 pg: Optional[builtins.bool] = None,
                 pgbouncer: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool pg: Allow clients to connect to pg with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool pgbouncer: Allow clients to connect to pgbouncer with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if pg is not None:
            pulumi.set(__self__, "pg", pg)
        if pgbouncer is not None:
            pulumi.set(__self__, "pgbouncer", pgbouncer)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def pg(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to pg with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "pg")

    @property
    @pulumi.getter
    def pgbouncer(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to pgbouncer with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "pgbouncer")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetPgPgUserConfigPrivatelinkAccessResult(dict):
    def __init__(__self__, *,
                 pg: Optional[builtins.bool] = None,
                 pgbouncer: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool pg: Enable pg.
        :param builtins.bool pgbouncer: Enable pgbouncer.
        :param builtins.bool prometheus: Enable prometheus.
        """
        if pg is not None:
            pulumi.set(__self__, "pg", pg)
        if pgbouncer is not None:
            pulumi.set(__self__, "pgbouncer", pgbouncer)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def pg(self) -> Optional[builtins.bool]:
        """
        Enable pg.
        """
        return pulumi.get(self, "pg")

    @property
    @pulumi.getter
    def pgbouncer(self) -> Optional[builtins.bool]:
        """
        Enable pgbouncer.
        """
        return pulumi.get(self, "pgbouncer")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetPgPgUserConfigPublicAccessResult(dict):
    def __init__(__self__, *,
                 pg: Optional[builtins.bool] = None,
                 pgbouncer: Optional[builtins.bool] = None,
                 prometheus: Optional[builtins.bool] = None):
        """
        :param builtins.bool pg: Allow clients to connect to pg from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool pgbouncer: Allow clients to connect to pgbouncer from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if pg is not None:
            pulumi.set(__self__, "pg", pg)
        if pgbouncer is not None:
            pulumi.set(__self__, "pgbouncer", pgbouncer)
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)

    @property
    @pulumi.getter
    def pg(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to pg from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "pg")

    @property
    @pulumi.getter
    def pgbouncer(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to pgbouncer from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "pgbouncer")

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")


@pulumi.output_type
class GetPgPgUserConfigTimescaledbResult(dict):
    def __init__(__self__, *,
                 max_background_workers: Optional[builtins.int] = None):
        """
        :param builtins.int max_background_workers: The number of background workers for timescaledb operations. You should configure this setting to the sum of your number of databases and the total number of concurrent background workers you want running at any given point in time. Default: `16`.
        """
        if max_background_workers is not None:
            pulumi.set(__self__, "max_background_workers", max_background_workers)

    @property
    @pulumi.getter(name="maxBackgroundWorkers")
    def max_background_workers(self) -> Optional[builtins.int]:
        """
        The number of background workers for timescaledb operations. You should configure this setting to the sum of your number of databases and the total number of concurrent background workers you want running at any given point in time. Default: `16`.
        """
        return pulumi.get(self, "max_background_workers")


@pulumi.output_type
class GetPgServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration. The possible values are `read_replica` and `disaster_recovery`.
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration. The possible values are `read_replica` and `disaster_recovery`.
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetPgTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetPgTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetProjectTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Project tag key.
        :param builtins.str value: Project tag value.
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Project tag key.
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Project tag value.
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetRedisComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetRedisRediResult(dict):
    def __init__(__self__, *,
                 password: builtins.str,
                 replica_uri: builtins.str,
                 slave_uris: Sequence[builtins.str],
                 uris: Sequence[builtins.str]):
        """
        :param builtins.str password: Redis password.
        :param builtins.str replica_uri: Redis replica server URI.
        :param Sequence[builtins.str] slave_uris: Redis slave server URIs.
        :param Sequence[builtins.str] uris: Redis server URIs.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "replica_uri", replica_uri)
        pulumi.set(__self__, "slave_uris", slave_uris)
        pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter
    def password(self) -> builtins.str:
        """
        Redis password.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter(name="replicaUri")
    def replica_uri(self) -> builtins.str:
        """
        Redis replica server URI.
        """
        return pulumi.get(self, "replica_uri")

    @property
    @pulumi.getter(name="slaveUris")
    def slave_uris(self) -> Sequence[builtins.str]:
        """
        Redis slave server URIs.
        """
        return pulumi.get(self, "slave_uris")

    @property
    @pulumi.getter
    def uris(self) -> Sequence[builtins.str]:
        """
        Redis server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class GetRedisRedisUserConfigResult(dict):
    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 backup_hour: Optional[builtins.int] = None,
                 backup_minute: Optional[builtins.int] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetRedisRedisUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 migration: Optional['outputs.GetRedisRedisUserConfigMigrationResult'] = None,
                 private_access: Optional['outputs.GetRedisRedisUserConfigPrivateAccessResult'] = None,
                 privatelink_access: Optional['outputs.GetRedisRedisUserConfigPrivatelinkAccessResult'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.GetRedisRedisUserConfigPublicAccessResult'] = None,
                 recovery_basebackup_name: Optional[builtins.str] = None,
                 redis_acl_channels_default: Optional[builtins.str] = None,
                 redis_io_threads: Optional[builtins.int] = None,
                 redis_lfu_decay_time: Optional[builtins.int] = None,
                 redis_lfu_log_factor: Optional[builtins.int] = None,
                 redis_maxmemory_policy: Optional[builtins.str] = None,
                 redis_notify_keyspace_events: Optional[builtins.str] = None,
                 redis_number_of_databases: Optional[builtins.int] = None,
                 redis_persistence: Optional[builtins.str] = None,
                 redis_pubsub_client_output_buffer_limit: Optional[builtins.int] = None,
                 redis_ssl: Optional[builtins.bool] = None,
                 redis_timeout: Optional[builtins.int] = None,
                 redis_version: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.int backup_hour: The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        :param builtins.int backup_minute: The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        :param Sequence['GetRedisRedisUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'GetRedisRedisUserConfigMigrationArgs' migration: Migrate data from existing server
        :param 'GetRedisRedisUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'GetRedisRedisUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'GetRedisRedisUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_basebackup_name: Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        :param builtins.str redis_acl_channels_default: Enum: `allchannels`, `resetchannels`. Determines default pub/sub channels' ACL for new users if ACL is not supplied. When this option is not defined, all_channels is assumed to keep backward compatibility. This option doesn't affect Redis configuration acl-pubsub-default.
        :param builtins.int redis_io_threads: Set Redis IO thread count. Changing this will cause a restart of the Redis service. Example: `1`.
        :param builtins.int redis_lfu_decay_time: LFU maxmemory-policy counter decay time in minutes. Default: `1`.
        :param builtins.int redis_lfu_log_factor: Counter logarithm factor for volatile-lfu and allkeys-lfu maxmemory-policies. Default: `10`.
        :param builtins.str redis_maxmemory_policy: Enum: `allkeys-lfu`, `allkeys-lru`, `allkeys-random`, `noeviction`, `volatile-lfu`, `volatile-lru`, `volatile-random`, `volatile-ttl`. Redis maxmemory-policy. Default: `noeviction`.
        :param builtins.str redis_notify_keyspace_events: Set notify-keyspace-events option.
        :param builtins.int redis_number_of_databases: Set number of Redis databases. Changing this will cause a restart of the Redis service. Example: `16`.
        :param builtins.str redis_persistence: Enum: `off`, `rdb`. When persistence is `rdb`, Redis does RDB dumps each 10 minutes if any key is changed. Also RDB dumps are done according to the backup schedule for backup purposes. When persistence is `off`, no RDB dumps or backups are done, so data can be lost at any moment if the service is restarted for any reason, or if the service is powered off. Also, the service can't be forked.
        :param builtins.int redis_pubsub_client_output_buffer_limit: Set output buffer limit for pub / sub clients in MB. The value is the hard limit, the soft limit is 1/4 of the hard limit. When setting the limit, be mindful of the available memory in the selected service plan. Example: `64`.
        :param builtins.bool redis_ssl: Require SSL to access Redis. Default: `true`.
        :param builtins.int redis_timeout: Redis idle connection timeout in seconds. Default: `300`.
        :param builtins.str redis_version: Enum: `7.0`, and newer. Redis major version.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool static_ips: Use static public IP addresses.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if backup_hour is not None:
            pulumi.set(__self__, "backup_hour", backup_hour)
        if backup_minute is not None:
            pulumi.set(__self__, "backup_minute", backup_minute)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if migration is not None:
            pulumi.set(__self__, "migration", migration)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_basebackup_name is not None:
            pulumi.set(__self__, "recovery_basebackup_name", recovery_basebackup_name)
        if redis_acl_channels_default is not None:
            pulumi.set(__self__, "redis_acl_channels_default", redis_acl_channels_default)
        if redis_io_threads is not None:
            pulumi.set(__self__, "redis_io_threads", redis_io_threads)
        if redis_lfu_decay_time is not None:
            pulumi.set(__self__, "redis_lfu_decay_time", redis_lfu_decay_time)
        if redis_lfu_log_factor is not None:
            pulumi.set(__self__, "redis_lfu_log_factor", redis_lfu_log_factor)
        if redis_maxmemory_policy is not None:
            pulumi.set(__self__, "redis_maxmemory_policy", redis_maxmemory_policy)
        if redis_notify_keyspace_events is not None:
            pulumi.set(__self__, "redis_notify_keyspace_events", redis_notify_keyspace_events)
        if redis_number_of_databases is not None:
            pulumi.set(__self__, "redis_number_of_databases", redis_number_of_databases)
        if redis_persistence is not None:
            pulumi.set(__self__, "redis_persistence", redis_persistence)
        if redis_pubsub_client_output_buffer_limit is not None:
            pulumi.set(__self__, "redis_pubsub_client_output_buffer_limit", redis_pubsub_client_output_buffer_limit)
        if redis_ssl is not None:
            pulumi.set(__self__, "redis_ssl", redis_ssl)
        if redis_timeout is not None:
            pulumi.set(__self__, "redis_timeout", redis_timeout)
        if redis_version is not None:
            pulumi.set(__self__, "redis_version", redis_version)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="backupHour")
    def backup_hour(self) -> Optional[builtins.int]:
        """
        The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        """
        return pulumi.get(self, "backup_hour")

    @property
    @pulumi.getter(name="backupMinute")
    def backup_minute(self) -> Optional[builtins.int]:
        """
        The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        """
        return pulumi.get(self, "backup_minute")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetRedisRedisUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter
    def migration(self) -> Optional['outputs.GetRedisRedisUserConfigMigrationResult']:
        """
        Migrate data from existing server
        """
        return pulumi.get(self, "migration")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.GetRedisRedisUserConfigPrivateAccessResult']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.GetRedisRedisUserConfigPrivatelinkAccessResult']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GetRedisRedisUserConfigPublicAccessResult']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryBasebackupName")
    def recovery_basebackup_name(self) -> Optional[builtins.str]:
        """
        Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        """
        return pulumi.get(self, "recovery_basebackup_name")

    @property
    @pulumi.getter(name="redisAclChannelsDefault")
    def redis_acl_channels_default(self) -> Optional[builtins.str]:
        """
        Enum: `allchannels`, `resetchannels`. Determines default pub/sub channels' ACL for new users if ACL is not supplied. When this option is not defined, all_channels is assumed to keep backward compatibility. This option doesn't affect Redis configuration acl-pubsub-default.
        """
        return pulumi.get(self, "redis_acl_channels_default")

    @property
    @pulumi.getter(name="redisIoThreads")
    def redis_io_threads(self) -> Optional[builtins.int]:
        """
        Set Redis IO thread count. Changing this will cause a restart of the Redis service. Example: `1`.
        """
        return pulumi.get(self, "redis_io_threads")

    @property
    @pulumi.getter(name="redisLfuDecayTime")
    def redis_lfu_decay_time(self) -> Optional[builtins.int]:
        """
        LFU maxmemory-policy counter decay time in minutes. Default: `1`.
        """
        return pulumi.get(self, "redis_lfu_decay_time")

    @property
    @pulumi.getter(name="redisLfuLogFactor")
    def redis_lfu_log_factor(self) -> Optional[builtins.int]:
        """
        Counter logarithm factor for volatile-lfu and allkeys-lfu maxmemory-policies. Default: `10`.
        """
        return pulumi.get(self, "redis_lfu_log_factor")

    @property
    @pulumi.getter(name="redisMaxmemoryPolicy")
    def redis_maxmemory_policy(self) -> Optional[builtins.str]:
        """
        Enum: `allkeys-lfu`, `allkeys-lru`, `allkeys-random`, `noeviction`, `volatile-lfu`, `volatile-lru`, `volatile-random`, `volatile-ttl`. Redis maxmemory-policy. Default: `noeviction`.
        """
        return pulumi.get(self, "redis_maxmemory_policy")

    @property
    @pulumi.getter(name="redisNotifyKeyspaceEvents")
    def redis_notify_keyspace_events(self) -> Optional[builtins.str]:
        """
        Set notify-keyspace-events option.
        """
        return pulumi.get(self, "redis_notify_keyspace_events")

    @property
    @pulumi.getter(name="redisNumberOfDatabases")
    def redis_number_of_databases(self) -> Optional[builtins.int]:
        """
        Set number of Redis databases. Changing this will cause a restart of the Redis service. Example: `16`.
        """
        return pulumi.get(self, "redis_number_of_databases")

    @property
    @pulumi.getter(name="redisPersistence")
    def redis_persistence(self) -> Optional[builtins.str]:
        """
        Enum: `off`, `rdb`. When persistence is `rdb`, Redis does RDB dumps each 10 minutes if any key is changed. Also RDB dumps are done according to the backup schedule for backup purposes. When persistence is `off`, no RDB dumps or backups are done, so data can be lost at any moment if the service is restarted for any reason, or if the service is powered off. Also, the service can't be forked.
        """
        return pulumi.get(self, "redis_persistence")

    @property
    @pulumi.getter(name="redisPubsubClientOutputBufferLimit")
    def redis_pubsub_client_output_buffer_limit(self) -> Optional[builtins.int]:
        """
        Set output buffer limit for pub / sub clients in MB. The value is the hard limit, the soft limit is 1/4 of the hard limit. When setting the limit, be mindful of the available memory in the selected service plan. Example: `64`.
        """
        return pulumi.get(self, "redis_pubsub_client_output_buffer_limit")

    @property
    @pulumi.getter(name="redisSsl")
    def redis_ssl(self) -> Optional[builtins.bool]:
        """
        Require SSL to access Redis. Default: `true`.
        """
        return pulumi.get(self, "redis_ssl")

    @property
    @pulumi.getter(name="redisTimeout")
    def redis_timeout(self) -> Optional[builtins.int]:
        """
        Redis idle connection timeout in seconds. Default: `300`.
        """
        return pulumi.get(self, "redis_timeout")

    @property
    @pulumi.getter(name="redisVersion")
    def redis_version(self) -> Optional[builtins.str]:
        """
        Enum: `7.0`, and newer. Redis major version.
        """
        return pulumi.get(self, "redis_version")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")


@pulumi.output_type
class GetRedisRedisUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetRedisRedisUserConfigMigrationResult(dict):
    def __init__(__self__, *,
                 host: builtins.str,
                 port: builtins.int,
                 dbname: Optional[builtins.str] = None,
                 ignore_dbs: Optional[builtins.str] = None,
                 ignore_roles: Optional[builtins.str] = None,
                 method: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 username: Optional[builtins.str] = None):
        """
        :param builtins.str host: Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        :param builtins.int port: Port number of the server where to migrate data from. Example: `1234`.
        :param builtins.str dbname: Database name for bootstrapping the initial connection. Example: `defaultdb`.
        :param builtins.str ignore_dbs: Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        :param builtins.str ignore_roles: Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        :param builtins.str method: Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        :param builtins.str password: Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        :param builtins.bool ssl: The server where to migrate data from is secured with SSL. Default: `true`.
        :param builtins.str username: User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "port", port)
        if dbname is not None:
            pulumi.set(__self__, "dbname", dbname)
        if ignore_dbs is not None:
            pulumi.set(__self__, "ignore_dbs", ignore_dbs)
        if ignore_roles is not None:
            pulumi.set(__self__, "ignore_roles", ignore_roles)
        if method is not None:
            pulumi.set(__self__, "method", method)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number of the server where to migrate data from. Example: `1234`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def dbname(self) -> Optional[builtins.str]:
        """
        Database name for bootstrapping the initial connection. Example: `defaultdb`.
        """
        return pulumi.get(self, "dbname")

    @property
    @pulumi.getter(name="ignoreDbs")
    def ignore_dbs(self) -> Optional[builtins.str]:
        """
        Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        """
        return pulumi.get(self, "ignore_dbs")

    @property
    @pulumi.getter(name="ignoreRoles")
    def ignore_roles(self) -> Optional[builtins.str]:
        """
        Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        """
        return pulumi.get(self, "ignore_roles")

    @property
    @pulumi.getter
    def method(self) -> Optional[builtins.str]:
        """
        Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        """
        return pulumi.get(self, "method")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        The server where to migrate data from is secured with SSL. Default: `true`.
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def username(self) -> Optional[builtins.str]:
        """
        User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class GetRedisRedisUserConfigPrivateAccessResult(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None,
                 redis: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool redis: Allow clients to connect to redis with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if redis is not None:
            pulumi.set(__self__, "redis", redis)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter
    def redis(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to redis with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "redis")


@pulumi.output_type
class GetRedisRedisUserConfigPrivatelinkAccessResult(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None,
                 redis: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Enable prometheus.
        :param builtins.bool redis: Enable redis.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if redis is not None:
            pulumi.set(__self__, "redis", redis)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter
    def redis(self) -> Optional[builtins.bool]:
        """
        Enable redis.
        """
        return pulumi.get(self, "redis")


@pulumi.output_type
class GetRedisRedisUserConfigPublicAccessResult(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None,
                 redis: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool redis: Allow clients to connect to redis from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if redis is not None:
            pulumi.set(__self__, "redis", redis)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter
    def redis(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to redis from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "redis")


@pulumi.output_type
class GetRedisServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration. The possible value is `read_replica`.
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration. The possible value is `read_replica`.
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetRedisTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetRedisTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetServiceIntegrationClickhouseKafkaUserConfigResult(dict):
    def __init__(__self__, *,
                 tables: Optional[Sequence['outputs.GetServiceIntegrationClickhouseKafkaUserConfigTableResult']] = None):
        """
        :param Sequence['GetServiceIntegrationClickhouseKafkaUserConfigTableArgs'] tables: Tables to create
        """
        if tables is not None:
            pulumi.set(__self__, "tables", tables)

    @property
    @pulumi.getter
    def tables(self) -> Optional[Sequence['outputs.GetServiceIntegrationClickhouseKafkaUserConfigTableResult']]:
        """
        Tables to create
        """
        return pulumi.get(self, "tables")


@pulumi.output_type
class GetServiceIntegrationClickhouseKafkaUserConfigTableResult(dict):
    def __init__(__self__, *,
                 columns: Sequence['outputs.GetServiceIntegrationClickhouseKafkaUserConfigTableColumnResult'],
                 data_format: builtins.str,
                 group_name: builtins.str,
                 name: builtins.str,
                 topics: Sequence['outputs.GetServiceIntegrationClickhouseKafkaUserConfigTableTopicResult'],
                 auto_offset_reset: Optional[builtins.str] = None,
                 date_time_input_format: Optional[builtins.str] = None,
                 handle_error_mode: Optional[builtins.str] = None,
                 max_block_size: Optional[builtins.int] = None,
                 max_rows_per_message: Optional[builtins.int] = None,
                 num_consumers: Optional[builtins.int] = None,
                 poll_max_batch_size: Optional[builtins.int] = None,
                 poll_max_timeout_ms: Optional[builtins.int] = None,
                 skip_broken_messages: Optional[builtins.int] = None,
                 thread_per_consumer: Optional[builtins.bool] = None):
        """
        :param Sequence['GetServiceIntegrationClickhouseKafkaUserConfigTableColumnArgs'] columns: Table columns
        :param builtins.str data_format: Enum: `Avro`, `AvroConfluent`, `CSV`, `JSONAsString`, `JSONCompactEachRow`, `JSONCompactStringsEachRow`, `JSONEachRow`, `JSONStringsEachRow`, `MsgPack`, `Parquet`, `RawBLOB`, `TSKV`, `TSV`, `TabSeparated`. Message data format. Default: `JSONEachRow`.
        :param builtins.str group_name: Kafka consumers group. Default: `clickhouse`.
        :param builtins.str name: Name of the table. Example: `events`.
        :param Sequence['GetServiceIntegrationClickhouseKafkaUserConfigTableTopicArgs'] topics: Kafka topics
        :param builtins.str auto_offset_reset: Enum: `beginning`, `earliest`, `end`, `largest`, `latest`, `smallest`. Action to take when there is no initial offset in offset store or the desired offset is out of range. Default: `earliest`.
        :param builtins.str date_time_input_format: Enum: `basic`, `best_effort`, `best_effort_us`. Method to read DateTime from text input formats. Default: `basic`.
        :param builtins.str handle_error_mode: Enum: `default`, `stream`. How to handle errors for Kafka engine. Default: `default`.
        :param builtins.int max_block_size: Number of row collected by poll(s) for flushing data from Kafka. Default: `0`.
        :param builtins.int max_rows_per_message: The maximum number of rows produced in one kafka message for row-based formats. Default: `1`.
        :param builtins.int num_consumers: The number of consumers per table per replica. Default: `1`.
        :param builtins.int poll_max_batch_size: Maximum amount of messages to be polled in a single Kafka poll. Default: `0`.
        :param builtins.int poll_max_timeout_ms: Timeout in milliseconds for a single poll from Kafka. Takes the value of the stream_flush_interval_ms server setting by default (500ms). Default: `0`.
        :param builtins.int skip_broken_messages: Skip at least this number of broken messages from Kafka topic per block. Default: `0`.
        :param builtins.bool thread_per_consumer: Provide an independent thread for each consumer. All consumers run in the same thread by default. Default: `false`.
        """
        pulumi.set(__self__, "columns", columns)
        pulumi.set(__self__, "data_format", data_format)
        pulumi.set(__self__, "group_name", group_name)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "topics", topics)
        if auto_offset_reset is not None:
            pulumi.set(__self__, "auto_offset_reset", auto_offset_reset)
        if date_time_input_format is not None:
            pulumi.set(__self__, "date_time_input_format", date_time_input_format)
        if handle_error_mode is not None:
            pulumi.set(__self__, "handle_error_mode", handle_error_mode)
        if max_block_size is not None:
            pulumi.set(__self__, "max_block_size", max_block_size)
        if max_rows_per_message is not None:
            pulumi.set(__self__, "max_rows_per_message", max_rows_per_message)
        if num_consumers is not None:
            pulumi.set(__self__, "num_consumers", num_consumers)
        if poll_max_batch_size is not None:
            pulumi.set(__self__, "poll_max_batch_size", poll_max_batch_size)
        if poll_max_timeout_ms is not None:
            pulumi.set(__self__, "poll_max_timeout_ms", poll_max_timeout_ms)
        if skip_broken_messages is not None:
            pulumi.set(__self__, "skip_broken_messages", skip_broken_messages)
        if thread_per_consumer is not None:
            pulumi.set(__self__, "thread_per_consumer", thread_per_consumer)

    @property
    @pulumi.getter
    def columns(self) -> Sequence['outputs.GetServiceIntegrationClickhouseKafkaUserConfigTableColumnResult']:
        """
        Table columns
        """
        return pulumi.get(self, "columns")

    @property
    @pulumi.getter(name="dataFormat")
    def data_format(self) -> builtins.str:
        """
        Enum: `Avro`, `AvroConfluent`, `CSV`, `JSONAsString`, `JSONCompactEachRow`, `JSONCompactStringsEachRow`, `JSONEachRow`, `JSONStringsEachRow`, `MsgPack`, `Parquet`, `RawBLOB`, `TSKV`, `TSV`, `TabSeparated`. Message data format. Default: `JSONEachRow`.
        """
        return pulumi.get(self, "data_format")

    @property
    @pulumi.getter(name="groupName")
    def group_name(self) -> builtins.str:
        """
        Kafka consumers group. Default: `clickhouse`.
        """
        return pulumi.get(self, "group_name")

    @property
    @pulumi.getter
    def name(self) -> builtins.str:
        """
        Name of the table. Example: `events`.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def topics(self) -> Sequence['outputs.GetServiceIntegrationClickhouseKafkaUserConfigTableTopicResult']:
        """
        Kafka topics
        """
        return pulumi.get(self, "topics")

    @property
    @pulumi.getter(name="autoOffsetReset")
    def auto_offset_reset(self) -> Optional[builtins.str]:
        """
        Enum: `beginning`, `earliest`, `end`, `largest`, `latest`, `smallest`. Action to take when there is no initial offset in offset store or the desired offset is out of range. Default: `earliest`.
        """
        return pulumi.get(self, "auto_offset_reset")

    @property
    @pulumi.getter(name="dateTimeInputFormat")
    def date_time_input_format(self) -> Optional[builtins.str]:
        """
        Enum: `basic`, `best_effort`, `best_effort_us`. Method to read DateTime from text input formats. Default: `basic`.
        """
        return pulumi.get(self, "date_time_input_format")

    @property
    @pulumi.getter(name="handleErrorMode")
    def handle_error_mode(self) -> Optional[builtins.str]:
        """
        Enum: `default`, `stream`. How to handle errors for Kafka engine. Default: `default`.
        """
        return pulumi.get(self, "handle_error_mode")

    @property
    @pulumi.getter(name="maxBlockSize")
    def max_block_size(self) -> Optional[builtins.int]:
        """
        Number of row collected by poll(s) for flushing data from Kafka. Default: `0`.
        """
        return pulumi.get(self, "max_block_size")

    @property
    @pulumi.getter(name="maxRowsPerMessage")
    def max_rows_per_message(self) -> Optional[builtins.int]:
        """
        The maximum number of rows produced in one kafka message for row-based formats. Default: `1`.
        """
        return pulumi.get(self, "max_rows_per_message")

    @property
    @pulumi.getter(name="numConsumers")
    def num_consumers(self) -> Optional[builtins.int]:
        """
        The number of consumers per table per replica. Default: `1`.
        """
        return pulumi.get(self, "num_consumers")

    @property
    @pulumi.getter(name="pollMaxBatchSize")
    def poll_max_batch_size(self) -> Optional[builtins.int]:
        """
        Maximum amount of messages to be polled in a single Kafka poll. Default: `0`.
        """
        return pulumi.get(self, "poll_max_batch_size")

    @property
    @pulumi.getter(name="pollMaxTimeoutMs")
    def poll_max_timeout_ms(self) -> Optional[builtins.int]:
        """
        Timeout in milliseconds for a single poll from Kafka. Takes the value of the stream_flush_interval_ms server setting by default (500ms). Default: `0`.
        """
        return pulumi.get(self, "poll_max_timeout_ms")

    @property
    @pulumi.getter(name="skipBrokenMessages")
    def skip_broken_messages(self) -> Optional[builtins.int]:
        """
        Skip at least this number of broken messages from Kafka topic per block. Default: `0`.
        """
        return pulumi.get(self, "skip_broken_messages")

    @property
    @pulumi.getter(name="threadPerConsumer")
    def thread_per_consumer(self) -> Optional[builtins.bool]:
        """
        Provide an independent thread for each consumer. All consumers run in the same thread by default. Default: `false`.
        """
        return pulumi.get(self, "thread_per_consumer")


@pulumi.output_type
class GetServiceIntegrationClickhouseKafkaUserConfigTableColumnResult(dict):
    def __init__(__self__, *,
                 name: builtins.str,
                 type: builtins.str):
        """
        :param builtins.str name: Column name. Example: `key`.
        :param builtins.str type: Column type. Example: `UInt64`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def name(self) -> builtins.str:
        """
        Column name. Example: `key`.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def type(self) -> builtins.str:
        """
        Column type. Example: `UInt64`.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetServiceIntegrationClickhouseKafkaUserConfigTableTopicResult(dict):
    def __init__(__self__, *,
                 name: builtins.str):
        """
        :param builtins.str name: Name of the topic. Example: `topic_name`.
        """
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def name(self) -> builtins.str:
        """
        Name of the topic. Example: `topic_name`.
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetServiceIntegrationClickhousePostgresqlUserConfigResult(dict):
    def __init__(__self__, *,
                 databases: Optional[Sequence['outputs.GetServiceIntegrationClickhousePostgresqlUserConfigDatabaseResult']] = None):
        """
        :param Sequence['GetServiceIntegrationClickhousePostgresqlUserConfigDatabaseArgs'] databases: Databases to expose
        """
        if databases is not None:
            pulumi.set(__self__, "databases", databases)

    @property
    @pulumi.getter
    def databases(self) -> Optional[Sequence['outputs.GetServiceIntegrationClickhousePostgresqlUserConfigDatabaseResult']]:
        """
        Databases to expose
        """
        return pulumi.get(self, "databases")


@pulumi.output_type
class GetServiceIntegrationClickhousePostgresqlUserConfigDatabaseResult(dict):
    def __init__(__self__, *,
                 database: Optional[builtins.str] = None,
                 schema: Optional[builtins.str] = None):
        """
        :param builtins.str database: PostgreSQL database to expose. Default: `defaultdb`.
        :param builtins.str schema: PostgreSQL schema to expose. Default: `public`.
        """
        if database is not None:
            pulumi.set(__self__, "database", database)
        if schema is not None:
            pulumi.set(__self__, "schema", schema)

    @property
    @pulumi.getter
    def database(self) -> Optional[builtins.str]:
        """
        PostgreSQL database to expose. Default: `defaultdb`.
        """
        return pulumi.get(self, "database")

    @property
    @pulumi.getter
    def schema(self) -> Optional[builtins.str]:
        """
        PostgreSQL schema to expose. Default: `public`.
        """
        return pulumi.get(self, "schema")


@pulumi.output_type
class GetServiceIntegrationDatadogUserConfigResult(dict):
    def __init__(__self__, *,
                 datadog_dbm_enabled: Optional[builtins.bool] = None,
                 datadog_pgbouncer_enabled: Optional[builtins.bool] = None,
                 datadog_tags: Optional[Sequence['outputs.GetServiceIntegrationDatadogUserConfigDatadogTagResult']] = None,
                 exclude_consumer_groups: Optional[Sequence[builtins.str]] = None,
                 exclude_topics: Optional[Sequence[builtins.str]] = None,
                 include_consumer_groups: Optional[Sequence[builtins.str]] = None,
                 include_topics: Optional[Sequence[builtins.str]] = None,
                 kafka_custom_metrics: Optional[Sequence[builtins.str]] = None,
                 max_jmx_metrics: Optional[builtins.int] = None,
                 mirrormaker_custom_metrics: Optional[Sequence[builtins.str]] = None,
                 opensearch: Optional['outputs.GetServiceIntegrationDatadogUserConfigOpensearchResult'] = None,
                 redis: Optional['outputs.GetServiceIntegrationDatadogUserConfigRedisResult'] = None):
        """
        :param builtins.bool datadog_dbm_enabled: Enable Datadog Database Monitoring.
        :param builtins.bool datadog_pgbouncer_enabled: Enable Datadog PgBouncer Metric Tracking.
        :param Sequence['GetServiceIntegrationDatadogUserConfigDatadogTagArgs'] datadog_tags: Custom tags provided by user
        :param Sequence[builtins.str] exclude_consumer_groups: List of custom metrics.
        :param Sequence[builtins.str] exclude_topics: List of topics to exclude.
        :param Sequence[builtins.str] include_consumer_groups: List of custom metrics.
        :param Sequence[builtins.str] include_topics: List of topics to include.
        :param Sequence[builtins.str] kafka_custom_metrics: List of custom metrics.
        :param builtins.int max_jmx_metrics: Maximum number of JMX metrics to send. Example: `2000`.
        :param Sequence[builtins.str] mirrormaker_custom_metrics: List of custom metrics.
        :param 'GetServiceIntegrationDatadogUserConfigOpensearchArgs' opensearch: Datadog Opensearch Options
        :param 'GetServiceIntegrationDatadogUserConfigRedisArgs' redis: Datadog Redis Options
        """
        if datadog_dbm_enabled is not None:
            pulumi.set(__self__, "datadog_dbm_enabled", datadog_dbm_enabled)
        if datadog_pgbouncer_enabled is not None:
            pulumi.set(__self__, "datadog_pgbouncer_enabled", datadog_pgbouncer_enabled)
        if datadog_tags is not None:
            pulumi.set(__self__, "datadog_tags", datadog_tags)
        if exclude_consumer_groups is not None:
            pulumi.set(__self__, "exclude_consumer_groups", exclude_consumer_groups)
        if exclude_topics is not None:
            pulumi.set(__self__, "exclude_topics", exclude_topics)
        if include_consumer_groups is not None:
            pulumi.set(__self__, "include_consumer_groups", include_consumer_groups)
        if include_topics is not None:
            pulumi.set(__self__, "include_topics", include_topics)
        if kafka_custom_metrics is not None:
            pulumi.set(__self__, "kafka_custom_metrics", kafka_custom_metrics)
        if max_jmx_metrics is not None:
            pulumi.set(__self__, "max_jmx_metrics", max_jmx_metrics)
        if mirrormaker_custom_metrics is not None:
            pulumi.set(__self__, "mirrormaker_custom_metrics", mirrormaker_custom_metrics)
        if opensearch is not None:
            pulumi.set(__self__, "opensearch", opensearch)
        if redis is not None:
            pulumi.set(__self__, "redis", redis)

    @property
    @pulumi.getter(name="datadogDbmEnabled")
    def datadog_dbm_enabled(self) -> Optional[builtins.bool]:
        """
        Enable Datadog Database Monitoring.
        """
        return pulumi.get(self, "datadog_dbm_enabled")

    @property
    @pulumi.getter(name="datadogPgbouncerEnabled")
    def datadog_pgbouncer_enabled(self) -> Optional[builtins.bool]:
        """
        Enable Datadog PgBouncer Metric Tracking.
        """
        return pulumi.get(self, "datadog_pgbouncer_enabled")

    @property
    @pulumi.getter(name="datadogTags")
    def datadog_tags(self) -> Optional[Sequence['outputs.GetServiceIntegrationDatadogUserConfigDatadogTagResult']]:
        """
        Custom tags provided by user
        """
        return pulumi.get(self, "datadog_tags")

    @property
    @pulumi.getter(name="excludeConsumerGroups")
    def exclude_consumer_groups(self) -> Optional[Sequence[builtins.str]]:
        """
        List of custom metrics.
        """
        return pulumi.get(self, "exclude_consumer_groups")

    @property
    @pulumi.getter(name="excludeTopics")
    def exclude_topics(self) -> Optional[Sequence[builtins.str]]:
        """
        List of topics to exclude.
        """
        return pulumi.get(self, "exclude_topics")

    @property
    @pulumi.getter(name="includeConsumerGroups")
    def include_consumer_groups(self) -> Optional[Sequence[builtins.str]]:
        """
        List of custom metrics.
        """
        return pulumi.get(self, "include_consumer_groups")

    @property
    @pulumi.getter(name="includeTopics")
    def include_topics(self) -> Optional[Sequence[builtins.str]]:
        """
        List of topics to include.
        """
        return pulumi.get(self, "include_topics")

    @property
    @pulumi.getter(name="kafkaCustomMetrics")
    def kafka_custom_metrics(self) -> Optional[Sequence[builtins.str]]:
        """
        List of custom metrics.
        """
        return pulumi.get(self, "kafka_custom_metrics")

    @property
    @pulumi.getter(name="maxJmxMetrics")
    def max_jmx_metrics(self) -> Optional[builtins.int]:
        """
        Maximum number of JMX metrics to send. Example: `2000`.
        """
        return pulumi.get(self, "max_jmx_metrics")

    @property
    @pulumi.getter(name="mirrormakerCustomMetrics")
    def mirrormaker_custom_metrics(self) -> Optional[Sequence[builtins.str]]:
        """
        List of custom metrics.
        """
        return pulumi.get(self, "mirrormaker_custom_metrics")

    @property
    @pulumi.getter
    def opensearch(self) -> Optional['outputs.GetServiceIntegrationDatadogUserConfigOpensearchResult']:
        """
        Datadog Opensearch Options
        """
        return pulumi.get(self, "opensearch")

    @property
    @pulumi.getter
    def redis(self) -> Optional['outputs.GetServiceIntegrationDatadogUserConfigRedisResult']:
        """
        Datadog Redis Options
        """
        return pulumi.get(self, "redis")


@pulumi.output_type
class GetServiceIntegrationDatadogUserConfigDatadogTagResult(dict):
    def __init__(__self__, *,
                 tag: builtins.str,
                 comment: Optional[builtins.str] = None):
        """
        :param builtins.str tag: Tag format and usage are described here: https://docs.datadoghq.com/getting_started/tagging. Tags with prefix `aiven-` are reserved for Aiven. Example: `replica:primary`.
        :param builtins.str comment: Optional tag explanation. Example: `Used to tag primary replica metrics`.
        """
        pulumi.set(__self__, "tag", tag)
        if comment is not None:
            pulumi.set(__self__, "comment", comment)

    @property
    @pulumi.getter
    def tag(self) -> builtins.str:
        """
        Tag format and usage are described here: https://docs.datadoghq.com/getting_started/tagging. Tags with prefix `aiven-` are reserved for Aiven. Example: `replica:primary`.
        """
        return pulumi.get(self, "tag")

    @property
    @pulumi.getter
    def comment(self) -> Optional[builtins.str]:
        """
        Optional tag explanation. Example: `Used to tag primary replica metrics`.
        """
        return pulumi.get(self, "comment")


@pulumi.output_type
class GetServiceIntegrationDatadogUserConfigOpensearchResult(dict):
    def __init__(__self__, *,
                 cluster_stats_enabled: Optional[builtins.bool] = None,
                 index_stats_enabled: Optional[builtins.bool] = None,
                 pending_task_stats_enabled: Optional[builtins.bool] = None,
                 pshard_stats_enabled: Optional[builtins.bool] = None):
        """
        :param builtins.bool cluster_stats_enabled: Enable Datadog Opensearch Cluster Monitoring.
        :param builtins.bool index_stats_enabled: Enable Datadog Opensearch Index Monitoring.
        :param builtins.bool pending_task_stats_enabled: Enable Datadog Opensearch Pending Task Monitoring.
        :param builtins.bool pshard_stats_enabled: Enable Datadog Opensearch Primary Shard Monitoring.
        """
        if cluster_stats_enabled is not None:
            pulumi.set(__self__, "cluster_stats_enabled", cluster_stats_enabled)
        if index_stats_enabled is not None:
            pulumi.set(__self__, "index_stats_enabled", index_stats_enabled)
        if pending_task_stats_enabled is not None:
            pulumi.set(__self__, "pending_task_stats_enabled", pending_task_stats_enabled)
        if pshard_stats_enabled is not None:
            pulumi.set(__self__, "pshard_stats_enabled", pshard_stats_enabled)

    @property
    @pulumi.getter(name="clusterStatsEnabled")
    def cluster_stats_enabled(self) -> Optional[builtins.bool]:
        """
        Enable Datadog Opensearch Cluster Monitoring.
        """
        return pulumi.get(self, "cluster_stats_enabled")

    @property
    @pulumi.getter(name="indexStatsEnabled")
    def index_stats_enabled(self) -> Optional[builtins.bool]:
        """
        Enable Datadog Opensearch Index Monitoring.
        """
        return pulumi.get(self, "index_stats_enabled")

    @property
    @pulumi.getter(name="pendingTaskStatsEnabled")
    def pending_task_stats_enabled(self) -> Optional[builtins.bool]:
        """
        Enable Datadog Opensearch Pending Task Monitoring.
        """
        return pulumi.get(self, "pending_task_stats_enabled")

    @property
    @pulumi.getter(name="pshardStatsEnabled")
    def pshard_stats_enabled(self) -> Optional[builtins.bool]:
        """
        Enable Datadog Opensearch Primary Shard Monitoring.
        """
        return pulumi.get(self, "pshard_stats_enabled")


@pulumi.output_type
class GetServiceIntegrationDatadogUserConfigRedisResult(dict):
    def __init__(__self__, *,
                 command_stats_enabled: Optional[builtins.bool] = None):
        """
        :param builtins.bool command_stats_enabled: Enable command_stats option in the agent's configuration. Default: `false`.
        """
        if command_stats_enabled is not None:
            pulumi.set(__self__, "command_stats_enabled", command_stats_enabled)

    @property
    @pulumi.getter(name="commandStatsEnabled")
    def command_stats_enabled(self) -> Optional[builtins.bool]:
        """
        Enable command_stats option in the agent's configuration. Default: `false`.
        """
        return pulumi.get(self, "command_stats_enabled")


@pulumi.output_type
class GetServiceIntegrationEndpointAutoscalerUserConfigResult(dict):
    def __init__(__self__, *,
                 autoscalings: Sequence['outputs.GetServiceIntegrationEndpointAutoscalerUserConfigAutoscalingResult']):
        """
        :param Sequence['GetServiceIntegrationEndpointAutoscalerUserConfigAutoscalingArgs'] autoscalings: Configure autoscaling thresholds for a service
        """
        pulumi.set(__self__, "autoscalings", autoscalings)

    @property
    @pulumi.getter
    def autoscalings(self) -> Sequence['outputs.GetServiceIntegrationEndpointAutoscalerUserConfigAutoscalingResult']:
        """
        Configure autoscaling thresholds for a service
        """
        return pulumi.get(self, "autoscalings")


@pulumi.output_type
class GetServiceIntegrationEndpointAutoscalerUserConfigAutoscalingResult(dict):
    def __init__(__self__, *,
                 cap_gb: builtins.int,
                 type: builtins.str):
        """
        :param builtins.int cap_gb: The maximum total disk size (in gb) to allow autoscaler to scale up to. Example: `300`.
        :param builtins.str type: Enum: `autoscale_disk`. Type of autoscale event.
        """
        pulumi.set(__self__, "cap_gb", cap_gb)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="capGb")
    def cap_gb(self) -> builtins.int:
        """
        The maximum total disk size (in gb) to allow autoscaler to scale up to. Example: `300`.
        """
        return pulumi.get(self, "cap_gb")

    @property
    @pulumi.getter
    def type(self) -> builtins.str:
        """
        Enum: `autoscale_disk`. Type of autoscale event.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetServiceIntegrationEndpointDatadogUserConfigResult(dict):
    def __init__(__self__, *,
                 datadog_api_key: builtins.str,
                 datadog_tags: Optional[Sequence['outputs.GetServiceIntegrationEndpointDatadogUserConfigDatadogTagResult']] = None,
                 disable_consumer_stats: Optional[builtins.bool] = None,
                 extra_tags_prefix: Optional[builtins.str] = None,
                 kafka_consumer_check_instances: Optional[builtins.int] = None,
                 kafka_consumer_stats_timeout: Optional[builtins.int] = None,
                 max_partition_contexts: Optional[builtins.int] = None,
                 site: Optional[builtins.str] = None):
        """
        :param builtins.str datadog_api_key: Datadog API key. Example: `848f30907c15c55d601fe45487cce9b6`.
        :param Sequence['GetServiceIntegrationEndpointDatadogUserConfigDatadogTagArgs'] datadog_tags: Custom tags provided by user
        :param builtins.bool disable_consumer_stats: Disable consumer group metrics.
        :param builtins.str extra_tags_prefix: Extra tags prefix. Defaults to aiven.
        :param builtins.int kafka_consumer_check_instances: Number of separate instances to fetch kafka consumer statistics with. Example: `8`.
        :param builtins.int kafka_consumer_stats_timeout: Number of seconds that datadog will wait to get consumer statistics from brokers. Example: `60`.
        :param builtins.int max_partition_contexts: Maximum number of partition contexts to send. Example: `32000`.
        :param builtins.str site: Enum: `ap1.datadoghq.com`, `datadoghq.com`, `datadoghq.eu`, `ddog-gov.com`, `us3.datadoghq.com`, `us5.datadoghq.com`. Datadog intake site. Defaults to datadoghq.com.
        """
        pulumi.set(__self__, "datadog_api_key", datadog_api_key)
        if datadog_tags is not None:
            pulumi.set(__self__, "datadog_tags", datadog_tags)
        if disable_consumer_stats is not None:
            pulumi.set(__self__, "disable_consumer_stats", disable_consumer_stats)
        if extra_tags_prefix is not None:
            pulumi.set(__self__, "extra_tags_prefix", extra_tags_prefix)
        if kafka_consumer_check_instances is not None:
            pulumi.set(__self__, "kafka_consumer_check_instances", kafka_consumer_check_instances)
        if kafka_consumer_stats_timeout is not None:
            pulumi.set(__self__, "kafka_consumer_stats_timeout", kafka_consumer_stats_timeout)
        if max_partition_contexts is not None:
            pulumi.set(__self__, "max_partition_contexts", max_partition_contexts)
        if site is not None:
            pulumi.set(__self__, "site", site)

    @property
    @pulumi.getter(name="datadogApiKey")
    def datadog_api_key(self) -> builtins.str:
        """
        Datadog API key. Example: `848f30907c15c55d601fe45487cce9b6`.
        """
        return pulumi.get(self, "datadog_api_key")

    @property
    @pulumi.getter(name="datadogTags")
    def datadog_tags(self) -> Optional[Sequence['outputs.GetServiceIntegrationEndpointDatadogUserConfigDatadogTagResult']]:
        """
        Custom tags provided by user
        """
        return pulumi.get(self, "datadog_tags")

    @property
    @pulumi.getter(name="disableConsumerStats")
    def disable_consumer_stats(self) -> Optional[builtins.bool]:
        """
        Disable consumer group metrics.
        """
        return pulumi.get(self, "disable_consumer_stats")

    @property
    @pulumi.getter(name="extraTagsPrefix")
    def extra_tags_prefix(self) -> Optional[builtins.str]:
        """
        Extra tags prefix. Defaults to aiven.
        """
        return pulumi.get(self, "extra_tags_prefix")

    @property
    @pulumi.getter(name="kafkaConsumerCheckInstances")
    def kafka_consumer_check_instances(self) -> Optional[builtins.int]:
        """
        Number of separate instances to fetch kafka consumer statistics with. Example: `8`.
        """
        return pulumi.get(self, "kafka_consumer_check_instances")

    @property
    @pulumi.getter(name="kafkaConsumerStatsTimeout")
    def kafka_consumer_stats_timeout(self) -> Optional[builtins.int]:
        """
        Number of seconds that datadog will wait to get consumer statistics from brokers. Example: `60`.
        """
        return pulumi.get(self, "kafka_consumer_stats_timeout")

    @property
    @pulumi.getter(name="maxPartitionContexts")
    def max_partition_contexts(self) -> Optional[builtins.int]:
        """
        Maximum number of partition contexts to send. Example: `32000`.
        """
        return pulumi.get(self, "max_partition_contexts")

    @property
    @pulumi.getter
    def site(self) -> Optional[builtins.str]:
        """
        Enum: `ap1.datadoghq.com`, `datadoghq.com`, `datadoghq.eu`, `ddog-gov.com`, `us3.datadoghq.com`, `us5.datadoghq.com`. Datadog intake site. Defaults to datadoghq.com.
        """
        return pulumi.get(self, "site")


@pulumi.output_type
class GetServiceIntegrationEndpointDatadogUserConfigDatadogTagResult(dict):
    def __init__(__self__, *,
                 tag: builtins.str,
                 comment: Optional[builtins.str] = None):
        """
        :param builtins.str tag: Tag format and usage are described here: https://docs.datadoghq.com/getting_started/tagging. Tags with prefix `aiven-` are reserved for Aiven. Example: `replica:primary`.
        :param builtins.str comment: Optional tag explanation. Example: `Used to tag primary replica metrics`.
        """
        pulumi.set(__self__, "tag", tag)
        if comment is not None:
            pulumi.set(__self__, "comment", comment)

    @property
    @pulumi.getter
    def tag(self) -> builtins.str:
        """
        Tag format and usage are described here: https://docs.datadoghq.com/getting_started/tagging. Tags with prefix `aiven-` are reserved for Aiven. Example: `replica:primary`.
        """
        return pulumi.get(self, "tag")

    @property
    @pulumi.getter
    def comment(self) -> Optional[builtins.str]:
        """
        Optional tag explanation. Example: `Used to tag primary replica metrics`.
        """
        return pulumi.get(self, "comment")


@pulumi.output_type
class GetServiceIntegrationEndpointExternalAwsCloudwatchLogsUserConfigResult(dict):
    def __init__(__self__, *,
                 access_key: builtins.str,
                 region: builtins.str,
                 secret_key: builtins.str,
                 log_group_name: Optional[builtins.str] = None):
        """
        :param builtins.str access_key: AWS access key. Required permissions are logs:CreateLogGroup, logs:CreateLogStream, logs:PutLogEvents and logs:DescribeLogStreams. Example: `AAAAAAAAAAAAAAAAAAAA`.
        :param builtins.str region: AWS region. Example: `us-east-1`.
        :param builtins.str secret_key: AWS secret key. Example: `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`.
        :param builtins.str log_group_name: AWS CloudWatch log group name. Example: `my-log-group`.
        """
        pulumi.set(__self__, "access_key", access_key)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "secret_key", secret_key)
        if log_group_name is not None:
            pulumi.set(__self__, "log_group_name", log_group_name)

    @property
    @pulumi.getter(name="accessKey")
    def access_key(self) -> builtins.str:
        """
        AWS access key. Required permissions are logs:CreateLogGroup, logs:CreateLogStream, logs:PutLogEvents and logs:DescribeLogStreams. Example: `AAAAAAAAAAAAAAAAAAAA`.
        """
        return pulumi.get(self, "access_key")

    @property
    @pulumi.getter
    def region(self) -> builtins.str:
        """
        AWS region. Example: `us-east-1`.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="secretKey")
    def secret_key(self) -> builtins.str:
        """
        AWS secret key. Example: `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`.
        """
        return pulumi.get(self, "secret_key")

    @property
    @pulumi.getter(name="logGroupName")
    def log_group_name(self) -> Optional[builtins.str]:
        """
        AWS CloudWatch log group name. Example: `my-log-group`.
        """
        return pulumi.get(self, "log_group_name")


@pulumi.output_type
class GetServiceIntegrationEndpointExternalAwsCloudwatchMetricsUserConfigResult(dict):
    def __init__(__self__, *,
                 access_key: builtins.str,
                 namespace: builtins.str,
                 region: builtins.str,
                 secret_key: builtins.str):
        """
        :param builtins.str access_key: AWS access key. Required permissions are cloudwatch:PutMetricData. Example: `AAAAAAAAAAAAAAAAAAAA`.
        :param builtins.str namespace: AWS CloudWatch Metrics Namespace. Example: `my-metrics-namespace`.
        :param builtins.str region: AWS region. Example: `us-east-1`.
        :param builtins.str secret_key: AWS secret key. Example: `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`.
        """
        pulumi.set(__self__, "access_key", access_key)
        pulumi.set(__self__, "namespace", namespace)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "secret_key", secret_key)

    @property
    @pulumi.getter(name="accessKey")
    def access_key(self) -> builtins.str:
        """
        AWS access key. Required permissions are cloudwatch:PutMetricData. Example: `AAAAAAAAAAAAAAAAAAAA`.
        """
        return pulumi.get(self, "access_key")

    @property
    @pulumi.getter
    def namespace(self) -> builtins.str:
        """
        AWS CloudWatch Metrics Namespace. Example: `my-metrics-namespace`.
        """
        return pulumi.get(self, "namespace")

    @property
    @pulumi.getter
    def region(self) -> builtins.str:
        """
        AWS region. Example: `us-east-1`.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="secretKey")
    def secret_key(self) -> builtins.str:
        """
        AWS secret key. Example: `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`.
        """
        return pulumi.get(self, "secret_key")


@pulumi.output_type
class GetServiceIntegrationEndpointExternalAwsS3UserConfigResult(dict):
    def __init__(__self__, *,
                 access_key_id: builtins.str,
                 secret_access_key: builtins.str,
                 url: builtins.str):
        """
        :param builtins.str access_key_id: Access Key Id. Example: `AAAAAAAAAAAAAAAAAAA`.
        :param builtins.str secret_access_key: Secret Access Key. Example: `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`.
        :param builtins.str url: S3-compatible bucket URL. Example: `https://mybucket.s3-myregion.amazonaws.com/mydataset/`.
        """
        pulumi.set(__self__, "access_key_id", access_key_id)
        pulumi.set(__self__, "secret_access_key", secret_access_key)
        pulumi.set(__self__, "url", url)

    @property
    @pulumi.getter(name="accessKeyId")
    def access_key_id(self) -> builtins.str:
        """
        Access Key Id. Example: `AAAAAAAAAAAAAAAAAAA`.
        """
        return pulumi.get(self, "access_key_id")

    @property
    @pulumi.getter(name="secretAccessKey")
    def secret_access_key(self) -> builtins.str:
        """
        Secret Access Key. Example: `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`.
        """
        return pulumi.get(self, "secret_access_key")

    @property
    @pulumi.getter
    def url(self) -> builtins.str:
        """
        S3-compatible bucket URL. Example: `https://mybucket.s3-myregion.amazonaws.com/mydataset/`.
        """
        return pulumi.get(self, "url")


@pulumi.output_type
class GetServiceIntegrationEndpointExternalAzureBlobStorageUserConfigResult(dict):
    def __init__(__self__, *,
                 connection_string: builtins.str,
                 container: builtins.str,
                 blob_path: Optional[builtins.str] = None):
        """
        :param builtins.str connection_string: Azure Blob Storage connection string. Example: `AccountName=IDENT;AccountKey=SECRET`.
        :param builtins.str container: Container. Example: `container-dev`.
        :param builtins.str blob_path: Blob path. Example: `path/to/blob/file.csv`.
        """
        pulumi.set(__self__, "connection_string", connection_string)
        pulumi.set(__self__, "container", container)
        if blob_path is not None:
            pulumi.set(__self__, "blob_path", blob_path)

    @property
    @pulumi.getter(name="connectionString")
    def connection_string(self) -> builtins.str:
        """
        Azure Blob Storage connection string. Example: `AccountName=IDENT;AccountKey=SECRET`.
        """
        return pulumi.get(self, "connection_string")

    @property
    @pulumi.getter
    def container(self) -> builtins.str:
        """
        Container. Example: `container-dev`.
        """
        return pulumi.get(self, "container")

    @property
    @pulumi.getter(name="blobPath")
    def blob_path(self) -> Optional[builtins.str]:
        """
        Blob path. Example: `path/to/blob/file.csv`.
        """
        return pulumi.get(self, "blob_path")


@pulumi.output_type
class GetServiceIntegrationEndpointExternalClickhouseUserConfigResult(dict):
    def __init__(__self__, *,
                 host: builtins.str,
                 password: builtins.str,
                 port: builtins.int,
                 username: builtins.str):
        """
        :param builtins.str host: Hostname or IP address of the server. Example: `my.server.com`.
        :param builtins.str password: Password. Example: `jjKk45Nnd`.
        :param builtins.int port: Secure TCP server port. Example: `9440`.
        :param builtins.str username: User name. Example: `default`.
        """
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Hostname or IP address of the server. Example: `my.server.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def password(self) -> builtins.str:
        """
        Password. Example: `jjKk45Nnd`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Secure TCP server port. Example: `9440`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def username(self) -> builtins.str:
        """
        User name. Example: `default`.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class GetServiceIntegrationEndpointExternalElasticsearchLogsUserConfigResult(dict):
    def __init__(__self__, *,
                 index_prefix: builtins.str,
                 url: builtins.str,
                 ca: Optional[builtins.str] = None,
                 index_days_max: Optional[builtins.int] = None,
                 timeout: Optional[builtins.float] = None):
        """
        :param builtins.str index_prefix: Elasticsearch index prefix. Default: `logs`.
        :param builtins.str url: Elasticsearch connection URL. Example: `https://user:passwd@logs.example.com/`.
        :param builtins.str ca: PEM encoded CA certificate. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        :param builtins.int index_days_max: Maximum number of days of logs to keep. Default: `3`.
        :param builtins.float timeout: Elasticsearch request timeout limit. Default: `10.0`.
        """
        pulumi.set(__self__, "index_prefix", index_prefix)
        pulumi.set(__self__, "url", url)
        if ca is not None:
            pulumi.set(__self__, "ca", ca)
        if index_days_max is not None:
            pulumi.set(__self__, "index_days_max", index_days_max)
        if timeout is not None:
            pulumi.set(__self__, "timeout", timeout)

    @property
    @pulumi.getter(name="indexPrefix")
    def index_prefix(self) -> builtins.str:
        """
        Elasticsearch index prefix. Default: `logs`.
        """
        return pulumi.get(self, "index_prefix")

    @property
    @pulumi.getter
    def url(self) -> builtins.str:
        """
        Elasticsearch connection URL. Example: `https://user:passwd@logs.example.com/`.
        """
        return pulumi.get(self, "url")

    @property
    @pulumi.getter
    def ca(self) -> Optional[builtins.str]:
        """
        PEM encoded CA certificate. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "ca")

    @property
    @pulumi.getter(name="indexDaysMax")
    def index_days_max(self) -> Optional[builtins.int]:
        """
        Maximum number of days of logs to keep. Default: `3`.
        """
        return pulumi.get(self, "index_days_max")

    @property
    @pulumi.getter
    def timeout(self) -> Optional[builtins.float]:
        """
        Elasticsearch request timeout limit. Default: `10.0`.
        """
        return pulumi.get(self, "timeout")


@pulumi.output_type
class GetServiceIntegrationEndpointExternalGoogleCloudBigqueryResult(dict):
    def __init__(__self__, *,
                 project_id: builtins.str,
                 service_account_credentials: builtins.str):
        """
        :param builtins.str project_id: GCP project id. Example: `snappy-photon-12345`.
        :param builtins.str service_account_credentials: This is a JSON object with the fields documented in https://cloud.google.com/iam/docs/creating-managing-service-account-keys. Example: `{"type": "service_account", ...`.
        """
        pulumi.set(__self__, "project_id", project_id)
        pulumi.set(__self__, "service_account_credentials", service_account_credentials)

    @property
    @pulumi.getter(name="projectId")
    def project_id(self) -> builtins.str:
        """
        GCP project id. Example: `snappy-photon-12345`.
        """
        return pulumi.get(self, "project_id")

    @property
    @pulumi.getter(name="serviceAccountCredentials")
    def service_account_credentials(self) -> builtins.str:
        """
        This is a JSON object with the fields documented in https://cloud.google.com/iam/docs/creating-managing-service-account-keys. Example: `{"type": "service_account", ...`.
        """
        return pulumi.get(self, "service_account_credentials")


@pulumi.output_type
class GetServiceIntegrationEndpointExternalGoogleCloudLoggingUserConfigResult(dict):
    def __init__(__self__, *,
                 log_id: builtins.str,
                 project_id: builtins.str,
                 service_account_credentials: builtins.str):
        """
        :param builtins.str log_id: Google Cloud Logging log id. Example: `syslog`.
        :param builtins.str project_id: GCP project id. Example: `snappy-photon-12345`.
        :param builtins.str service_account_credentials: This is a JSON object with the fields documented in https://cloud.google.com/iam/docs/creating-managing-service-account-keys. Example: `{"type": "service_account", ...`.
        """
        pulumi.set(__self__, "log_id", log_id)
        pulumi.set(__self__, "project_id", project_id)
        pulumi.set(__self__, "service_account_credentials", service_account_credentials)

    @property
    @pulumi.getter(name="logId")
    def log_id(self) -> builtins.str:
        """
        Google Cloud Logging log id. Example: `syslog`.
        """
        return pulumi.get(self, "log_id")

    @property
    @pulumi.getter(name="projectId")
    def project_id(self) -> builtins.str:
        """
        GCP project id. Example: `snappy-photon-12345`.
        """
        return pulumi.get(self, "project_id")

    @property
    @pulumi.getter(name="serviceAccountCredentials")
    def service_account_credentials(self) -> builtins.str:
        """
        This is a JSON object with the fields documented in https://cloud.google.com/iam/docs/creating-managing-service-account-keys. Example: `{"type": "service_account", ...`.
        """
        return pulumi.get(self, "service_account_credentials")


@pulumi.output_type
class GetServiceIntegrationEndpointExternalKafkaUserConfigResult(dict):
    def __init__(__self__, *,
                 bootstrap_servers: builtins.str,
                 security_protocol: builtins.str,
                 sasl_mechanism: Optional[builtins.str] = None,
                 sasl_plain_password: Optional[builtins.str] = None,
                 sasl_plain_username: Optional[builtins.str] = None,
                 ssl_ca_cert: Optional[builtins.str] = None,
                 ssl_client_cert: Optional[builtins.str] = None,
                 ssl_client_key: Optional[builtins.str] = None,
                 ssl_endpoint_identification_algorithm: Optional[builtins.str] = None):
        """
        :param builtins.str bootstrap_servers: Bootstrap servers. Example: `10.0.0.1:9092,10.0.0.2:9092`.
        :param builtins.str security_protocol: Enum: `PLAINTEXT`, `SASL_PLAINTEXT`, `SASL_SSL`, `SSL`. Security protocol.
        :param builtins.str sasl_mechanism: Enum: `PLAIN`, `SCRAM-SHA-256`, `SCRAM-SHA-512`. SASL mechanism used for connections to the Kafka server.
        :param builtins.str sasl_plain_password: Password for SASL PLAIN mechanism in the Kafka server. Example: `admin`.
        :param builtins.str sasl_plain_username: Username for SASL PLAIN mechanism in the Kafka server. Example: `admin`.
        :param builtins.str ssl_ca_cert: PEM-encoded CA certificate. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        :param builtins.str ssl_client_cert: PEM-encoded client certificate. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        :param builtins.str ssl_client_key: PEM-encoded client key. Example: `-----BEGIN PRIVATE KEY-----
               ...
               -----END PRIVATE KEY-----
               `.
        :param builtins.str ssl_endpoint_identification_algorithm: Enum: `https`. The endpoint identification algorithm to validate server hostname using server certificate.
        """
        pulumi.set(__self__, "bootstrap_servers", bootstrap_servers)
        pulumi.set(__self__, "security_protocol", security_protocol)
        if sasl_mechanism is not None:
            pulumi.set(__self__, "sasl_mechanism", sasl_mechanism)
        if sasl_plain_password is not None:
            pulumi.set(__self__, "sasl_plain_password", sasl_plain_password)
        if sasl_plain_username is not None:
            pulumi.set(__self__, "sasl_plain_username", sasl_plain_username)
        if ssl_ca_cert is not None:
            pulumi.set(__self__, "ssl_ca_cert", ssl_ca_cert)
        if ssl_client_cert is not None:
            pulumi.set(__self__, "ssl_client_cert", ssl_client_cert)
        if ssl_client_key is not None:
            pulumi.set(__self__, "ssl_client_key", ssl_client_key)
        if ssl_endpoint_identification_algorithm is not None:
            pulumi.set(__self__, "ssl_endpoint_identification_algorithm", ssl_endpoint_identification_algorithm)

    @property
    @pulumi.getter(name="bootstrapServers")
    def bootstrap_servers(self) -> builtins.str:
        """
        Bootstrap servers. Example: `10.0.0.1:9092,10.0.0.2:9092`.
        """
        return pulumi.get(self, "bootstrap_servers")

    @property
    @pulumi.getter(name="securityProtocol")
    def security_protocol(self) -> builtins.str:
        """
        Enum: `PLAINTEXT`, `SASL_PLAINTEXT`, `SASL_SSL`, `SSL`. Security protocol.
        """
        return pulumi.get(self, "security_protocol")

    @property
    @pulumi.getter(name="saslMechanism")
    def sasl_mechanism(self) -> Optional[builtins.str]:
        """
        Enum: `PLAIN`, `SCRAM-SHA-256`, `SCRAM-SHA-512`. SASL mechanism used for connections to the Kafka server.
        """
        return pulumi.get(self, "sasl_mechanism")

    @property
    @pulumi.getter(name="saslPlainPassword")
    def sasl_plain_password(self) -> Optional[builtins.str]:
        """
        Password for SASL PLAIN mechanism in the Kafka server. Example: `admin`.
        """
        return pulumi.get(self, "sasl_plain_password")

    @property
    @pulumi.getter(name="saslPlainUsername")
    def sasl_plain_username(self) -> Optional[builtins.str]:
        """
        Username for SASL PLAIN mechanism in the Kafka server. Example: `admin`.
        """
        return pulumi.get(self, "sasl_plain_username")

    @property
    @pulumi.getter(name="sslCaCert")
    def ssl_ca_cert(self) -> Optional[builtins.str]:
        """
        PEM-encoded CA certificate. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "ssl_ca_cert")

    @property
    @pulumi.getter(name="sslClientCert")
    def ssl_client_cert(self) -> Optional[builtins.str]:
        """
        PEM-encoded client certificate. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "ssl_client_cert")

    @property
    @pulumi.getter(name="sslClientKey")
    def ssl_client_key(self) -> Optional[builtins.str]:
        """
        PEM-encoded client key. Example: `-----BEGIN PRIVATE KEY-----
        ...
        -----END PRIVATE KEY-----
        `.
        """
        return pulumi.get(self, "ssl_client_key")

    @property
    @pulumi.getter(name="sslEndpointIdentificationAlgorithm")
    def ssl_endpoint_identification_algorithm(self) -> Optional[builtins.str]:
        """
        Enum: `https`. The endpoint identification algorithm to validate server hostname using server certificate.
        """
        return pulumi.get(self, "ssl_endpoint_identification_algorithm")


@pulumi.output_type
class GetServiceIntegrationEndpointExternalMysqlUserConfigResult(dict):
    def __init__(__self__, *,
                 host: builtins.str,
                 password: builtins.str,
                 port: builtins.int,
                 username: builtins.str,
                 ssl_mode: Optional[builtins.str] = None,
                 ssl_root_cert: Optional[builtins.str] = None):
        """
        :param builtins.str host: Hostname or IP address of the server. Example: `my.server.com`.
        :param builtins.str password: Password. Example: `jjKk45Nnd`.
        :param builtins.int port: Port number of the server. Example: `5432`.
        :param builtins.str username: User name. Example: `myname`.
        :param builtins.str ssl_mode: Enum: `verify-full`. SSL Mode. Default: `verify-full`.
        :param builtins.str ssl_root_cert: SSL Root Cert. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        """
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "username", username)
        if ssl_mode is not None:
            pulumi.set(__self__, "ssl_mode", ssl_mode)
        if ssl_root_cert is not None:
            pulumi.set(__self__, "ssl_root_cert", ssl_root_cert)

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Hostname or IP address of the server. Example: `my.server.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def password(self) -> builtins.str:
        """
        Password. Example: `jjKk45Nnd`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number of the server. Example: `5432`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def username(self) -> builtins.str:
        """
        User name. Example: `myname`.
        """
        return pulumi.get(self, "username")

    @property
    @pulumi.getter(name="sslMode")
    def ssl_mode(self) -> Optional[builtins.str]:
        """
        Enum: `verify-full`. SSL Mode. Default: `verify-full`.
        """
        return pulumi.get(self, "ssl_mode")

    @property
    @pulumi.getter(name="sslRootCert")
    def ssl_root_cert(self) -> Optional[builtins.str]:
        """
        SSL Root Cert. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "ssl_root_cert")


@pulumi.output_type
class GetServiceIntegrationEndpointExternalOpensearchLogsUserConfigResult(dict):
    def __init__(__self__, *,
                 index_prefix: builtins.str,
                 url: builtins.str,
                 ca: Optional[builtins.str] = None,
                 index_days_max: Optional[builtins.int] = None,
                 timeout: Optional[builtins.float] = None):
        """
        :param builtins.str index_prefix: OpenSearch index prefix. Default: `logs`.
        :param builtins.str url: OpenSearch connection URL. Example: `https://user:passwd@logs.example.com/`.
        :param builtins.str ca: PEM encoded CA certificate. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        :param builtins.int index_days_max: Maximum number of days of logs to keep. Default: `3`.
        :param builtins.float timeout: OpenSearch request timeout limit. Default: `10.0`.
        """
        pulumi.set(__self__, "index_prefix", index_prefix)
        pulumi.set(__self__, "url", url)
        if ca is not None:
            pulumi.set(__self__, "ca", ca)
        if index_days_max is not None:
            pulumi.set(__self__, "index_days_max", index_days_max)
        if timeout is not None:
            pulumi.set(__self__, "timeout", timeout)

    @property
    @pulumi.getter(name="indexPrefix")
    def index_prefix(self) -> builtins.str:
        """
        OpenSearch index prefix. Default: `logs`.
        """
        return pulumi.get(self, "index_prefix")

    @property
    @pulumi.getter
    def url(self) -> builtins.str:
        """
        OpenSearch connection URL. Example: `https://user:passwd@logs.example.com/`.
        """
        return pulumi.get(self, "url")

    @property
    @pulumi.getter
    def ca(self) -> Optional[builtins.str]:
        """
        PEM encoded CA certificate. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "ca")

    @property
    @pulumi.getter(name="indexDaysMax")
    def index_days_max(self) -> Optional[builtins.int]:
        """
        Maximum number of days of logs to keep. Default: `3`.
        """
        return pulumi.get(self, "index_days_max")

    @property
    @pulumi.getter
    def timeout(self) -> Optional[builtins.float]:
        """
        OpenSearch request timeout limit. Default: `10.0`.
        """
        return pulumi.get(self, "timeout")


@pulumi.output_type
class GetServiceIntegrationEndpointExternalPostgresqlResult(dict):
    def __init__(__self__, *,
                 host: builtins.str,
                 port: builtins.int,
                 username: builtins.str,
                 default_database: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 ssl_client_certificate: Optional[builtins.str] = None,
                 ssl_client_key: Optional[builtins.str] = None,
                 ssl_mode: Optional[builtins.str] = None,
                 ssl_root_cert: Optional[builtins.str] = None):
        """
        :param builtins.str host: Hostname or IP address of the server. Example: `my.server.com`.
        :param builtins.int port: Port number of the server. Example: `5432`.
        :param builtins.str username: User name. Example: `myname`.
        :param builtins.str default_database: Default database. Example: `testdb`.
        :param builtins.str password: Password. Example: `jjKk45Nnd`.
        :param builtins.str ssl_client_certificate: Client certificate. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        :param builtins.str ssl_client_key: Client key. Example: `-----BEGIN PRIVATE KEY-----
               ...
               -----END PRIVATE KEY-----`.
        :param builtins.str ssl_mode: Enum: `allow`, `disable`, `prefer`, `require`, `verify-ca`, `verify-full`. SSL mode to use for the connection.  Please note that Aiven requires TLS for all connections to external PostgreSQL services. Default: `verify-full`.
        :param builtins.str ssl_root_cert: SSL Root Cert. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        """
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "username", username)
        if default_database is not None:
            pulumi.set(__self__, "default_database", default_database)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssl_client_certificate is not None:
            pulumi.set(__self__, "ssl_client_certificate", ssl_client_certificate)
        if ssl_client_key is not None:
            pulumi.set(__self__, "ssl_client_key", ssl_client_key)
        if ssl_mode is not None:
            pulumi.set(__self__, "ssl_mode", ssl_mode)
        if ssl_root_cert is not None:
            pulumi.set(__self__, "ssl_root_cert", ssl_root_cert)

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Hostname or IP address of the server. Example: `my.server.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number of the server. Example: `5432`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def username(self) -> builtins.str:
        """
        User name. Example: `myname`.
        """
        return pulumi.get(self, "username")

    @property
    @pulumi.getter(name="defaultDatabase")
    def default_database(self) -> Optional[builtins.str]:
        """
        Default database. Example: `testdb`.
        """
        return pulumi.get(self, "default_database")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        Password. Example: `jjKk45Nnd`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter(name="sslClientCertificate")
    def ssl_client_certificate(self) -> Optional[builtins.str]:
        """
        Client certificate. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "ssl_client_certificate")

    @property
    @pulumi.getter(name="sslClientKey")
    def ssl_client_key(self) -> Optional[builtins.str]:
        """
        Client key. Example: `-----BEGIN PRIVATE KEY-----
        ...
        -----END PRIVATE KEY-----`.
        """
        return pulumi.get(self, "ssl_client_key")

    @property
    @pulumi.getter(name="sslMode")
    def ssl_mode(self) -> Optional[builtins.str]:
        """
        Enum: `allow`, `disable`, `prefer`, `require`, `verify-ca`, `verify-full`. SSL mode to use for the connection.  Please note that Aiven requires TLS for all connections to external PostgreSQL services. Default: `verify-full`.
        """
        return pulumi.get(self, "ssl_mode")

    @property
    @pulumi.getter(name="sslRootCert")
    def ssl_root_cert(self) -> Optional[builtins.str]:
        """
        SSL Root Cert. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "ssl_root_cert")


@pulumi.output_type
class GetServiceIntegrationEndpointExternalPrometheusUserConfigResult(dict):
    def __init__(__self__, *,
                 basic_auth_password: Optional[builtins.str] = None,
                 basic_auth_username: Optional[builtins.str] = None,
                 service_uri: Optional[builtins.str] = None):
        """
        :param builtins.str basic_auth_password: Prometheus basic authentication password. Example: `fhyFNBjj3R`.
        :param builtins.str basic_auth_username: Prometheus basic authentication username. Example: `prom4851`.
        :param builtins.str service_uri: Prometheus enabled write endpoint. Example: `https://write.example.com/`.
        """
        if basic_auth_password is not None:
            pulumi.set(__self__, "basic_auth_password", basic_auth_password)
        if basic_auth_username is not None:
            pulumi.set(__self__, "basic_auth_username", basic_auth_username)
        if service_uri is not None:
            pulumi.set(__self__, "service_uri", service_uri)

    @property
    @pulumi.getter(name="basicAuthPassword")
    def basic_auth_password(self) -> Optional[builtins.str]:
        """
        Prometheus basic authentication password. Example: `fhyFNBjj3R`.
        """
        return pulumi.get(self, "basic_auth_password")

    @property
    @pulumi.getter(name="basicAuthUsername")
    def basic_auth_username(self) -> Optional[builtins.str]:
        """
        Prometheus basic authentication username. Example: `prom4851`.
        """
        return pulumi.get(self, "basic_auth_username")

    @property
    @pulumi.getter(name="serviceUri")
    def service_uri(self) -> Optional[builtins.str]:
        """
        Prometheus enabled write endpoint. Example: `https://write.example.com/`.
        """
        return pulumi.get(self, "service_uri")


@pulumi.output_type
class GetServiceIntegrationEndpointExternalSchemaRegistryUserConfigResult(dict):
    def __init__(__self__, *,
                 authentication: builtins.str,
                 url: builtins.str,
                 basic_auth_password: Optional[builtins.str] = None,
                 basic_auth_username: Optional[builtins.str] = None):
        """
        :param builtins.str authentication: Enum: `basic`, `none`. Authentication method.
        :param builtins.str url: Schema Registry URL. Example: `https://schema-registry.kafka.company.com:28419`.
        :param builtins.str basic_auth_password: Basic authentication password. Example: `Zm9vYg==`.
        :param builtins.str basic_auth_username: Basic authentication user name. Example: `avnadmin`.
        """
        pulumi.set(__self__, "authentication", authentication)
        pulumi.set(__self__, "url", url)
        if basic_auth_password is not None:
            pulumi.set(__self__, "basic_auth_password", basic_auth_password)
        if basic_auth_username is not None:
            pulumi.set(__self__, "basic_auth_username", basic_auth_username)

    @property
    @pulumi.getter
    def authentication(self) -> builtins.str:
        """
        Enum: `basic`, `none`. Authentication method.
        """
        return pulumi.get(self, "authentication")

    @property
    @pulumi.getter
    def url(self) -> builtins.str:
        """
        Schema Registry URL. Example: `https://schema-registry.kafka.company.com:28419`.
        """
        return pulumi.get(self, "url")

    @property
    @pulumi.getter(name="basicAuthPassword")
    def basic_auth_password(self) -> Optional[builtins.str]:
        """
        Basic authentication password. Example: `Zm9vYg==`.
        """
        return pulumi.get(self, "basic_auth_password")

    @property
    @pulumi.getter(name="basicAuthUsername")
    def basic_auth_username(self) -> Optional[builtins.str]:
        """
        Basic authentication user name. Example: `avnadmin`.
        """
        return pulumi.get(self, "basic_auth_username")


@pulumi.output_type
class GetServiceIntegrationEndpointJolokiaUserConfigResult(dict):
    def __init__(__self__, *,
                 basic_auth_password: Optional[builtins.str] = None,
                 basic_auth_username: Optional[builtins.str] = None):
        """
        :param builtins.str basic_auth_password: Jolokia basic authentication password. Example: `yhfBNFii4C`.
        :param builtins.str basic_auth_username: Jolokia basic authentication username. Example: `jol48k51`.
        """
        if basic_auth_password is not None:
            pulumi.set(__self__, "basic_auth_password", basic_auth_password)
        if basic_auth_username is not None:
            pulumi.set(__self__, "basic_auth_username", basic_auth_username)

    @property
    @pulumi.getter(name="basicAuthPassword")
    def basic_auth_password(self) -> Optional[builtins.str]:
        """
        Jolokia basic authentication password. Example: `yhfBNFii4C`.
        """
        return pulumi.get(self, "basic_auth_password")

    @property
    @pulumi.getter(name="basicAuthUsername")
    def basic_auth_username(self) -> Optional[builtins.str]:
        """
        Jolokia basic authentication username. Example: `jol48k51`.
        """
        return pulumi.get(self, "basic_auth_username")


@pulumi.output_type
class GetServiceIntegrationEndpointPrometheusUserConfigResult(dict):
    def __init__(__self__, *,
                 basic_auth_password: Optional[builtins.str] = None,
                 basic_auth_username: Optional[builtins.str] = None):
        """
        :param builtins.str basic_auth_password: Prometheus basic authentication password. Example: `fhyFNBjj3R`.
        :param builtins.str basic_auth_username: Prometheus basic authentication username. Example: `prom4851`.
        """
        if basic_auth_password is not None:
            pulumi.set(__self__, "basic_auth_password", basic_auth_password)
        if basic_auth_username is not None:
            pulumi.set(__self__, "basic_auth_username", basic_auth_username)

    @property
    @pulumi.getter(name="basicAuthPassword")
    def basic_auth_password(self) -> Optional[builtins.str]:
        """
        Prometheus basic authentication password. Example: `fhyFNBjj3R`.
        """
        return pulumi.get(self, "basic_auth_password")

    @property
    @pulumi.getter(name="basicAuthUsername")
    def basic_auth_username(self) -> Optional[builtins.str]:
        """
        Prometheus basic authentication username. Example: `prom4851`.
        """
        return pulumi.get(self, "basic_auth_username")


@pulumi.output_type
class GetServiceIntegrationEndpointRsyslogUserConfigResult(dict):
    def __init__(__self__, *,
                 format: builtins.str,
                 port: builtins.int,
                 server: builtins.str,
                 tls: builtins.bool,
                 ca: Optional[builtins.str] = None,
                 cert: Optional[builtins.str] = None,
                 key: Optional[builtins.str] = None,
                 logline: Optional[builtins.str] = None,
                 max_message_size: Optional[builtins.int] = None,
                 sd: Optional[builtins.str] = None):
        """
        :param builtins.str format: Enum: `custom`, `rfc3164`, `rfc5424`. Message format. Default: `rfc5424`.
        :param builtins.int port: Rsyslog server port. Default: `514`.
        :param builtins.str server: Rsyslog server IP address or hostname. Example: `logs.example.com`.
        :param builtins.bool tls: Require TLS. Default: `true`.
        :param builtins.str ca: PEM encoded CA certificate. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        :param builtins.str cert: PEM encoded client certificate. Example: `-----BEGIN CERTIFICATE-----
               ...
               -----END CERTIFICATE-----
               `.
        :param builtins.str key: PEM encoded client key. Example: `-----BEGIN PRIVATE KEY-----
               ...
               -----END PRIVATE KEY-----
               `.
        :param builtins.str logline: Custom syslog message format. Example: `<%pri%>%timestamp:::date-rfc3339% %HOSTNAME% %app-name% %msg%`.
        :param builtins.int max_message_size: Rsyslog max message size. Default: `8192`.
        :param builtins.str sd: Structured data block for log message. Example: `TOKEN tag="LiteralValue"`.
        """
        pulumi.set(__self__, "format", format)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "tls", tls)
        if ca is not None:
            pulumi.set(__self__, "ca", ca)
        if cert is not None:
            pulumi.set(__self__, "cert", cert)
        if key is not None:
            pulumi.set(__self__, "key", key)
        if logline is not None:
            pulumi.set(__self__, "logline", logline)
        if max_message_size is not None:
            pulumi.set(__self__, "max_message_size", max_message_size)
        if sd is not None:
            pulumi.set(__self__, "sd", sd)

    @property
    @pulumi.getter
    def format(self) -> builtins.str:
        """
        Enum: `custom`, `rfc3164`, `rfc5424`. Message format. Default: `rfc5424`.
        """
        return pulumi.get(self, "format")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Rsyslog server port. Default: `514`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def server(self) -> builtins.str:
        """
        Rsyslog server IP address or hostname. Example: `logs.example.com`.
        """
        return pulumi.get(self, "server")

    @property
    @pulumi.getter
    def tls(self) -> builtins.bool:
        """
        Require TLS. Default: `true`.
        """
        return pulumi.get(self, "tls")

    @property
    @pulumi.getter
    def ca(self) -> Optional[builtins.str]:
        """
        PEM encoded CA certificate. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "ca")

    @property
    @pulumi.getter
    def cert(self) -> Optional[builtins.str]:
        """
        PEM encoded client certificate. Example: `-----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        `.
        """
        return pulumi.get(self, "cert")

    @property
    @pulumi.getter
    def key(self) -> Optional[builtins.str]:
        """
        PEM encoded client key. Example: `-----BEGIN PRIVATE KEY-----
        ...
        -----END PRIVATE KEY-----
        `.
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def logline(self) -> Optional[builtins.str]:
        """
        Custom syslog message format. Example: `<%pri%>%timestamp:::date-rfc3339% %HOSTNAME% %app-name% %msg%`.
        """
        return pulumi.get(self, "logline")

    @property
    @pulumi.getter(name="maxMessageSize")
    def max_message_size(self) -> Optional[builtins.int]:
        """
        Rsyslog max message size. Default: `8192`.
        """
        return pulumi.get(self, "max_message_size")

    @property
    @pulumi.getter
    def sd(self) -> Optional[builtins.str]:
        """
        Structured data block for log message. Example: `TOKEN tag="LiteralValue"`.
        """
        return pulumi.get(self, "sd")


@pulumi.output_type
class GetServiceIntegrationExternalAwsCloudwatchLogsUserConfigResult(dict):
    def __init__(__self__, *,
                 selected_log_fields: Optional[Sequence[builtins.str]] = None):
        """
        :param Sequence[builtins.str] selected_log_fields: The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        if selected_log_fields is not None:
            pulumi.set(__self__, "selected_log_fields", selected_log_fields)

    @property
    @pulumi.getter(name="selectedLogFields")
    def selected_log_fields(self) -> Optional[Sequence[builtins.str]]:
        """
        The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        return pulumi.get(self, "selected_log_fields")


@pulumi.output_type
class GetServiceIntegrationExternalAwsCloudwatchMetricsUserConfigResult(dict):
    def __init__(__self__, *,
                 dropped_metrics: Optional[Sequence['outputs.GetServiceIntegrationExternalAwsCloudwatchMetricsUserConfigDroppedMetricResult']] = None,
                 extra_metrics: Optional[Sequence['outputs.GetServiceIntegrationExternalAwsCloudwatchMetricsUserConfigExtraMetricResult']] = None):
        """
        :param Sequence['GetServiceIntegrationExternalAwsCloudwatchMetricsUserConfigDroppedMetricArgs'] dropped_metrics: Metrics to not send to AWS CloudWatch (takes precedence over extra_metrics)
        :param Sequence['GetServiceIntegrationExternalAwsCloudwatchMetricsUserConfigExtraMetricArgs'] extra_metrics: Metrics to allow through to AWS CloudWatch (in addition to default metrics)
        """
        if dropped_metrics is not None:
            pulumi.set(__self__, "dropped_metrics", dropped_metrics)
        if extra_metrics is not None:
            pulumi.set(__self__, "extra_metrics", extra_metrics)

    @property
    @pulumi.getter(name="droppedMetrics")
    def dropped_metrics(self) -> Optional[Sequence['outputs.GetServiceIntegrationExternalAwsCloudwatchMetricsUserConfigDroppedMetricResult']]:
        """
        Metrics to not send to AWS CloudWatch (takes precedence over extra_metrics)
        """
        return pulumi.get(self, "dropped_metrics")

    @property
    @pulumi.getter(name="extraMetrics")
    def extra_metrics(self) -> Optional[Sequence['outputs.GetServiceIntegrationExternalAwsCloudwatchMetricsUserConfigExtraMetricResult']]:
        """
        Metrics to allow through to AWS CloudWatch (in addition to default metrics)
        """
        return pulumi.get(self, "extra_metrics")


@pulumi.output_type
class GetServiceIntegrationExternalAwsCloudwatchMetricsUserConfigDroppedMetricResult(dict):
    def __init__(__self__, *,
                 field: builtins.str,
                 metric: builtins.str):
        """
        :param builtins.str field: Identifier of a value in the metric. Example: `used`.
        :param builtins.str metric: Identifier of the metric. Example: `java.lang:Memory`.
        """
        pulumi.set(__self__, "field", field)
        pulumi.set(__self__, "metric", metric)

    @property
    @pulumi.getter
    def field(self) -> builtins.str:
        """
        Identifier of a value in the metric. Example: `used`.
        """
        return pulumi.get(self, "field")

    @property
    @pulumi.getter
    def metric(self) -> builtins.str:
        """
        Identifier of the metric. Example: `java.lang:Memory`.
        """
        return pulumi.get(self, "metric")


@pulumi.output_type
class GetServiceIntegrationExternalAwsCloudwatchMetricsUserConfigExtraMetricResult(dict):
    def __init__(__self__, *,
                 field: builtins.str,
                 metric: builtins.str):
        """
        :param builtins.str field: Identifier of a value in the metric. Example: `used`.
        :param builtins.str metric: Identifier of the metric. Example: `java.lang:Memory`.
        """
        pulumi.set(__self__, "field", field)
        pulumi.set(__self__, "metric", metric)

    @property
    @pulumi.getter
    def field(self) -> builtins.str:
        """
        Identifier of a value in the metric. Example: `used`.
        """
        return pulumi.get(self, "field")

    @property
    @pulumi.getter
    def metric(self) -> builtins.str:
        """
        Identifier of the metric. Example: `java.lang:Memory`.
        """
        return pulumi.get(self, "metric")


@pulumi.output_type
class GetServiceIntegrationExternalElasticsearchLogsUserConfigResult(dict):
    def __init__(__self__, *,
                 selected_log_fields: Optional[Sequence[builtins.str]] = None):
        """
        :param Sequence[builtins.str] selected_log_fields: The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        if selected_log_fields is not None:
            pulumi.set(__self__, "selected_log_fields", selected_log_fields)

    @property
    @pulumi.getter(name="selectedLogFields")
    def selected_log_fields(self) -> Optional[Sequence[builtins.str]]:
        """
        The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        return pulumi.get(self, "selected_log_fields")


@pulumi.output_type
class GetServiceIntegrationExternalOpensearchLogsUserConfigResult(dict):
    def __init__(__self__, *,
                 selected_log_fields: Optional[Sequence[builtins.str]] = None):
        """
        :param Sequence[builtins.str] selected_log_fields: The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        if selected_log_fields is not None:
            pulumi.set(__self__, "selected_log_fields", selected_log_fields)

    @property
    @pulumi.getter(name="selectedLogFields")
    def selected_log_fields(self) -> Optional[Sequence[builtins.str]]:
        """
        The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        return pulumi.get(self, "selected_log_fields")


@pulumi.output_type
class GetServiceIntegrationFlinkExternalPostgresqlUserConfigResult(dict):
    def __init__(__self__, *,
                 stringtype: Optional[builtins.str] = None):
        """
        :param builtins.str stringtype: Enum: `unspecified`. If stringtype is set to unspecified, parameters will be sent to the server as untyped values.
        """
        if stringtype is not None:
            pulumi.set(__self__, "stringtype", stringtype)

    @property
    @pulumi.getter
    def stringtype(self) -> Optional[builtins.str]:
        """
        Enum: `unspecified`. If stringtype is set to unspecified, parameters will be sent to the server as untyped values.
        """
        return pulumi.get(self, "stringtype")


@pulumi.output_type
class GetServiceIntegrationKafkaConnectUserConfigResult(dict):
    def __init__(__self__, *,
                 kafka_connect: Optional['outputs.GetServiceIntegrationKafkaConnectUserConfigKafkaConnectResult'] = None):
        """
        :param 'GetServiceIntegrationKafkaConnectUserConfigKafkaConnectArgs' kafka_connect: Kafka Connect service configuration values
        """
        if kafka_connect is not None:
            pulumi.set(__self__, "kafka_connect", kafka_connect)

    @property
    @pulumi.getter(name="kafkaConnect")
    def kafka_connect(self) -> Optional['outputs.GetServiceIntegrationKafkaConnectUserConfigKafkaConnectResult']:
        """
        Kafka Connect service configuration values
        """
        return pulumi.get(self, "kafka_connect")


@pulumi.output_type
class GetServiceIntegrationKafkaConnectUserConfigKafkaConnectResult(dict):
    def __init__(__self__, *,
                 config_storage_topic: Optional[builtins.str] = None,
                 group_id: Optional[builtins.str] = None,
                 offset_storage_topic: Optional[builtins.str] = None,
                 status_storage_topic: Optional[builtins.str] = None):
        """
        :param builtins.str config_storage_topic: The name of the topic where connector and task configuration data are stored.This must be the same for all workers with the same group_id. Example: `__connect_configs`.
        :param builtins.str group_id: A unique string that identifies the Connect cluster group this worker belongs to. Example: `connect`.
        :param builtins.str offset_storage_topic: The name of the topic where connector and task configuration offsets are stored.This must be the same for all workers with the same group_id. Example: `__connect_offsets`.
        :param builtins.str status_storage_topic: The name of the topic where connector and task configuration status updates are stored.This must be the same for all workers with the same group_id. Example: `__connect_status`.
        """
        if config_storage_topic is not None:
            pulumi.set(__self__, "config_storage_topic", config_storage_topic)
        if group_id is not None:
            pulumi.set(__self__, "group_id", group_id)
        if offset_storage_topic is not None:
            pulumi.set(__self__, "offset_storage_topic", offset_storage_topic)
        if status_storage_topic is not None:
            pulumi.set(__self__, "status_storage_topic", status_storage_topic)

    @property
    @pulumi.getter(name="configStorageTopic")
    def config_storage_topic(self) -> Optional[builtins.str]:
        """
        The name of the topic where connector and task configuration data are stored.This must be the same for all workers with the same group_id. Example: `__connect_configs`.
        """
        return pulumi.get(self, "config_storage_topic")

    @property
    @pulumi.getter(name="groupId")
    def group_id(self) -> Optional[builtins.str]:
        """
        A unique string that identifies the Connect cluster group this worker belongs to. Example: `connect`.
        """
        return pulumi.get(self, "group_id")

    @property
    @pulumi.getter(name="offsetStorageTopic")
    def offset_storage_topic(self) -> Optional[builtins.str]:
        """
        The name of the topic where connector and task configuration offsets are stored.This must be the same for all workers with the same group_id. Example: `__connect_offsets`.
        """
        return pulumi.get(self, "offset_storage_topic")

    @property
    @pulumi.getter(name="statusStorageTopic")
    def status_storage_topic(self) -> Optional[builtins.str]:
        """
        The name of the topic where connector and task configuration status updates are stored.This must be the same for all workers with the same group_id. Example: `__connect_status`.
        """
        return pulumi.get(self, "status_storage_topic")


@pulumi.output_type
class GetServiceIntegrationKafkaLogsUserConfigResult(dict):
    def __init__(__self__, *,
                 kafka_topic: builtins.str,
                 selected_log_fields: Optional[Sequence[builtins.str]] = None):
        """
        :param builtins.str kafka_topic: Topic name. Example: `mytopic`.
        :param Sequence[builtins.str] selected_log_fields: The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        pulumi.set(__self__, "kafka_topic", kafka_topic)
        if selected_log_fields is not None:
            pulumi.set(__self__, "selected_log_fields", selected_log_fields)

    @property
    @pulumi.getter(name="kafkaTopic")
    def kafka_topic(self) -> builtins.str:
        """
        Topic name. Example: `mytopic`.
        """
        return pulumi.get(self, "kafka_topic")

    @property
    @pulumi.getter(name="selectedLogFields")
    def selected_log_fields(self) -> Optional[Sequence[builtins.str]]:
        """
        The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        return pulumi.get(self, "selected_log_fields")


@pulumi.output_type
class GetServiceIntegrationKafkaMirrormakerUserConfigResult(dict):
    def __init__(__self__, *,
                 cluster_alias: Optional[builtins.str] = None,
                 kafka_mirrormaker: Optional['outputs.GetServiceIntegrationKafkaMirrormakerUserConfigKafkaMirrormakerResult'] = None):
        """
        :param builtins.str cluster_alias: The alias under which the Kafka cluster is known to MirrorMaker. Can contain the following symbols: ASCII alphanumerics, `.`, `_`, and `-`. Example: `kafka-abc`.
        :param 'GetServiceIntegrationKafkaMirrormakerUserConfigKafkaMirrormakerArgs' kafka_mirrormaker: Kafka MirrorMaker configuration values
        """
        if cluster_alias is not None:
            pulumi.set(__self__, "cluster_alias", cluster_alias)
        if kafka_mirrormaker is not None:
            pulumi.set(__self__, "kafka_mirrormaker", kafka_mirrormaker)

    @property
    @pulumi.getter(name="clusterAlias")
    def cluster_alias(self) -> Optional[builtins.str]:
        """
        The alias under which the Kafka cluster is known to MirrorMaker. Can contain the following symbols: ASCII alphanumerics, `.`, `_`, and `-`. Example: `kafka-abc`.
        """
        return pulumi.get(self, "cluster_alias")

    @property
    @pulumi.getter(name="kafkaMirrormaker")
    def kafka_mirrormaker(self) -> Optional['outputs.GetServiceIntegrationKafkaMirrormakerUserConfigKafkaMirrormakerResult']:
        """
        Kafka MirrorMaker configuration values
        """
        return pulumi.get(self, "kafka_mirrormaker")


@pulumi.output_type
class GetServiceIntegrationKafkaMirrormakerUserConfigKafkaMirrormakerResult(dict):
    def __init__(__self__, *,
                 consumer_auto_offset_reset: Optional[builtins.str] = None,
                 consumer_fetch_min_bytes: Optional[builtins.int] = None,
                 consumer_max_poll_records: Optional[builtins.int] = None,
                 producer_batch_size: Optional[builtins.int] = None,
                 producer_buffer_memory: Optional[builtins.int] = None,
                 producer_compression_type: Optional[builtins.str] = None,
                 producer_linger_ms: Optional[builtins.int] = None,
                 producer_max_request_size: Optional[builtins.int] = None):
        """
        :param builtins.str consumer_auto_offset_reset: Enum: `earliest`, `latest`. Set where consumer starts to consume data. Value `earliest`: Start replication from the earliest offset. Value `latest`: Start replication from the latest offset. Default is `earliest`.
        :param builtins.int consumer_fetch_min_bytes: The minimum amount of data the server should return for a fetch request. Example: `1024`.
        :param builtins.int consumer_max_poll_records: Set consumer max.poll.records. The default is 500. Example: `500`.
        :param builtins.int producer_batch_size: The batch size in bytes producer will attempt to collect before publishing to broker. Example: `1024`.
        :param builtins.int producer_buffer_memory: The amount of bytes producer can use for buffering data before publishing to broker. Example: `8388608`.
        :param builtins.str producer_compression_type: Enum: `gzip`, `lz4`, `none`, `snappy`, `zstd`. Specify the default compression type for producers. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `none` which is the default and equivalent to no compression.
        :param builtins.int producer_linger_ms: The linger time (ms) for waiting new data to arrive for publishing. Example: `100`.
        :param builtins.int producer_max_request_size: The maximum request size in bytes. Example: `1048576`.
        """
        if consumer_auto_offset_reset is not None:
            pulumi.set(__self__, "consumer_auto_offset_reset", consumer_auto_offset_reset)
        if consumer_fetch_min_bytes is not None:
            pulumi.set(__self__, "consumer_fetch_min_bytes", consumer_fetch_min_bytes)
        if consumer_max_poll_records is not None:
            pulumi.set(__self__, "consumer_max_poll_records", consumer_max_poll_records)
        if producer_batch_size is not None:
            pulumi.set(__self__, "producer_batch_size", producer_batch_size)
        if producer_buffer_memory is not None:
            pulumi.set(__self__, "producer_buffer_memory", producer_buffer_memory)
        if producer_compression_type is not None:
            pulumi.set(__self__, "producer_compression_type", producer_compression_type)
        if producer_linger_ms is not None:
            pulumi.set(__self__, "producer_linger_ms", producer_linger_ms)
        if producer_max_request_size is not None:
            pulumi.set(__self__, "producer_max_request_size", producer_max_request_size)

    @property
    @pulumi.getter(name="consumerAutoOffsetReset")
    def consumer_auto_offset_reset(self) -> Optional[builtins.str]:
        """
        Enum: `earliest`, `latest`. Set where consumer starts to consume data. Value `earliest`: Start replication from the earliest offset. Value `latest`: Start replication from the latest offset. Default is `earliest`.
        """
        return pulumi.get(self, "consumer_auto_offset_reset")

    @property
    @pulumi.getter(name="consumerFetchMinBytes")
    def consumer_fetch_min_bytes(self) -> Optional[builtins.int]:
        """
        The minimum amount of data the server should return for a fetch request. Example: `1024`.
        """
        return pulumi.get(self, "consumer_fetch_min_bytes")

    @property
    @pulumi.getter(name="consumerMaxPollRecords")
    def consumer_max_poll_records(self) -> Optional[builtins.int]:
        """
        Set consumer max.poll.records. The default is 500. Example: `500`.
        """
        return pulumi.get(self, "consumer_max_poll_records")

    @property
    @pulumi.getter(name="producerBatchSize")
    def producer_batch_size(self) -> Optional[builtins.int]:
        """
        The batch size in bytes producer will attempt to collect before publishing to broker. Example: `1024`.
        """
        return pulumi.get(self, "producer_batch_size")

    @property
    @pulumi.getter(name="producerBufferMemory")
    def producer_buffer_memory(self) -> Optional[builtins.int]:
        """
        The amount of bytes producer can use for buffering data before publishing to broker. Example: `8388608`.
        """
        return pulumi.get(self, "producer_buffer_memory")

    @property
    @pulumi.getter(name="producerCompressionType")
    def producer_compression_type(self) -> Optional[builtins.str]:
        """
        Enum: `gzip`, `lz4`, `none`, `snappy`, `zstd`. Specify the default compression type for producers. This configuration accepts the standard compression codecs (`gzip`, `snappy`, `lz4`, `zstd`). It additionally accepts `none` which is the default and equivalent to no compression.
        """
        return pulumi.get(self, "producer_compression_type")

    @property
    @pulumi.getter(name="producerLingerMs")
    def producer_linger_ms(self) -> Optional[builtins.int]:
        """
        The linger time (ms) for waiting new data to arrive for publishing. Example: `100`.
        """
        return pulumi.get(self, "producer_linger_ms")

    @property
    @pulumi.getter(name="producerMaxRequestSize")
    def producer_max_request_size(self) -> Optional[builtins.int]:
        """
        The maximum request size in bytes. Example: `1048576`.
        """
        return pulumi.get(self, "producer_max_request_size")


@pulumi.output_type
class GetServiceIntegrationLogsUserConfigResult(dict):
    def __init__(__self__, *,
                 elasticsearch_index_days_max: Optional[builtins.int] = None,
                 elasticsearch_index_prefix: Optional[builtins.str] = None,
                 selected_log_fields: Optional[Sequence[builtins.str]] = None):
        """
        :param builtins.int elasticsearch_index_days_max: Elasticsearch index retention limit. Default: `3`.
        :param builtins.str elasticsearch_index_prefix: Elasticsearch index prefix. Default: `logs`.
        :param Sequence[builtins.str] selected_log_fields: The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        if elasticsearch_index_days_max is not None:
            pulumi.set(__self__, "elasticsearch_index_days_max", elasticsearch_index_days_max)
        if elasticsearch_index_prefix is not None:
            pulumi.set(__self__, "elasticsearch_index_prefix", elasticsearch_index_prefix)
        if selected_log_fields is not None:
            pulumi.set(__self__, "selected_log_fields", selected_log_fields)

    @property
    @pulumi.getter(name="elasticsearchIndexDaysMax")
    def elasticsearch_index_days_max(self) -> Optional[builtins.int]:
        """
        Elasticsearch index retention limit. Default: `3`.
        """
        return pulumi.get(self, "elasticsearch_index_days_max")

    @property
    @pulumi.getter(name="elasticsearchIndexPrefix")
    def elasticsearch_index_prefix(self) -> Optional[builtins.str]:
        """
        Elasticsearch index prefix. Default: `logs`.
        """
        return pulumi.get(self, "elasticsearch_index_prefix")

    @property
    @pulumi.getter(name="selectedLogFields")
    def selected_log_fields(self) -> Optional[Sequence[builtins.str]]:
        """
        The list of logging fields that will be sent to the integration logging service. The MESSAGE and timestamp fields are always sent.
        """
        return pulumi.get(self, "selected_log_fields")


@pulumi.output_type
class GetServiceIntegrationMetricsUserConfigResult(dict):
    def __init__(__self__, *,
                 database: Optional[builtins.str] = None,
                 retention_days: Optional[builtins.int] = None,
                 ro_username: Optional[builtins.str] = None,
                 source_mysql: Optional['outputs.GetServiceIntegrationMetricsUserConfigSourceMysqlResult'] = None,
                 username: Optional[builtins.str] = None):
        """
        :param builtins.str database: Name of the database where to store metric datapoints. Only affects PostgreSQL destinations. Defaults to `metrics`. Note that this must be the same for all metrics integrations that write data to the same PostgreSQL service.
        :param builtins.int retention_days: Number of days to keep old metrics. Only affects PostgreSQL destinations. Set to 0 for no automatic cleanup. Defaults to 30 days.
        :param builtins.str ro_username: Name of a user that can be used to read metrics. This will be used for Grafana integration (if enabled) to prevent Grafana users from making undesired changes. Only affects PostgreSQL destinations. Defaults to `metrics_reader`. Note that this must be the same for all metrics integrations that write data to the same PostgreSQL service.
        :param 'GetServiceIntegrationMetricsUserConfigSourceMysqlArgs' source_mysql: Configuration options for metrics where source service is MySQL
        :param builtins.str username: Name of the user used to write metrics. Only affects PostgreSQL destinations. Defaults to `metrics_writer`. Note that this must be the same for all metrics integrations that write data to the same PostgreSQL service.
        """
        if database is not None:
            pulumi.set(__self__, "database", database)
        if retention_days is not None:
            pulumi.set(__self__, "retention_days", retention_days)
        if ro_username is not None:
            pulumi.set(__self__, "ro_username", ro_username)
        if source_mysql is not None:
            pulumi.set(__self__, "source_mysql", source_mysql)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def database(self) -> Optional[builtins.str]:
        """
        Name of the database where to store metric datapoints. Only affects PostgreSQL destinations. Defaults to `metrics`. Note that this must be the same for all metrics integrations that write data to the same PostgreSQL service.
        """
        return pulumi.get(self, "database")

    @property
    @pulumi.getter(name="retentionDays")
    def retention_days(self) -> Optional[builtins.int]:
        """
        Number of days to keep old metrics. Only affects PostgreSQL destinations. Set to 0 for no automatic cleanup. Defaults to 30 days.
        """
        return pulumi.get(self, "retention_days")

    @property
    @pulumi.getter(name="roUsername")
    def ro_username(self) -> Optional[builtins.str]:
        """
        Name of a user that can be used to read metrics. This will be used for Grafana integration (if enabled) to prevent Grafana users from making undesired changes. Only affects PostgreSQL destinations. Defaults to `metrics_reader`. Note that this must be the same for all metrics integrations that write data to the same PostgreSQL service.
        """
        return pulumi.get(self, "ro_username")

    @property
    @pulumi.getter(name="sourceMysql")
    def source_mysql(self) -> Optional['outputs.GetServiceIntegrationMetricsUserConfigSourceMysqlResult']:
        """
        Configuration options for metrics where source service is MySQL
        """
        return pulumi.get(self, "source_mysql")

    @property
    @pulumi.getter
    def username(self) -> Optional[builtins.str]:
        """
        Name of the user used to write metrics. Only affects PostgreSQL destinations. Defaults to `metrics_writer`. Note that this must be the same for all metrics integrations that write data to the same PostgreSQL service.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class GetServiceIntegrationMetricsUserConfigSourceMysqlResult(dict):
    def __init__(__self__, *,
                 telegraf: Optional['outputs.GetServiceIntegrationMetricsUserConfigSourceMysqlTelegrafResult'] = None):
        """
        :param 'GetServiceIntegrationMetricsUserConfigSourceMysqlTelegrafArgs' telegraf: Configuration options for Telegraf MySQL input plugin
        """
        if telegraf is not None:
            pulumi.set(__self__, "telegraf", telegraf)

    @property
    @pulumi.getter
    def telegraf(self) -> Optional['outputs.GetServiceIntegrationMetricsUserConfigSourceMysqlTelegrafResult']:
        """
        Configuration options for Telegraf MySQL input plugin
        """
        return pulumi.get(self, "telegraf")


@pulumi.output_type
class GetServiceIntegrationMetricsUserConfigSourceMysqlTelegrafResult(dict):
    def __init__(__self__, *,
                 gather_event_waits: Optional[builtins.bool] = None,
                 gather_file_events_stats: Optional[builtins.bool] = None,
                 gather_index_io_waits: Optional[builtins.bool] = None,
                 gather_info_schema_auto_inc: Optional[builtins.bool] = None,
                 gather_innodb_metrics: Optional[builtins.bool] = None,
                 gather_perf_events_statements: Optional[builtins.bool] = None,
                 gather_process_list: Optional[builtins.bool] = None,
                 gather_slave_status: Optional[builtins.bool] = None,
                 gather_table_io_waits: Optional[builtins.bool] = None,
                 gather_table_lock_waits: Optional[builtins.bool] = None,
                 gather_table_schema: Optional[builtins.bool] = None,
                 perf_events_statements_digest_text_limit: Optional[builtins.int] = None,
                 perf_events_statements_limit: Optional[builtins.int] = None,
                 perf_events_statements_time_limit: Optional[builtins.int] = None):
        """
        :param builtins.bool gather_event_waits: Gather metrics from PERFORMANCE_SCHEMA.EVENT_WAITS.
        :param builtins.bool gather_file_events_stats: Gather metrics from PERFORMANCE_SCHEMA.FILE_SUMMARY_BY_EVENT_NAME.
        :param builtins.bool gather_index_io_waits: Gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_INDEX_USAGE.
        :param builtins.bool gather_info_schema_auto_inc: Gather auto_increment columns and max values from information schema.
        :param builtins.bool gather_innodb_metrics: Gather metrics from INFORMATION_SCHEMA.INNODB_METRICS.
        :param builtins.bool gather_perf_events_statements: Gather metrics from PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_SUMMARY_BY_DIGEST.
        :param builtins.bool gather_process_list: Gather thread state counts from INFORMATION_SCHEMA.PROCESSLIST.
        :param builtins.bool gather_slave_status: Gather metrics from SHOW SLAVE STATUS command output.
        :param builtins.bool gather_table_io_waits: Gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_TABLE.
        :param builtins.bool gather_table_lock_waits: Gather metrics from PERFORMANCE_SCHEMA.TABLE_LOCK_WAITS.
        :param builtins.bool gather_table_schema: Gather metrics from INFORMATION_SCHEMA.TABLES.
        :param builtins.int perf_events_statements_digest_text_limit: Truncates digest text from perf_events_statements into this many characters. Example: `120`.
        :param builtins.int perf_events_statements_limit: Limits metrics from perf_events_statements. Example: `250`.
        :param builtins.int perf_events_statements_time_limit: Only include perf_events_statements whose last seen is less than this many seconds. Example: `86400`.
        """
        if gather_event_waits is not None:
            pulumi.set(__self__, "gather_event_waits", gather_event_waits)
        if gather_file_events_stats is not None:
            pulumi.set(__self__, "gather_file_events_stats", gather_file_events_stats)
        if gather_index_io_waits is not None:
            pulumi.set(__self__, "gather_index_io_waits", gather_index_io_waits)
        if gather_info_schema_auto_inc is not None:
            pulumi.set(__self__, "gather_info_schema_auto_inc", gather_info_schema_auto_inc)
        if gather_innodb_metrics is not None:
            pulumi.set(__self__, "gather_innodb_metrics", gather_innodb_metrics)
        if gather_perf_events_statements is not None:
            pulumi.set(__self__, "gather_perf_events_statements", gather_perf_events_statements)
        if gather_process_list is not None:
            pulumi.set(__self__, "gather_process_list", gather_process_list)
        if gather_slave_status is not None:
            pulumi.set(__self__, "gather_slave_status", gather_slave_status)
        if gather_table_io_waits is not None:
            pulumi.set(__self__, "gather_table_io_waits", gather_table_io_waits)
        if gather_table_lock_waits is not None:
            pulumi.set(__self__, "gather_table_lock_waits", gather_table_lock_waits)
        if gather_table_schema is not None:
            pulumi.set(__self__, "gather_table_schema", gather_table_schema)
        if perf_events_statements_digest_text_limit is not None:
            pulumi.set(__self__, "perf_events_statements_digest_text_limit", perf_events_statements_digest_text_limit)
        if perf_events_statements_limit is not None:
            pulumi.set(__self__, "perf_events_statements_limit", perf_events_statements_limit)
        if perf_events_statements_time_limit is not None:
            pulumi.set(__self__, "perf_events_statements_time_limit", perf_events_statements_time_limit)

    @property
    @pulumi.getter(name="gatherEventWaits")
    def gather_event_waits(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE_SCHEMA.EVENT_WAITS.
        """
        return pulumi.get(self, "gather_event_waits")

    @property
    @pulumi.getter(name="gatherFileEventsStats")
    def gather_file_events_stats(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE_SCHEMA.FILE_SUMMARY_BY_EVENT_NAME.
        """
        return pulumi.get(self, "gather_file_events_stats")

    @property
    @pulumi.getter(name="gatherIndexIoWaits")
    def gather_index_io_waits(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_INDEX_USAGE.
        """
        return pulumi.get(self, "gather_index_io_waits")

    @property
    @pulumi.getter(name="gatherInfoSchemaAutoInc")
    def gather_info_schema_auto_inc(self) -> Optional[builtins.bool]:
        """
        Gather auto_increment columns and max values from information schema.
        """
        return pulumi.get(self, "gather_info_schema_auto_inc")

    @property
    @pulumi.getter(name="gatherInnodbMetrics")
    def gather_innodb_metrics(self) -> Optional[builtins.bool]:
        """
        Gather metrics from INFORMATION_SCHEMA.INNODB_METRICS.
        """
        return pulumi.get(self, "gather_innodb_metrics")

    @property
    @pulumi.getter(name="gatherPerfEventsStatements")
    def gather_perf_events_statements(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_SUMMARY_BY_DIGEST.
        """
        return pulumi.get(self, "gather_perf_events_statements")

    @property
    @pulumi.getter(name="gatherProcessList")
    def gather_process_list(self) -> Optional[builtins.bool]:
        """
        Gather thread state counts from INFORMATION_SCHEMA.PROCESSLIST.
        """
        return pulumi.get(self, "gather_process_list")

    @property
    @pulumi.getter(name="gatherSlaveStatus")
    def gather_slave_status(self) -> Optional[builtins.bool]:
        """
        Gather metrics from SHOW SLAVE STATUS command output.
        """
        return pulumi.get(self, "gather_slave_status")

    @property
    @pulumi.getter(name="gatherTableIoWaits")
    def gather_table_io_waits(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_TABLE.
        """
        return pulumi.get(self, "gather_table_io_waits")

    @property
    @pulumi.getter(name="gatherTableLockWaits")
    def gather_table_lock_waits(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE_SCHEMA.TABLE_LOCK_WAITS.
        """
        return pulumi.get(self, "gather_table_lock_waits")

    @property
    @pulumi.getter(name="gatherTableSchema")
    def gather_table_schema(self) -> Optional[builtins.bool]:
        """
        Gather metrics from INFORMATION_SCHEMA.TABLES.
        """
        return pulumi.get(self, "gather_table_schema")

    @property
    @pulumi.getter(name="perfEventsStatementsDigestTextLimit")
    def perf_events_statements_digest_text_limit(self) -> Optional[builtins.int]:
        """
        Truncates digest text from perf_events_statements into this many characters. Example: `120`.
        """
        return pulumi.get(self, "perf_events_statements_digest_text_limit")

    @property
    @pulumi.getter(name="perfEventsStatementsLimit")
    def perf_events_statements_limit(self) -> Optional[builtins.int]:
        """
        Limits metrics from perf_events_statements. Example: `250`.
        """
        return pulumi.get(self, "perf_events_statements_limit")

    @property
    @pulumi.getter(name="perfEventsStatementsTimeLimit")
    def perf_events_statements_time_limit(self) -> Optional[builtins.int]:
        """
        Only include perf_events_statements whose last seen is less than this many seconds. Example: `86400`.
        """
        return pulumi.get(self, "perf_events_statements_time_limit")


@pulumi.output_type
class GetServiceIntegrationPrometheusUserConfigResult(dict):
    def __init__(__self__, *,
                 source_mysql: Optional['outputs.GetServiceIntegrationPrometheusUserConfigSourceMysqlResult'] = None):
        """
        :param 'GetServiceIntegrationPrometheusUserConfigSourceMysqlArgs' source_mysql: Configuration options for metrics where source service is MySQL
        """
        if source_mysql is not None:
            pulumi.set(__self__, "source_mysql", source_mysql)

    @property
    @pulumi.getter(name="sourceMysql")
    def source_mysql(self) -> Optional['outputs.GetServiceIntegrationPrometheusUserConfigSourceMysqlResult']:
        """
        Configuration options for metrics where source service is MySQL
        """
        return pulumi.get(self, "source_mysql")


@pulumi.output_type
class GetServiceIntegrationPrometheusUserConfigSourceMysqlResult(dict):
    def __init__(__self__, *,
                 telegraf: Optional['outputs.GetServiceIntegrationPrometheusUserConfigSourceMysqlTelegrafResult'] = None):
        """
        :param 'GetServiceIntegrationPrometheusUserConfigSourceMysqlTelegrafArgs' telegraf: Configuration options for Telegraf MySQL input plugin
        """
        if telegraf is not None:
            pulumi.set(__self__, "telegraf", telegraf)

    @property
    @pulumi.getter
    def telegraf(self) -> Optional['outputs.GetServiceIntegrationPrometheusUserConfigSourceMysqlTelegrafResult']:
        """
        Configuration options for Telegraf MySQL input plugin
        """
        return pulumi.get(self, "telegraf")


@pulumi.output_type
class GetServiceIntegrationPrometheusUserConfigSourceMysqlTelegrafResult(dict):
    def __init__(__self__, *,
                 gather_event_waits: Optional[builtins.bool] = None,
                 gather_file_events_stats: Optional[builtins.bool] = None,
                 gather_index_io_waits: Optional[builtins.bool] = None,
                 gather_info_schema_auto_inc: Optional[builtins.bool] = None,
                 gather_innodb_metrics: Optional[builtins.bool] = None,
                 gather_perf_events_statements: Optional[builtins.bool] = None,
                 gather_process_list: Optional[builtins.bool] = None,
                 gather_slave_status: Optional[builtins.bool] = None,
                 gather_table_io_waits: Optional[builtins.bool] = None,
                 gather_table_lock_waits: Optional[builtins.bool] = None,
                 gather_table_schema: Optional[builtins.bool] = None,
                 perf_events_statements_digest_text_limit: Optional[builtins.int] = None,
                 perf_events_statements_limit: Optional[builtins.int] = None,
                 perf_events_statements_time_limit: Optional[builtins.int] = None):
        """
        :param builtins.bool gather_event_waits: Gather metrics from PERFORMANCE_SCHEMA.EVENT_WAITS.
        :param builtins.bool gather_file_events_stats: Gather metrics from PERFORMANCE_SCHEMA.FILE_SUMMARY_BY_EVENT_NAME.
        :param builtins.bool gather_index_io_waits: Gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_INDEX_USAGE.
        :param builtins.bool gather_info_schema_auto_inc: Gather auto_increment columns and max values from information schema.
        :param builtins.bool gather_innodb_metrics: Gather metrics from INFORMATION_SCHEMA.INNODB_METRICS.
        :param builtins.bool gather_perf_events_statements: Gather metrics from PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_SUMMARY_BY_DIGEST.
        :param builtins.bool gather_process_list: Gather thread state counts from INFORMATION_SCHEMA.PROCESSLIST.
        :param builtins.bool gather_slave_status: Gather metrics from SHOW SLAVE STATUS command output.
        :param builtins.bool gather_table_io_waits: Gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_TABLE.
        :param builtins.bool gather_table_lock_waits: Gather metrics from PERFORMANCE_SCHEMA.TABLE_LOCK_WAITS.
        :param builtins.bool gather_table_schema: Gather metrics from INFORMATION_SCHEMA.TABLES.
        :param builtins.int perf_events_statements_digest_text_limit: Truncates digest text from perf_events_statements into this many characters. Example: `120`.
        :param builtins.int perf_events_statements_limit: Limits metrics from perf_events_statements. Example: `250`.
        :param builtins.int perf_events_statements_time_limit: Only include perf_events_statements whose last seen is less than this many seconds. Example: `86400`.
        """
        if gather_event_waits is not None:
            pulumi.set(__self__, "gather_event_waits", gather_event_waits)
        if gather_file_events_stats is not None:
            pulumi.set(__self__, "gather_file_events_stats", gather_file_events_stats)
        if gather_index_io_waits is not None:
            pulumi.set(__self__, "gather_index_io_waits", gather_index_io_waits)
        if gather_info_schema_auto_inc is not None:
            pulumi.set(__self__, "gather_info_schema_auto_inc", gather_info_schema_auto_inc)
        if gather_innodb_metrics is not None:
            pulumi.set(__self__, "gather_innodb_metrics", gather_innodb_metrics)
        if gather_perf_events_statements is not None:
            pulumi.set(__self__, "gather_perf_events_statements", gather_perf_events_statements)
        if gather_process_list is not None:
            pulumi.set(__self__, "gather_process_list", gather_process_list)
        if gather_slave_status is not None:
            pulumi.set(__self__, "gather_slave_status", gather_slave_status)
        if gather_table_io_waits is not None:
            pulumi.set(__self__, "gather_table_io_waits", gather_table_io_waits)
        if gather_table_lock_waits is not None:
            pulumi.set(__self__, "gather_table_lock_waits", gather_table_lock_waits)
        if gather_table_schema is not None:
            pulumi.set(__self__, "gather_table_schema", gather_table_schema)
        if perf_events_statements_digest_text_limit is not None:
            pulumi.set(__self__, "perf_events_statements_digest_text_limit", perf_events_statements_digest_text_limit)
        if perf_events_statements_limit is not None:
            pulumi.set(__self__, "perf_events_statements_limit", perf_events_statements_limit)
        if perf_events_statements_time_limit is not None:
            pulumi.set(__self__, "perf_events_statements_time_limit", perf_events_statements_time_limit)

    @property
    @pulumi.getter(name="gatherEventWaits")
    def gather_event_waits(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE_SCHEMA.EVENT_WAITS.
        """
        return pulumi.get(self, "gather_event_waits")

    @property
    @pulumi.getter(name="gatherFileEventsStats")
    def gather_file_events_stats(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE_SCHEMA.FILE_SUMMARY_BY_EVENT_NAME.
        """
        return pulumi.get(self, "gather_file_events_stats")

    @property
    @pulumi.getter(name="gatherIndexIoWaits")
    def gather_index_io_waits(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_INDEX_USAGE.
        """
        return pulumi.get(self, "gather_index_io_waits")

    @property
    @pulumi.getter(name="gatherInfoSchemaAutoInc")
    def gather_info_schema_auto_inc(self) -> Optional[builtins.bool]:
        """
        Gather auto_increment columns and max values from information schema.
        """
        return pulumi.get(self, "gather_info_schema_auto_inc")

    @property
    @pulumi.getter(name="gatherInnodbMetrics")
    def gather_innodb_metrics(self) -> Optional[builtins.bool]:
        """
        Gather metrics from INFORMATION_SCHEMA.INNODB_METRICS.
        """
        return pulumi.get(self, "gather_innodb_metrics")

    @property
    @pulumi.getter(name="gatherPerfEventsStatements")
    def gather_perf_events_statements(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_SUMMARY_BY_DIGEST.
        """
        return pulumi.get(self, "gather_perf_events_statements")

    @property
    @pulumi.getter(name="gatherProcessList")
    def gather_process_list(self) -> Optional[builtins.bool]:
        """
        Gather thread state counts from INFORMATION_SCHEMA.PROCESSLIST.
        """
        return pulumi.get(self, "gather_process_list")

    @property
    @pulumi.getter(name="gatherSlaveStatus")
    def gather_slave_status(self) -> Optional[builtins.bool]:
        """
        Gather metrics from SHOW SLAVE STATUS command output.
        """
        return pulumi.get(self, "gather_slave_status")

    @property
    @pulumi.getter(name="gatherTableIoWaits")
    def gather_table_io_waits(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_TABLE.
        """
        return pulumi.get(self, "gather_table_io_waits")

    @property
    @pulumi.getter(name="gatherTableLockWaits")
    def gather_table_lock_waits(self) -> Optional[builtins.bool]:
        """
        Gather metrics from PERFORMANCE_SCHEMA.TABLE_LOCK_WAITS.
        """
        return pulumi.get(self, "gather_table_lock_waits")

    @property
    @pulumi.getter(name="gatherTableSchema")
    def gather_table_schema(self) -> Optional[builtins.bool]:
        """
        Gather metrics from INFORMATION_SCHEMA.TABLES.
        """
        return pulumi.get(self, "gather_table_schema")

    @property
    @pulumi.getter(name="perfEventsStatementsDigestTextLimit")
    def perf_events_statements_digest_text_limit(self) -> Optional[builtins.int]:
        """
        Truncates digest text from perf_events_statements into this many characters. Example: `120`.
        """
        return pulumi.get(self, "perf_events_statements_digest_text_limit")

    @property
    @pulumi.getter(name="perfEventsStatementsLimit")
    def perf_events_statements_limit(self) -> Optional[builtins.int]:
        """
        Limits metrics from perf_events_statements. Example: `250`.
        """
        return pulumi.get(self, "perf_events_statements_limit")

    @property
    @pulumi.getter(name="perfEventsStatementsTimeLimit")
    def perf_events_statements_time_limit(self) -> Optional[builtins.int]:
        """
        Only include perf_events_statements whose last seen is less than this many seconds. Example: `86400`.
        """
        return pulumi.get(self, "perf_events_statements_time_limit")


@pulumi.output_type
class GetThanosComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetThanosServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetThanosTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetThanosTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetThanosThanoResult(dict):
    def __init__(__self__, *,
                 query_frontend_uri: builtins.str,
                 query_uri: builtins.str,
                 receiver_remote_write_uri: builtins.str,
                 uris: Sequence[builtins.str]):
        """
        :param builtins.str query_frontend_uri: Query frontend URI.
        :param builtins.str query_uri: Query URI.
        :param builtins.str receiver_remote_write_uri: Receiver remote write URI.
        :param Sequence[builtins.str] uris: Thanos server URIs.
        """
        pulumi.set(__self__, "query_frontend_uri", query_frontend_uri)
        pulumi.set(__self__, "query_uri", query_uri)
        pulumi.set(__self__, "receiver_remote_write_uri", receiver_remote_write_uri)
        pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter(name="queryFrontendUri")
    def query_frontend_uri(self) -> builtins.str:
        """
        Query frontend URI.
        """
        return pulumi.get(self, "query_frontend_uri")

    @property
    @pulumi.getter(name="queryUri")
    def query_uri(self) -> builtins.str:
        """
        Query URI.
        """
        return pulumi.get(self, "query_uri")

    @property
    @pulumi.getter(name="receiverRemoteWriteUri")
    def receiver_remote_write_uri(self) -> builtins.str:
        """
        Receiver remote write URI.
        """
        return pulumi.get(self, "receiver_remote_write_uri")

    @property
    @pulumi.getter
    def uris(self) -> Sequence[builtins.str]:
        """
        Thanos server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class GetThanosThanosUserConfigResult(dict):
    def __init__(__self__, *,
                 compactor: Optional['outputs.GetThanosThanosUserConfigCompactorResult'] = None,
                 env: Optional[Mapping[str, builtins.str]] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetThanosThanosUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 object_storage_usage_alert_threshold_gb: Optional[builtins.int] = None,
                 private_access: Optional['outputs.GetThanosThanosUserConfigPrivateAccessResult'] = None,
                 privatelink_access: Optional['outputs.GetThanosThanosUserConfigPrivatelinkAccessResult'] = None,
                 public_access: Optional['outputs.GetThanosThanosUserConfigPublicAccessResult'] = None,
                 query: Optional['outputs.GetThanosThanosUserConfigQueryResult'] = None,
                 query_frontend: Optional['outputs.GetThanosThanosUserConfigQueryFrontendResult'] = None,
                 receiver_ingesting: Optional[Mapping[str, builtins.str]] = None,
                 receiver_routing: Optional[Mapping[str, builtins.str]] = None,
                 ruler: Optional[Mapping[str, builtins.str]] = None,
                 service_log: Optional[builtins.bool] = None,
                 static_ips: Optional[builtins.bool] = None,
                 store: Optional[Mapping[str, builtins.str]] = None):
        """
        :param 'GetThanosThanosUserConfigCompactorArgs' compactor: Configuration options for Thanos Compactor
        :param Mapping[str, builtins.str] env: Environmental variables.
        :param Sequence['GetThanosThanosUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param builtins.int object_storage_usage_alert_threshold_gb: After exceeding the limit a service alert is going to be raised (0 means not set).
        :param 'GetThanosThanosUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'GetThanosThanosUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param 'GetThanosThanosUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param 'GetThanosThanosUserConfigQueryArgs' query: Configuration options for Thanos Query
        :param 'GetThanosThanosUserConfigQueryFrontendArgs' query_frontend: Configuration options for Thanos Query Frontend
        :param Mapping[str, builtins.str] receiver_ingesting: Common configuration options for Thanos Receive.
        :param Mapping[str, builtins.str] receiver_routing: Configuration options for Thanos Receive Routing.
        :param Mapping[str, builtins.str] ruler: Configuration options for Thanos Ruler.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.bool static_ips: Use static public IP addresses.
        :param Mapping[str, builtins.str] store: Configuration options for Thanos Store.
        """
        if compactor is not None:
            pulumi.set(__self__, "compactor", compactor)
        if env is not None:
            pulumi.set(__self__, "env", env)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if object_storage_usage_alert_threshold_gb is not None:
            pulumi.set(__self__, "object_storage_usage_alert_threshold_gb", object_storage_usage_alert_threshold_gb)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if query is not None:
            pulumi.set(__self__, "query", query)
        if query_frontend is not None:
            pulumi.set(__self__, "query_frontend", query_frontend)
        if receiver_ingesting is not None:
            pulumi.set(__self__, "receiver_ingesting", receiver_ingesting)
        if receiver_routing is not None:
            pulumi.set(__self__, "receiver_routing", receiver_routing)
        if ruler is not None:
            pulumi.set(__self__, "ruler", ruler)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)
        if store is not None:
            pulumi.set(__self__, "store", store)

    @property
    @pulumi.getter
    def compactor(self) -> Optional['outputs.GetThanosThanosUserConfigCompactorResult']:
        """
        Configuration options for Thanos Compactor
        """
        return pulumi.get(self, "compactor")

    @property
    @pulumi.getter
    @_utilities.deprecated("""This property is deprecated.""")
    def env(self) -> Optional[Mapping[str, builtins.str]]:
        """
        Environmental variables.
        """
        return pulumi.get(self, "env")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetThanosThanosUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter(name="objectStorageUsageAlertThresholdGb")
    def object_storage_usage_alert_threshold_gb(self) -> Optional[builtins.int]:
        """
        After exceeding the limit a service alert is going to be raised (0 means not set).
        """
        return pulumi.get(self, "object_storage_usage_alert_threshold_gb")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.GetThanosThanosUserConfigPrivateAccessResult']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.GetThanosThanosUserConfigPrivatelinkAccessResult']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GetThanosThanosUserConfigPublicAccessResult']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter
    def query(self) -> Optional['outputs.GetThanosThanosUserConfigQueryResult']:
        """
        Configuration options for Thanos Query
        """
        return pulumi.get(self, "query")

    @property
    @pulumi.getter(name="queryFrontend")
    def query_frontend(self) -> Optional['outputs.GetThanosThanosUserConfigQueryFrontendResult']:
        """
        Configuration options for Thanos Query Frontend
        """
        return pulumi.get(self, "query_frontend")

    @property
    @pulumi.getter(name="receiverIngesting")
    def receiver_ingesting(self) -> Optional[Mapping[str, builtins.str]]:
        """
        Common configuration options for Thanos Receive.
        """
        return pulumi.get(self, "receiver_ingesting")

    @property
    @pulumi.getter(name="receiverRouting")
    def receiver_routing(self) -> Optional[Mapping[str, builtins.str]]:
        """
        Configuration options for Thanos Receive Routing.
        """
        return pulumi.get(self, "receiver_routing")

    @property
    @pulumi.getter
    def ruler(self) -> Optional[Mapping[str, builtins.str]]:
        """
        Configuration options for Thanos Ruler.
        """
        return pulumi.get(self, "ruler")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")

    @property
    @pulumi.getter
    def store(self) -> Optional[Mapping[str, builtins.str]]:
        """
        Configuration options for Thanos Store.
        """
        return pulumi.get(self, "store")


@pulumi.output_type
class GetThanosThanosUserConfigCompactorResult(dict):
    def __init__(__self__, *,
                 retention_days: Optional[builtins.int] = None):
        """
        :param builtins.int retention_days: Retention time for data in days for each resolution (5m, 1h, raw).
        """
        if retention_days is not None:
            pulumi.set(__self__, "retention_days", retention_days)

    @property
    @pulumi.getter(name="retentionDays")
    def retention_days(self) -> Optional[builtins.int]:
        """
        Retention time for data in days for each resolution (5m, 1h, raw).
        """
        return pulumi.get(self, "retention_days")


@pulumi.output_type
class GetThanosThanosUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetThanosThanosUserConfigPrivateAccessResult(dict):
    def __init__(__self__, *,
                 query_frontend: Optional[builtins.bool] = None,
                 receiver_routing: Optional[builtins.bool] = None):
        """
        :param builtins.bool query_frontend: Allow clients to connect to query_frontend with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool receiver_routing: Allow clients to connect to receiver_routing with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if query_frontend is not None:
            pulumi.set(__self__, "query_frontend", query_frontend)
        if receiver_routing is not None:
            pulumi.set(__self__, "receiver_routing", receiver_routing)

    @property
    @pulumi.getter(name="queryFrontend")
    def query_frontend(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to query_frontend with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "query_frontend")

    @property
    @pulumi.getter(name="receiverRouting")
    def receiver_routing(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to receiver_routing with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "receiver_routing")


@pulumi.output_type
class GetThanosThanosUserConfigPrivatelinkAccessResult(dict):
    def __init__(__self__, *,
                 query_frontend: Optional[builtins.bool] = None,
                 receiver_routing: Optional[builtins.bool] = None):
        """
        :param builtins.bool query_frontend: Enable query_frontend.
        :param builtins.bool receiver_routing: Enable receiver_routing.
        """
        if query_frontend is not None:
            pulumi.set(__self__, "query_frontend", query_frontend)
        if receiver_routing is not None:
            pulumi.set(__self__, "receiver_routing", receiver_routing)

    @property
    @pulumi.getter(name="queryFrontend")
    def query_frontend(self) -> Optional[builtins.bool]:
        """
        Enable query_frontend.
        """
        return pulumi.get(self, "query_frontend")

    @property
    @pulumi.getter(name="receiverRouting")
    def receiver_routing(self) -> Optional[builtins.bool]:
        """
        Enable receiver_routing.
        """
        return pulumi.get(self, "receiver_routing")


@pulumi.output_type
class GetThanosThanosUserConfigPublicAccessResult(dict):
    def __init__(__self__, *,
                 compactor: Optional[builtins.bool] = None,
                 query: Optional[builtins.bool] = None,
                 query_frontend: Optional[builtins.bool] = None,
                 receiver_ingesting: Optional[builtins.bool] = None,
                 receiver_routing: Optional[builtins.bool] = None,
                 ruler: Optional[builtins.bool] = None,
                 store: Optional[builtins.bool] = None):
        """
        :param builtins.bool compactor: Allow clients to connect to compactor from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool query: Allow clients to connect to query from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool query_frontend: Allow clients to connect to query_frontend from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool receiver_ingesting: Allow clients to connect to receiver_ingesting from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool receiver_routing: Allow clients to connect to receiver_routing from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool ruler: Allow clients to connect to ruler from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool store: Allow clients to connect to store from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if compactor is not None:
            pulumi.set(__self__, "compactor", compactor)
        if query is not None:
            pulumi.set(__self__, "query", query)
        if query_frontend is not None:
            pulumi.set(__self__, "query_frontend", query_frontend)
        if receiver_ingesting is not None:
            pulumi.set(__self__, "receiver_ingesting", receiver_ingesting)
        if receiver_routing is not None:
            pulumi.set(__self__, "receiver_routing", receiver_routing)
        if ruler is not None:
            pulumi.set(__self__, "ruler", ruler)
        if store is not None:
            pulumi.set(__self__, "store", store)

    @property
    @pulumi.getter
    def compactor(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to compactor from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "compactor")

    @property
    @pulumi.getter
    def query(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to query from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "query")

    @property
    @pulumi.getter(name="queryFrontend")
    def query_frontend(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to query_frontend from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "query_frontend")

    @property
    @pulumi.getter(name="receiverIngesting")
    def receiver_ingesting(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to receiver_ingesting from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "receiver_ingesting")

    @property
    @pulumi.getter(name="receiverRouting")
    def receiver_routing(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to receiver_routing from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "receiver_routing")

    @property
    @pulumi.getter
    def ruler(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to ruler from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "ruler")

    @property
    @pulumi.getter
    def store(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to store from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "store")


@pulumi.output_type
class GetThanosThanosUserConfigQueryResult(dict):
    def __init__(__self__, *,
                 query_default_evaluation_interval: Optional[builtins.str] = None,
                 query_lookback_delta: Optional[builtins.str] = None,
                 query_metadata_default_time_range: Optional[builtins.str] = None,
                 query_timeout: Optional[builtins.str] = None,
                 store_limits_request_samples: Optional[builtins.int] = None,
                 store_limits_request_series: Optional[builtins.int] = None):
        """
        :param builtins.str query_default_evaluation_interval: Set the default evaluation interval for subqueries. Default: `1m`.
        :param builtins.str query_lookback_delta: The maximum lookback duration for retrieving metrics during expression evaluations in PromQL. PromQL always evaluates the query for a certain timestamp, and it looks back for the given amount of time to get the latest sample. If it exceeds the maximum lookback delta, it assumes the series is stale and returns none (a gap). The lookback delta should be set to at least 2 times the slowest scrape interval. If unset, it will use the promql default of 5m. Default: `5m`.
        :param builtins.str query_metadata_default_time_range: The default metadata time range duration for retrieving labels through Labels and Series API when the range parameters are not specified. The zero value means the range covers the time since the beginning. Default: `0s`.
        :param builtins.str query_timeout: Maximum time to process a query by the query node. Default: `2m`.
        :param builtins.int store_limits_request_samples: The maximum samples allowed for a single Series request. The Series call fails if this limit is exceeded. Set to 0 for no limit. NOTE: For efficiency, the limit is internally implemented as 'chunks limit' considering each chunk contains a maximum of 120 samples. The default value is 100 * store.limits.request-series. Default: `0`.
        :param builtins.int store_limits_request_series: The maximum series allowed for a single Series request. The Series call fails if this limit is exceeded. Set to 0 for no limit. The default value is 1000 * cpu_count. Default: `0`.
        """
        if query_default_evaluation_interval is not None:
            pulumi.set(__self__, "query_default_evaluation_interval", query_default_evaluation_interval)
        if query_lookback_delta is not None:
            pulumi.set(__self__, "query_lookback_delta", query_lookback_delta)
        if query_metadata_default_time_range is not None:
            pulumi.set(__self__, "query_metadata_default_time_range", query_metadata_default_time_range)
        if query_timeout is not None:
            pulumi.set(__self__, "query_timeout", query_timeout)
        if store_limits_request_samples is not None:
            pulumi.set(__self__, "store_limits_request_samples", store_limits_request_samples)
        if store_limits_request_series is not None:
            pulumi.set(__self__, "store_limits_request_series", store_limits_request_series)

    @property
    @pulumi.getter(name="queryDefaultEvaluationInterval")
    def query_default_evaluation_interval(self) -> Optional[builtins.str]:
        """
        Set the default evaluation interval for subqueries. Default: `1m`.
        """
        return pulumi.get(self, "query_default_evaluation_interval")

    @property
    @pulumi.getter(name="queryLookbackDelta")
    def query_lookback_delta(self) -> Optional[builtins.str]:
        """
        The maximum lookback duration for retrieving metrics during expression evaluations in PromQL. PromQL always evaluates the query for a certain timestamp, and it looks back for the given amount of time to get the latest sample. If it exceeds the maximum lookback delta, it assumes the series is stale and returns none (a gap). The lookback delta should be set to at least 2 times the slowest scrape interval. If unset, it will use the promql default of 5m. Default: `5m`.
        """
        return pulumi.get(self, "query_lookback_delta")

    @property
    @pulumi.getter(name="queryMetadataDefaultTimeRange")
    def query_metadata_default_time_range(self) -> Optional[builtins.str]:
        """
        The default metadata time range duration for retrieving labels through Labels and Series API when the range parameters are not specified. The zero value means the range covers the time since the beginning. Default: `0s`.
        """
        return pulumi.get(self, "query_metadata_default_time_range")

    @property
    @pulumi.getter(name="queryTimeout")
    def query_timeout(self) -> Optional[builtins.str]:
        """
        Maximum time to process a query by the query node. Default: `2m`.
        """
        return pulumi.get(self, "query_timeout")

    @property
    @pulumi.getter(name="storeLimitsRequestSamples")
    def store_limits_request_samples(self) -> Optional[builtins.int]:
        """
        The maximum samples allowed for a single Series request. The Series call fails if this limit is exceeded. Set to 0 for no limit. NOTE: For efficiency, the limit is internally implemented as 'chunks limit' considering each chunk contains a maximum of 120 samples. The default value is 100 * store.limits.request-series. Default: `0`.
        """
        return pulumi.get(self, "store_limits_request_samples")

    @property
    @pulumi.getter(name="storeLimitsRequestSeries")
    def store_limits_request_series(self) -> Optional[builtins.int]:
        """
        The maximum series allowed for a single Series request. The Series call fails if this limit is exceeded. Set to 0 for no limit. The default value is 1000 * cpu_count. Default: `0`.
        """
        return pulumi.get(self, "store_limits_request_series")


@pulumi.output_type
class GetThanosThanosUserConfigQueryFrontendResult(dict):
    def __init__(__self__, *,
                 query_range_align_range_with_step: Optional[builtins.bool] = None):
        """
        :param builtins.bool query_range_align_range_with_step: Whether to align the query range boundaries with the step. If enabled, the query range boundaries will be aligned to the step, providing more accurate results for queries with high-resolution data. Default: `true`.
        """
        if query_range_align_range_with_step is not None:
            pulumi.set(__self__, "query_range_align_range_with_step", query_range_align_range_with_step)

    @property
    @pulumi.getter(name="queryRangeAlignRangeWithStep")
    def query_range_align_range_with_step(self) -> Optional[builtins.bool]:
        """
        Whether to align the query range boundaries with the step. If enabled, the query range boundaries will be aligned to the step, providing more accurate results for queries with high-resolution data. Default: `true`.
        """
        return pulumi.get(self, "query_range_align_range_with_step")


@pulumi.output_type
class GetValkeyComponentResult(dict):
    def __init__(__self__, *,
                 component: builtins.str,
                 connection_uri: builtins.str,
                 host: builtins.str,
                 kafka_authentication_method: builtins.str,
                 kafka_ssl_ca: builtins.str,
                 port: builtins.int,
                 route: builtins.str,
                 ssl: builtins.bool,
                 usage: builtins.str):
        """
        :param builtins.str component: Service component name
        :param builtins.str connection_uri: Connection info for connecting to the service component. This is a combination of host and port.
        :param builtins.str host: Host name for connecting to the service component
        :param builtins.str kafka_authentication_method: Kafka authentication method. This is a value specific to the 'kafka' service component
        :param builtins.str kafka_ssl_ca: Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        :param builtins.int port: Port number for connecting to the service component
        :param builtins.str route: Network access route
        :param builtins.bool ssl: Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        :param builtins.str usage: DNS usage name
        """
        pulumi.set(__self__, "component", component)
        pulumi.set(__self__, "connection_uri", connection_uri)
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "kafka_authentication_method", kafka_authentication_method)
        pulumi.set(__self__, "kafka_ssl_ca", kafka_ssl_ca)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "route", route)
        pulumi.set(__self__, "ssl", ssl)
        pulumi.set(__self__, "usage", usage)

    @property
    @pulumi.getter
    def component(self) -> builtins.str:
        """
        Service component name
        """
        return pulumi.get(self, "component")

    @property
    @pulumi.getter(name="connectionUri")
    def connection_uri(self) -> builtins.str:
        """
        Connection info for connecting to the service component. This is a combination of host and port.
        """
        return pulumi.get(self, "connection_uri")

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Host name for connecting to the service component
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter(name="kafkaAuthenticationMethod")
    def kafka_authentication_method(self) -> builtins.str:
        """
        Kafka authentication method. This is a value specific to the 'kafka' service component
        """
        return pulumi.get(self, "kafka_authentication_method")

    @property
    @pulumi.getter(name="kafkaSslCa")
    def kafka_ssl_ca(self) -> builtins.str:
        """
        Kafka certificate used. The possible values are `letsencrypt` and `project_ca`.
        """
        return pulumi.get(self, "kafka_ssl_ca")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number for connecting to the service component
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def route(self) -> builtins.str:
        """
        Network access route
        """
        return pulumi.get(self, "route")

    @property
    @pulumi.getter
    def ssl(self) -> builtins.bool:
        """
        Whether the endpoint is encrypted or accepts plaintext. By default endpoints are always encrypted and this property is only included for service components they may disable encryption
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def usage(self) -> builtins.str:
        """
        DNS usage name
        """
        return pulumi.get(self, "usage")


@pulumi.output_type
class GetValkeyServiceIntegrationResult(dict):
    def __init__(__self__, *,
                 integration_type: builtins.str,
                 source_service_name: builtins.str):
        """
        :param builtins.str integration_type: Type of the service integration. The possible value is `read_replica`.
        :param builtins.str source_service_name: Name of the source service
        """
        pulumi.set(__self__, "integration_type", integration_type)
        pulumi.set(__self__, "source_service_name", source_service_name)

    @property
    @pulumi.getter(name="integrationType")
    def integration_type(self) -> builtins.str:
        """
        Type of the service integration. The possible value is `read_replica`.
        """
        return pulumi.get(self, "integration_type")

    @property
    @pulumi.getter(name="sourceServiceName")
    def source_service_name(self) -> builtins.str:
        """
        Name of the source service
        """
        return pulumi.get(self, "source_service_name")


@pulumi.output_type
class GetValkeyTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: Service tag key
        :param builtins.str value: Service tag value
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        Service tag key
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        Service tag value
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetValkeyTechEmailResult(dict):
    def __init__(__self__, *,
                 email: builtins.str):
        """
        :param builtins.str email: An email address to contact for technical issues
        """
        pulumi.set(__self__, "email", email)

    @property
    @pulumi.getter
    def email(self) -> builtins.str:
        """
        An email address to contact for technical issues
        """
        return pulumi.get(self, "email")


@pulumi.output_type
class GetValkeyValkeyResult(dict):
    def __init__(__self__, *,
                 password: builtins.str,
                 replica_uri: builtins.str,
                 slave_uris: Sequence[builtins.str],
                 uris: Sequence[builtins.str]):
        """
        :param builtins.str password: Valkey password.
        :param builtins.str replica_uri: Valkey replica server URI.
        :param Sequence[builtins.str] slave_uris: Valkey slave server URIs.
        :param Sequence[builtins.str] uris: Valkey server URIs.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "replica_uri", replica_uri)
        pulumi.set(__self__, "slave_uris", slave_uris)
        pulumi.set(__self__, "uris", uris)

    @property
    @pulumi.getter
    def password(self) -> builtins.str:
        """
        Valkey password.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter(name="replicaUri")
    def replica_uri(self) -> builtins.str:
        """
        Valkey replica server URI.
        """
        return pulumi.get(self, "replica_uri")

    @property
    @pulumi.getter(name="slaveUris")
    def slave_uris(self) -> Sequence[builtins.str]:
        """
        Valkey slave server URIs.
        """
        return pulumi.get(self, "slave_uris")

    @property
    @pulumi.getter
    def uris(self) -> Sequence[builtins.str]:
        """
        Valkey server URIs.
        """
        return pulumi.get(self, "uris")


@pulumi.output_type
class GetValkeyValkeyUserConfigResult(dict):
    def __init__(__self__, *,
                 additional_backup_regions: Optional[builtins.str] = None,
                 backup_hour: Optional[builtins.int] = None,
                 backup_minute: Optional[builtins.int] = None,
                 enable_ipv6: Optional[builtins.bool] = None,
                 frequent_snapshots: Optional[builtins.bool] = None,
                 ip_filter_objects: Optional[Sequence['outputs.GetValkeyValkeyUserConfigIpFilterObjectResult']] = None,
                 ip_filter_strings: Optional[Sequence[builtins.str]] = None,
                 ip_filters: Optional[Sequence[builtins.str]] = None,
                 migration: Optional['outputs.GetValkeyValkeyUserConfigMigrationResult'] = None,
                 private_access: Optional['outputs.GetValkeyValkeyUserConfigPrivateAccessResult'] = None,
                 privatelink_access: Optional['outputs.GetValkeyValkeyUserConfigPrivatelinkAccessResult'] = None,
                 project_to_fork_from: Optional[builtins.str] = None,
                 public_access: Optional['outputs.GetValkeyValkeyUserConfigPublicAccessResult'] = None,
                 recovery_basebackup_name: Optional[builtins.str] = None,
                 service_log: Optional[builtins.bool] = None,
                 service_to_fork_from: Optional[builtins.str] = None,
                 static_ips: Optional[builtins.bool] = None,
                 valkey_acl_channels_default: Optional[builtins.str] = None,
                 valkey_active_expire_effort: Optional[builtins.int] = None,
                 valkey_io_threads: Optional[builtins.int] = None,
                 valkey_lfu_decay_time: Optional[builtins.int] = None,
                 valkey_lfu_log_factor: Optional[builtins.int] = None,
                 valkey_maxmemory_policy: Optional[builtins.str] = None,
                 valkey_notify_keyspace_events: Optional[builtins.str] = None,
                 valkey_number_of_databases: Optional[builtins.int] = None,
                 valkey_persistence: Optional[builtins.str] = None,
                 valkey_pubsub_client_output_buffer_limit: Optional[builtins.int] = None,
                 valkey_ssl: Optional[builtins.bool] = None,
                 valkey_timeout: Optional[builtins.int] = None):
        """
        :param builtins.str additional_backup_regions: Additional Cloud Regions for Backup Replication.
        :param builtins.int backup_hour: The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        :param builtins.int backup_minute: The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        :param builtins.bool enable_ipv6: Register AAAA DNS records for the service, and allow IPv6 packets to service ports.
        :param builtins.bool frequent_snapshots: When enabled, Valkey will create frequent local RDB snapshots. When disabled, Valkey will only take RDB snapshots when a backup is created, based on the backup schedule. This setting is ignored when `valkey_persistence` is set to `off`. Default: `true`.
        :param Sequence['GetValkeyValkeyUserConfigIpFilterObjectArgs'] ip_filter_objects: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        :param Sequence[builtins.str] ip_filter_strings: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param Sequence[builtins.str] ip_filters: Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        :param 'GetValkeyValkeyUserConfigMigrationArgs' migration: Migrate data from existing server
        :param 'GetValkeyValkeyUserConfigPrivateAccessArgs' private_access: Allow access to selected service ports from private networks
        :param 'GetValkeyValkeyUserConfigPrivatelinkAccessArgs' privatelink_access: Allow access to selected service components through Privatelink
        :param builtins.str project_to_fork_from: Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        :param 'GetValkeyValkeyUserConfigPublicAccessArgs' public_access: Allow access to selected service ports from the public Internet
        :param builtins.str recovery_basebackup_name: Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        :param builtins.bool service_log: Store logs for the service so that they are available in the HTTP API and console.
        :param builtins.str service_to_fork_from: Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        :param builtins.bool static_ips: Use static public IP addresses.
        :param builtins.str valkey_acl_channels_default: Enum: `allchannels`, `resetchannels`. Determines default pub/sub channels' ACL for new users if ACL is not supplied. When this option is not defined, all_channels is assumed to keep backward compatibility. This option doesn't affect Valkey configuration acl-pubsub-default.
        :param builtins.int valkey_active_expire_effort: Valkey reclaims expired keys both when accessed and in the background. The background process scans for expired keys to free memory. Increasing the active-expire-effort setting (default 1, max 10) uses more CPU to reclaim expired keys faster, reducing memory usage but potentially increasing latency. Default: `1`.
        :param builtins.int valkey_io_threads: Set Valkey IO thread count. Changing this will cause a restart of the Valkey service. Example: `1`.
        :param builtins.int valkey_lfu_decay_time: LFU maxmemory-policy counter decay time in minutes. Default: `1`.
        :param builtins.int valkey_lfu_log_factor: Counter logarithm factor for volatile-lfu and allkeys-lfu maxmemory-policies. Default: `10`.
        :param builtins.str valkey_maxmemory_policy: Enum: `allkeys-lfu`, `allkeys-lru`, `allkeys-random`, `noeviction`, `volatile-lfu`, `volatile-lru`, `volatile-random`, `volatile-ttl`. Valkey maxmemory-policy. Default: `noeviction`.
        :param builtins.str valkey_notify_keyspace_events: Set notify-keyspace-events option.
        :param builtins.int valkey_number_of_databases: Set number of Valkey databases. Changing this will cause a restart of the Valkey service. Example: `16`.
        :param builtins.str valkey_persistence: Enum: `off`, `rdb`. When persistence is `rdb`, Valkey does RDB dumps each 10 minutes if any key is changed. Also RDB dumps are done according to backup schedule for backup purposes. When persistence is `off`, no RDB dumps and backups are done, so data can be lost at any moment if service is restarted for any reason, or if service is powered off. Also service can't be forked.
        :param builtins.int valkey_pubsub_client_output_buffer_limit: Set output buffer limit for pub / sub clients in MB. The value is the hard limit, the soft limit is 1/4 of the hard limit. When setting the limit, be mindful of the available memory in the selected service plan. Example: `64`.
        :param builtins.bool valkey_ssl: Require SSL to access Valkey. Default: `true`.
        :param builtins.int valkey_timeout: Valkey idle connection timeout in seconds. Default: `300`.
        """
        if additional_backup_regions is not None:
            pulumi.set(__self__, "additional_backup_regions", additional_backup_regions)
        if backup_hour is not None:
            pulumi.set(__self__, "backup_hour", backup_hour)
        if backup_minute is not None:
            pulumi.set(__self__, "backup_minute", backup_minute)
        if enable_ipv6 is not None:
            pulumi.set(__self__, "enable_ipv6", enable_ipv6)
        if frequent_snapshots is not None:
            pulumi.set(__self__, "frequent_snapshots", frequent_snapshots)
        if ip_filter_objects is not None:
            pulumi.set(__self__, "ip_filter_objects", ip_filter_objects)
        if ip_filter_strings is not None:
            pulumi.set(__self__, "ip_filter_strings", ip_filter_strings)
        if ip_filters is not None:
            pulumi.set(__self__, "ip_filters", ip_filters)
        if migration is not None:
            pulumi.set(__self__, "migration", migration)
        if private_access is not None:
            pulumi.set(__self__, "private_access", private_access)
        if privatelink_access is not None:
            pulumi.set(__self__, "privatelink_access", privatelink_access)
        if project_to_fork_from is not None:
            pulumi.set(__self__, "project_to_fork_from", project_to_fork_from)
        if public_access is not None:
            pulumi.set(__self__, "public_access", public_access)
        if recovery_basebackup_name is not None:
            pulumi.set(__self__, "recovery_basebackup_name", recovery_basebackup_name)
        if service_log is not None:
            pulumi.set(__self__, "service_log", service_log)
        if service_to_fork_from is not None:
            pulumi.set(__self__, "service_to_fork_from", service_to_fork_from)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)
        if valkey_acl_channels_default is not None:
            pulumi.set(__self__, "valkey_acl_channels_default", valkey_acl_channels_default)
        if valkey_active_expire_effort is not None:
            pulumi.set(__self__, "valkey_active_expire_effort", valkey_active_expire_effort)
        if valkey_io_threads is not None:
            pulumi.set(__self__, "valkey_io_threads", valkey_io_threads)
        if valkey_lfu_decay_time is not None:
            pulumi.set(__self__, "valkey_lfu_decay_time", valkey_lfu_decay_time)
        if valkey_lfu_log_factor is not None:
            pulumi.set(__self__, "valkey_lfu_log_factor", valkey_lfu_log_factor)
        if valkey_maxmemory_policy is not None:
            pulumi.set(__self__, "valkey_maxmemory_policy", valkey_maxmemory_policy)
        if valkey_notify_keyspace_events is not None:
            pulumi.set(__self__, "valkey_notify_keyspace_events", valkey_notify_keyspace_events)
        if valkey_number_of_databases is not None:
            pulumi.set(__self__, "valkey_number_of_databases", valkey_number_of_databases)
        if valkey_persistence is not None:
            pulumi.set(__self__, "valkey_persistence", valkey_persistence)
        if valkey_pubsub_client_output_buffer_limit is not None:
            pulumi.set(__self__, "valkey_pubsub_client_output_buffer_limit", valkey_pubsub_client_output_buffer_limit)
        if valkey_ssl is not None:
            pulumi.set(__self__, "valkey_ssl", valkey_ssl)
        if valkey_timeout is not None:
            pulumi.set(__self__, "valkey_timeout", valkey_timeout)

    @property
    @pulumi.getter(name="additionalBackupRegions")
    def additional_backup_regions(self) -> Optional[builtins.str]:
        """
        Additional Cloud Regions for Backup Replication.
        """
        return pulumi.get(self, "additional_backup_regions")

    @property
    @pulumi.getter(name="backupHour")
    def backup_hour(self) -> Optional[builtins.int]:
        """
        The hour of day (in UTC) when backup for the service is started. New backup is only started if previous backup has already completed. Example: `3`.
        """
        return pulumi.get(self, "backup_hour")

    @property
    @pulumi.getter(name="backupMinute")
    def backup_minute(self) -> Optional[builtins.int]:
        """
        The minute of an hour when backup for the service is started. New backup is only started if previous backup has already completed. Example: `30`.
        """
        return pulumi.get(self, "backup_minute")

    @property
    @pulumi.getter(name="enableIpv6")
    def enable_ipv6(self) -> Optional[builtins.bool]:
        """
        Register AAAA DNS records for the service, and allow IPv6 packets to service ports.
        """
        return pulumi.get(self, "enable_ipv6")

    @property
    @pulumi.getter(name="frequentSnapshots")
    def frequent_snapshots(self) -> Optional[builtins.bool]:
        """
        When enabled, Valkey will create frequent local RDB snapshots. When disabled, Valkey will only take RDB snapshots when a backup is created, based on the backup schedule. This setting is ignored when `valkey_persistence` is set to `off`. Default: `true`.
        """
        return pulumi.get(self, "frequent_snapshots")

    @property
    @pulumi.getter(name="ipFilterObjects")
    def ip_filter_objects(self) -> Optional[Sequence['outputs.GetValkeyValkeyUserConfigIpFilterObjectResult']]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`
        """
        return pulumi.get(self, "ip_filter_objects")

    @property
    @pulumi.getter(name="ipFilterStrings")
    def ip_filter_strings(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filter_strings")

    @property
    @pulumi.getter(name="ipFilters")
    @_utilities.deprecated("""Deprecated. Use `ip_filter_string` instead.""")
    def ip_filters(self) -> Optional[Sequence[builtins.str]]:
        """
        Allow incoming connections from CIDR address block, e.g. `10.20.0.0/16`.
        """
        return pulumi.get(self, "ip_filters")

    @property
    @pulumi.getter
    def migration(self) -> Optional['outputs.GetValkeyValkeyUserConfigMigrationResult']:
        """
        Migrate data from existing server
        """
        return pulumi.get(self, "migration")

    @property
    @pulumi.getter(name="privateAccess")
    def private_access(self) -> Optional['outputs.GetValkeyValkeyUserConfigPrivateAccessResult']:
        """
        Allow access to selected service ports from private networks
        """
        return pulumi.get(self, "private_access")

    @property
    @pulumi.getter(name="privatelinkAccess")
    def privatelink_access(self) -> Optional['outputs.GetValkeyValkeyUserConfigPrivatelinkAccessResult']:
        """
        Allow access to selected service components through Privatelink
        """
        return pulumi.get(self, "privatelink_access")

    @property
    @pulumi.getter(name="projectToForkFrom")
    def project_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another project to fork a service from. This has effect only when a new service is being created. Example: `anotherprojectname`.
        """
        return pulumi.get(self, "project_to_fork_from")

    @property
    @pulumi.getter(name="publicAccess")
    def public_access(self) -> Optional['outputs.GetValkeyValkeyUserConfigPublicAccessResult']:
        """
        Allow access to selected service ports from the public Internet
        """
        return pulumi.get(self, "public_access")

    @property
    @pulumi.getter(name="recoveryBasebackupName")
    def recovery_basebackup_name(self) -> Optional[builtins.str]:
        """
        Name of the basebackup to restore in forked service. Example: `backup-20191112t091354293891z`.
        """
        return pulumi.get(self, "recovery_basebackup_name")

    @property
    @pulumi.getter(name="serviceLog")
    def service_log(self) -> Optional[builtins.bool]:
        """
        Store logs for the service so that they are available in the HTTP API and console.
        """
        return pulumi.get(self, "service_log")

    @property
    @pulumi.getter(name="serviceToForkFrom")
    def service_to_fork_from(self) -> Optional[builtins.str]:
        """
        Name of another service to fork from. This has effect only when a new service is being created. Example: `anotherservicename`.
        """
        return pulumi.get(self, "service_to_fork_from")

    @property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[builtins.bool]:
        """
        Use static public IP addresses.
        """
        return pulumi.get(self, "static_ips")

    @property
    @pulumi.getter(name="valkeyAclChannelsDefault")
    def valkey_acl_channels_default(self) -> Optional[builtins.str]:
        """
        Enum: `allchannels`, `resetchannels`. Determines default pub/sub channels' ACL for new users if ACL is not supplied. When this option is not defined, all_channels is assumed to keep backward compatibility. This option doesn't affect Valkey configuration acl-pubsub-default.
        """
        return pulumi.get(self, "valkey_acl_channels_default")

    @property
    @pulumi.getter(name="valkeyActiveExpireEffort")
    def valkey_active_expire_effort(self) -> Optional[builtins.int]:
        """
        Valkey reclaims expired keys both when accessed and in the background. The background process scans for expired keys to free memory. Increasing the active-expire-effort setting (default 1, max 10) uses more CPU to reclaim expired keys faster, reducing memory usage but potentially increasing latency. Default: `1`.
        """
        return pulumi.get(self, "valkey_active_expire_effort")

    @property
    @pulumi.getter(name="valkeyIoThreads")
    def valkey_io_threads(self) -> Optional[builtins.int]:
        """
        Set Valkey IO thread count. Changing this will cause a restart of the Valkey service. Example: `1`.
        """
        return pulumi.get(self, "valkey_io_threads")

    @property
    @pulumi.getter(name="valkeyLfuDecayTime")
    def valkey_lfu_decay_time(self) -> Optional[builtins.int]:
        """
        LFU maxmemory-policy counter decay time in minutes. Default: `1`.
        """
        return pulumi.get(self, "valkey_lfu_decay_time")

    @property
    @pulumi.getter(name="valkeyLfuLogFactor")
    def valkey_lfu_log_factor(self) -> Optional[builtins.int]:
        """
        Counter logarithm factor for volatile-lfu and allkeys-lfu maxmemory-policies. Default: `10`.
        """
        return pulumi.get(self, "valkey_lfu_log_factor")

    @property
    @pulumi.getter(name="valkeyMaxmemoryPolicy")
    def valkey_maxmemory_policy(self) -> Optional[builtins.str]:
        """
        Enum: `allkeys-lfu`, `allkeys-lru`, `allkeys-random`, `noeviction`, `volatile-lfu`, `volatile-lru`, `volatile-random`, `volatile-ttl`. Valkey maxmemory-policy. Default: `noeviction`.
        """
        return pulumi.get(self, "valkey_maxmemory_policy")

    @property
    @pulumi.getter(name="valkeyNotifyKeyspaceEvents")
    def valkey_notify_keyspace_events(self) -> Optional[builtins.str]:
        """
        Set notify-keyspace-events option.
        """
        return pulumi.get(self, "valkey_notify_keyspace_events")

    @property
    @pulumi.getter(name="valkeyNumberOfDatabases")
    def valkey_number_of_databases(self) -> Optional[builtins.int]:
        """
        Set number of Valkey databases. Changing this will cause a restart of the Valkey service. Example: `16`.
        """
        return pulumi.get(self, "valkey_number_of_databases")

    @property
    @pulumi.getter(name="valkeyPersistence")
    def valkey_persistence(self) -> Optional[builtins.str]:
        """
        Enum: `off`, `rdb`. When persistence is `rdb`, Valkey does RDB dumps each 10 minutes if any key is changed. Also RDB dumps are done according to backup schedule for backup purposes. When persistence is `off`, no RDB dumps and backups are done, so data can be lost at any moment if service is restarted for any reason, or if service is powered off. Also service can't be forked.
        """
        return pulumi.get(self, "valkey_persistence")

    @property
    @pulumi.getter(name="valkeyPubsubClientOutputBufferLimit")
    def valkey_pubsub_client_output_buffer_limit(self) -> Optional[builtins.int]:
        """
        Set output buffer limit for pub / sub clients in MB. The value is the hard limit, the soft limit is 1/4 of the hard limit. When setting the limit, be mindful of the available memory in the selected service plan. Example: `64`.
        """
        return pulumi.get(self, "valkey_pubsub_client_output_buffer_limit")

    @property
    @pulumi.getter(name="valkeySsl")
    def valkey_ssl(self) -> Optional[builtins.bool]:
        """
        Require SSL to access Valkey. Default: `true`.
        """
        return pulumi.get(self, "valkey_ssl")

    @property
    @pulumi.getter(name="valkeyTimeout")
    def valkey_timeout(self) -> Optional[builtins.int]:
        """
        Valkey idle connection timeout in seconds. Default: `300`.
        """
        return pulumi.get(self, "valkey_timeout")


@pulumi.output_type
class GetValkeyValkeyUserConfigIpFilterObjectResult(dict):
    def __init__(__self__, *,
                 network: builtins.str,
                 description: Optional[builtins.str] = None):
        """
        :param builtins.str network: CIDR address block. Example: `10.20.0.0/16`.
        :param builtins.str description: Description for IP filter list entry. Example: `Production service IP range`.
        """
        pulumi.set(__self__, "network", network)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def network(self) -> builtins.str:
        """
        CIDR address block. Example: `10.20.0.0/16`.
        """
        return pulumi.get(self, "network")

    @property
    @pulumi.getter
    def description(self) -> Optional[builtins.str]:
        """
        Description for IP filter list entry. Example: `Production service IP range`.
        """
        return pulumi.get(self, "description")


@pulumi.output_type
class GetValkeyValkeyUserConfigMigrationResult(dict):
    def __init__(__self__, *,
                 host: builtins.str,
                 port: builtins.int,
                 dbname: Optional[builtins.str] = None,
                 ignore_dbs: Optional[builtins.str] = None,
                 ignore_roles: Optional[builtins.str] = None,
                 method: Optional[builtins.str] = None,
                 password: Optional[builtins.str] = None,
                 ssl: Optional[builtins.bool] = None,
                 username: Optional[builtins.str] = None):
        """
        :param builtins.str host: Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        :param builtins.int port: Port number of the server where to migrate data from. Example: `1234`.
        :param builtins.str dbname: Database name for bootstrapping the initial connection. Example: `defaultdb`.
        :param builtins.str ignore_dbs: Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        :param builtins.str ignore_roles: Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        :param builtins.str method: Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        :param builtins.str password: Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        :param builtins.bool ssl: The server where to migrate data from is secured with SSL. Default: `true`.
        :param builtins.str username: User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        pulumi.set(__self__, "host", host)
        pulumi.set(__self__, "port", port)
        if dbname is not None:
            pulumi.set(__self__, "dbname", dbname)
        if ignore_dbs is not None:
            pulumi.set(__self__, "ignore_dbs", ignore_dbs)
        if ignore_roles is not None:
            pulumi.set(__self__, "ignore_roles", ignore_roles)
        if method is not None:
            pulumi.set(__self__, "method", method)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssl is not None:
            pulumi.set(__self__, "ssl", ssl)
        if username is not None:
            pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def host(self) -> builtins.str:
        """
        Hostname or IP address of the server where to migrate data from. Example: `my.server.com`.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def port(self) -> builtins.int:
        """
        Port number of the server where to migrate data from. Example: `1234`.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def dbname(self) -> Optional[builtins.str]:
        """
        Database name for bootstrapping the initial connection. Example: `defaultdb`.
        """
        return pulumi.get(self, "dbname")

    @property
    @pulumi.getter(name="ignoreDbs")
    def ignore_dbs(self) -> Optional[builtins.str]:
        """
        Comma-separated list of databases, which should be ignored during migration (supported by MySQL and PostgreSQL only at the moment). Example: `db1,db2`.
        """
        return pulumi.get(self, "ignore_dbs")

    @property
    @pulumi.getter(name="ignoreRoles")
    def ignore_roles(self) -> Optional[builtins.str]:
        """
        Comma-separated list of database roles, which should be ignored during migration (supported by PostgreSQL only at the moment). Example: `role1,role2`.
        """
        return pulumi.get(self, "ignore_roles")

    @property
    @pulumi.getter
    def method(self) -> Optional[builtins.str]:
        """
        Enum: `dump`, `replication`. The migration method to be used (currently supported only by Redis, Dragonfly, MySQL and PostgreSQL service types).
        """
        return pulumi.get(self, "method")

    @property
    @pulumi.getter
    def password(self) -> Optional[builtins.str]:
        """
        Password for authentication with the server where to migrate data from. Example: `jjKk45Nnd`.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def ssl(self) -> Optional[builtins.bool]:
        """
        The server where to migrate data from is secured with SSL. Default: `true`.
        """
        return pulumi.get(self, "ssl")

    @property
    @pulumi.getter
    def username(self) -> Optional[builtins.str]:
        """
        User name for authentication with the server where to migrate data from. Example: `myname`.
        """
        return pulumi.get(self, "username")


@pulumi.output_type
class GetValkeyValkeyUserConfigPrivateAccessResult(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None,
                 valkey: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        :param builtins.bool valkey: Allow clients to connect to valkey with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if valkey is not None:
            pulumi.set(__self__, "valkey", valkey)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter
    def valkey(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to valkey with a DNS name that always resolves to the service's private IP addresses. Only available in certain network locations.
        """
        return pulumi.get(self, "valkey")


@pulumi.output_type
class GetValkeyValkeyUserConfigPrivatelinkAccessResult(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None,
                 valkey: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Enable prometheus.
        :param builtins.bool valkey: Enable valkey.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if valkey is not None:
            pulumi.set(__self__, "valkey", valkey)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Enable prometheus.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter
    def valkey(self) -> Optional[builtins.bool]:
        """
        Enable valkey.
        """
        return pulumi.get(self, "valkey")


@pulumi.output_type
class GetValkeyValkeyUserConfigPublicAccessResult(dict):
    def __init__(__self__, *,
                 prometheus: Optional[builtins.bool] = None,
                 valkey: Optional[builtins.bool] = None):
        """
        :param builtins.bool prometheus: Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        :param builtins.bool valkey: Allow clients to connect to valkey from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        if prometheus is not None:
            pulumi.set(__self__, "prometheus", prometheus)
        if valkey is not None:
            pulumi.set(__self__, "valkey", valkey)

    @property
    @pulumi.getter
    def prometheus(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to prometheus from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "prometheus")

    @property
    @pulumi.getter
    def valkey(self) -> Optional[builtins.bool]:
        """
        Allow clients to connect to valkey from the public internet for service nodes that are in a project VPC or another type of private network.
        """
        return pulumi.get(self, "valkey")


