# 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 as _builtins
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
from ._inputs import *

__all__ = ['M3AggregatorArgs', 'M3Aggregator']

@pulumi.input_type
class M3AggregatorArgs:
    def __init__(__self__, *,
                 plan: pulumi.Input[_builtins.str],
                 project: pulumi.Input[_builtins.str],
                 service_name: pulumi.Input[_builtins.str],
                 additional_disk_space: Optional[pulumi.Input[_builtins.str]] = None,
                 cloud_name: Optional[pulumi.Input[_builtins.str]] = None,
                 disk_space: Optional[pulumi.Input[_builtins.str]] = None,
                 m3aggregator: Optional[pulumi.Input['M3AggregatorM3aggregatorArgs']] = None,
                 m3aggregator_user_config: Optional[pulumi.Input['M3AggregatorM3aggregatorUserConfigArgs']] = None,
                 maintenance_window_dow: Optional[pulumi.Input[_builtins.str]] = None,
                 maintenance_window_time: Optional[pulumi.Input[_builtins.str]] = None,
                 project_vpc_id: Optional[pulumi.Input[_builtins.str]] = None,
                 service_integrations: Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorServiceIntegrationArgs']]]] = None,
                 static_ips: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorTagArgs']]]] = None,
                 tech_emails: Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorTechEmailArgs']]]] = None,
                 termination_protection: Optional[pulumi.Input[_builtins.bool]] = None):
        """
        The set of arguments for constructing a M3Aggregator resource.
        :param pulumi.Input[_builtins.str] plan: Defines what kind of computing resources are allocated for the service. It can be changed after creation, though there are some restrictions when going to a smaller plan such as the new plan must have sufficient amount of disk space to store all current data and switching to a plan with fewer nodes might not be supported. The basic plan names are `hobbyist`, `startup-x`, `business-x` and `premium-x` where `x` is (roughly) the amount of memory on each node (also other attributes like number of CPUs and amount of disk space varies but naming is based on memory). The available options can be seen from the [Aiven pricing page](https://aiven.io/pricing).
        :param pulumi.Input[_builtins.str] project: The name of the project this resource belongs to. To set up proper dependencies please refer to this variable as a reference. Changing this property forces recreation of the resource.
        :param pulumi.Input[_builtins.str] service_name: Specifies the actual name of the service. The name cannot be changed later without destroying and re-creating the service so name should be picked based on intended service usage rather than current attributes.
        :param pulumi.Input[_builtins.str] additional_disk_space: Add [disk storage](https://aiven.io/docs/platform/howto/add-storage-space) in increments of 30  GiB to scale your service. The maximum value depends on the service type and cloud provider. Removing additional storage causes the service nodes to go through a rolling restart, and there might be a short downtime for services without an autoscaler integration or high availability capabilities. The field can be safely removed when autoscaler is enabled without causing any changes.
        :param pulumi.Input[_builtins.str] cloud_name: The cloud provider and region the service is hosted in. The format is `provider-region`, for example: `google-europe-west1`. The [available cloud regions](https://aiven.io/docs/platform/reference/list_of_clouds) can differ per project and service. Changing this value [migrates the service to another cloud provider or region](https://aiven.io/docs/platform/howto/migrate-services-cloud-region). The migration runs in the background and includes a DNS update to redirect traffic to the new region. Most services experience no downtime, but some databases may have a brief interruption during DNS propagation.
        :param pulumi.Input[_builtins.str] disk_space: Service disk space. Possible values depend on the service type, the cloud provider and the project. Therefore, reducing will result in the service rebalancing. Please use `additional_disk_space` to specify the space to be added to the default disk space defined by the plan.
        :param pulumi.Input['M3AggregatorM3aggregatorArgs'] m3aggregator: M3 Aggregator server provided values
        :param pulumi.Input['M3AggregatorM3aggregatorUserConfigArgs'] m3aggregator_user_config: M3aggregator user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later
        :param pulumi.Input[_builtins.str] maintenance_window_dow: Day of week when maintenance operations should be performed. One monday, tuesday, wednesday, etc.
        :param pulumi.Input[_builtins.str] maintenance_window_time: Time of day when maintenance operations should be performed. UTC time in HH:mm:ss format.
        :param pulumi.Input[_builtins.str] project_vpc_id: Specifies the VPC the service should run in. If the value is not set, the service runs on the Public Internet. When set, the value should be given as a reference to set up dependencies correctly, and the VPC must be in the same cloud and region as the service itself. The service can be freely moved to and from VPC after creation, but doing so triggers migration to new servers, so the operation can take a significant amount of time to complete if the service has a lot of data.
        :param pulumi.Input[Sequence[pulumi.Input['M3AggregatorServiceIntegrationArgs']]] service_integrations: Service integrations to specify when creating a service. Not applied after initial service creation
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] static_ips: Static IPs that are going to be associated with this service. Please assign a value using the 'toset' function. Once a static ip resource is in the 'assigned' state it cannot be unbound from the node again
        :param pulumi.Input[Sequence[pulumi.Input['M3AggregatorTagArgs']]] tags: Tags are key-value pairs that allow you to categorize services.
        :param pulumi.Input[Sequence[pulumi.Input['M3AggregatorTechEmailArgs']]] tech_emails: The email addresses for [service contacts](https://aiven.io/docs/platform/howto/technical-emails), who will receive important alerts and updates about this service. You can also set email contacts at the project level.
        :param pulumi.Input[_builtins.bool] termination_protection: Prevents the service from being deleted. It is recommended to set this to `true` for all production services to prevent unintentional service deletion. This does not shield against deleting databases or topics but for services with backups much of the content can at least be restored from backup in case accidental deletion is done.
        """
        pulumi.set(__self__, "plan", plan)
        pulumi.set(__self__, "project", project)
        pulumi.set(__self__, "service_name", service_name)
        if additional_disk_space is not None:
            pulumi.set(__self__, "additional_disk_space", additional_disk_space)
        if cloud_name is not None:
            pulumi.set(__self__, "cloud_name", cloud_name)
        if disk_space is not None:
            warnings.warn("""Please use `additional_disk_space` to specify the space to be added to the default disk space defined by the plan.""", DeprecationWarning)
            pulumi.log.warn("""disk_space is deprecated: Please use `additional_disk_space` to specify the space to be added to the default disk space defined by the plan.""")
        if disk_space is not None:
            pulumi.set(__self__, "disk_space", disk_space)
        if m3aggregator is not None:
            pulumi.set(__self__, "m3aggregator", m3aggregator)
        if m3aggregator_user_config is not None:
            warnings.warn("""This property is deprecated.""", DeprecationWarning)
            pulumi.log.warn("""m3aggregator_user_config is deprecated: This property is deprecated.""")
        if m3aggregator_user_config is not None:
            pulumi.set(__self__, "m3aggregator_user_config", m3aggregator_user_config)
        if maintenance_window_dow is not None:
            pulumi.set(__self__, "maintenance_window_dow", maintenance_window_dow)
        if maintenance_window_time is not None:
            pulumi.set(__self__, "maintenance_window_time", maintenance_window_time)
        if project_vpc_id is not None:
            pulumi.set(__self__, "project_vpc_id", project_vpc_id)
        if service_integrations is not None:
            pulumi.set(__self__, "service_integrations", service_integrations)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if tech_emails is not None:
            pulumi.set(__self__, "tech_emails", tech_emails)
        if termination_protection is not None:
            pulumi.set(__self__, "termination_protection", termination_protection)

    @_builtins.property
    @pulumi.getter
    def plan(self) -> pulumi.Input[_builtins.str]:
        """
        Defines what kind of computing resources are allocated for the service. It can be changed after creation, though there are some restrictions when going to a smaller plan such as the new plan must have sufficient amount of disk space to store all current data and switching to a plan with fewer nodes might not be supported. The basic plan names are `hobbyist`, `startup-x`, `business-x` and `premium-x` where `x` is (roughly) the amount of memory on each node (also other attributes like number of CPUs and amount of disk space varies but naming is based on memory). The available options can be seen from the [Aiven pricing page](https://aiven.io/pricing).
        """
        return pulumi.get(self, "plan")

    @plan.setter
    def plan(self, value: pulumi.Input[_builtins.str]):
        pulumi.set(self, "plan", value)

    @_builtins.property
    @pulumi.getter
    def project(self) -> pulumi.Input[_builtins.str]:
        """
        The name of the project this resource belongs 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, "project")

    @project.setter
    def project(self, value: pulumi.Input[_builtins.str]):
        pulumi.set(self, "project", value)

    @_builtins.property
    @pulumi.getter(name="serviceName")
    def service_name(self) -> pulumi.Input[_builtins.str]:
        """
        Specifies the actual name of the service. The name cannot be changed later without destroying and re-creating the service so name should be picked based on intended service usage rather than current attributes.
        """
        return pulumi.get(self, "service_name")

    @service_name.setter
    def service_name(self, value: pulumi.Input[_builtins.str]):
        pulumi.set(self, "service_name", value)

    @_builtins.property
    @pulumi.getter(name="additionalDiskSpace")
    def additional_disk_space(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Add [disk storage](https://aiven.io/docs/platform/howto/add-storage-space) in increments of 30  GiB to scale your service. The maximum value depends on the service type and cloud provider. Removing additional storage causes the service nodes to go through a rolling restart, and there might be a short downtime for services without an autoscaler integration or high availability capabilities. The field can be safely removed when autoscaler is enabled without causing any changes.
        """
        return pulumi.get(self, "additional_disk_space")

    @additional_disk_space.setter
    def additional_disk_space(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "additional_disk_space", value)

    @_builtins.property
    @pulumi.getter(name="cloudName")
    def cloud_name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The cloud provider and region the service is hosted in. The format is `provider-region`, for example: `google-europe-west1`. The [available cloud regions](https://aiven.io/docs/platform/reference/list_of_clouds) can differ per project and service. Changing this value [migrates the service to another cloud provider or region](https://aiven.io/docs/platform/howto/migrate-services-cloud-region). The migration runs in the background and includes a DNS update to redirect traffic to the new region. Most services experience no downtime, but some databases may have a brief interruption during DNS propagation.
        """
        return pulumi.get(self, "cloud_name")

    @cloud_name.setter
    def cloud_name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "cloud_name", value)

    @_builtins.property
    @pulumi.getter(name="diskSpace")
    @_utilities.deprecated("""Please use `additional_disk_space` to specify the space to be added to the default disk space defined by the plan.""")
    def disk_space(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Service disk space. Possible values depend on the service type, the cloud provider and the project. Therefore, reducing will result in the service rebalancing. Please use `additional_disk_space` to specify the space to be added to the default disk space defined by the plan.
        """
        return pulumi.get(self, "disk_space")

    @disk_space.setter
    def disk_space(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "disk_space", value)

    @_builtins.property
    @pulumi.getter
    def m3aggregator(self) -> Optional[pulumi.Input['M3AggregatorM3aggregatorArgs']]:
        """
        M3 Aggregator server provided values
        """
        return pulumi.get(self, "m3aggregator")

    @m3aggregator.setter
    def m3aggregator(self, value: Optional[pulumi.Input['M3AggregatorM3aggregatorArgs']]):
        pulumi.set(self, "m3aggregator", value)

    @_builtins.property
    @pulumi.getter(name="m3aggregatorUserConfig")
    @_utilities.deprecated("""This property is deprecated.""")
    def m3aggregator_user_config(self) -> Optional[pulumi.Input['M3AggregatorM3aggregatorUserConfigArgs']]:
        """
        M3aggregator user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later
        """
        return pulumi.get(self, "m3aggregator_user_config")

    @m3aggregator_user_config.setter
    def m3aggregator_user_config(self, value: Optional[pulumi.Input['M3AggregatorM3aggregatorUserConfigArgs']]):
        pulumi.set(self, "m3aggregator_user_config", value)

    @_builtins.property
    @pulumi.getter(name="maintenanceWindowDow")
    def maintenance_window_dow(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Day of week when maintenance operations should be performed. One monday, tuesday, wednesday, etc.
        """
        return pulumi.get(self, "maintenance_window_dow")

    @maintenance_window_dow.setter
    def maintenance_window_dow(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "maintenance_window_dow", value)

    @_builtins.property
    @pulumi.getter(name="maintenanceWindowTime")
    def maintenance_window_time(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Time of day when maintenance operations should be performed. UTC time in HH:mm:ss format.
        """
        return pulumi.get(self, "maintenance_window_time")

    @maintenance_window_time.setter
    def maintenance_window_time(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "maintenance_window_time", value)

    @_builtins.property
    @pulumi.getter(name="projectVpcId")
    def project_vpc_id(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies the VPC the service should run in. If the value is not set, the service runs on the Public Internet. When set, the value should be given as a reference to set up dependencies correctly, and the VPC must be in the same cloud and region as the service itself. The service can be freely moved to and from VPC after creation, but doing so triggers migration to new servers, so the operation can take a significant amount of time to complete if the service has a lot of data.
        """
        return pulumi.get(self, "project_vpc_id")

    @project_vpc_id.setter
    def project_vpc_id(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "project_vpc_id", value)

    @_builtins.property
    @pulumi.getter(name="serviceIntegrations")
    def service_integrations(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorServiceIntegrationArgs']]]]:
        """
        Service integrations to specify when creating a service. Not applied after initial service creation
        """
        return pulumi.get(self, "service_integrations")

    @service_integrations.setter
    def service_integrations(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorServiceIntegrationArgs']]]]):
        pulumi.set(self, "service_integrations", value)

    @_builtins.property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        Static IPs that are going to be associated with this service. Please assign a value using the 'toset' function. Once a static ip resource is in the 'assigned' state it cannot be unbound from the node again
        """
        return pulumi.get(self, "static_ips")

    @static_ips.setter
    def static_ips(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]):
        pulumi.set(self, "static_ips", value)

    @_builtins.property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorTagArgs']]]]:
        """
        Tags are key-value pairs that allow you to categorize services.
        """
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorTagArgs']]]]):
        pulumi.set(self, "tags", value)

    @_builtins.property
    @pulumi.getter(name="techEmails")
    def tech_emails(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorTechEmailArgs']]]]:
        """
        The email addresses for [service contacts](https://aiven.io/docs/platform/howto/technical-emails), who will receive important alerts and updates about this service. You can also set email contacts at the project level.
        """
        return pulumi.get(self, "tech_emails")

    @tech_emails.setter
    def tech_emails(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorTechEmailArgs']]]]):
        pulumi.set(self, "tech_emails", value)

    @_builtins.property
    @pulumi.getter(name="terminationProtection")
    def termination_protection(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Prevents the service from being deleted. It is recommended to set this to `true` for all production services to prevent unintentional service deletion. This does not shield against deleting databases or topics but for services with backups much of the content can at least be restored from backup in case accidental deletion is done.
        """
        return pulumi.get(self, "termination_protection")

    @termination_protection.setter
    def termination_protection(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "termination_protection", value)


@pulumi.input_type
class _M3AggregatorState:
    def __init__(__self__, *,
                 additional_disk_space: Optional[pulumi.Input[_builtins.str]] = None,
                 cloud_name: Optional[pulumi.Input[_builtins.str]] = None,
                 components: Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorComponentArgs']]]] = None,
                 disk_space: Optional[pulumi.Input[_builtins.str]] = None,
                 disk_space_cap: Optional[pulumi.Input[_builtins.str]] = None,
                 disk_space_default: Optional[pulumi.Input[_builtins.str]] = None,
                 disk_space_step: Optional[pulumi.Input[_builtins.str]] = None,
                 disk_space_used: Optional[pulumi.Input[_builtins.str]] = None,
                 m3aggregator: Optional[pulumi.Input['M3AggregatorM3aggregatorArgs']] = None,
                 m3aggregator_user_config: Optional[pulumi.Input['M3AggregatorM3aggregatorUserConfigArgs']] = None,
                 maintenance_window_dow: Optional[pulumi.Input[_builtins.str]] = None,
                 maintenance_window_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 maintenance_window_time: Optional[pulumi.Input[_builtins.str]] = None,
                 plan: Optional[pulumi.Input[_builtins.str]] = None,
                 project: Optional[pulumi.Input[_builtins.str]] = None,
                 project_vpc_id: Optional[pulumi.Input[_builtins.str]] = None,
                 service_host: Optional[pulumi.Input[_builtins.str]] = None,
                 service_integrations: Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorServiceIntegrationArgs']]]] = None,
                 service_name: Optional[pulumi.Input[_builtins.str]] = None,
                 service_password: Optional[pulumi.Input[_builtins.str]] = None,
                 service_port: Optional[pulumi.Input[_builtins.int]] = None,
                 service_type: Optional[pulumi.Input[_builtins.str]] = None,
                 service_uri: Optional[pulumi.Input[_builtins.str]] = None,
                 service_username: Optional[pulumi.Input[_builtins.str]] = None,
                 state: Optional[pulumi.Input[_builtins.str]] = None,
                 static_ips: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorTagArgs']]]] = None,
                 tech_emails: Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorTechEmailArgs']]]] = None,
                 termination_protection: Optional[pulumi.Input[_builtins.bool]] = None):
        """
        Input properties used for looking up and filtering M3Aggregator resources.
        :param pulumi.Input[_builtins.str] additional_disk_space: Add [disk storage](https://aiven.io/docs/platform/howto/add-storage-space) in increments of 30  GiB to scale your service. The maximum value depends on the service type and cloud provider. Removing additional storage causes the service nodes to go through a rolling restart, and there might be a short downtime for services without an autoscaler integration or high availability capabilities. The field can be safely removed when autoscaler is enabled without causing any changes.
        :param pulumi.Input[_builtins.str] cloud_name: The cloud provider and region the service is hosted in. The format is `provider-region`, for example: `google-europe-west1`. The [available cloud regions](https://aiven.io/docs/platform/reference/list_of_clouds) can differ per project and service. Changing this value [migrates the service to another cloud provider or region](https://aiven.io/docs/platform/howto/migrate-services-cloud-region). The migration runs in the background and includes a DNS update to redirect traffic to the new region. Most services experience no downtime, but some databases may have a brief interruption during DNS propagation.
        :param pulumi.Input[Sequence[pulumi.Input['M3AggregatorComponentArgs']]] components: Service component information objects
        :param pulumi.Input[_builtins.str] disk_space: Service disk space. Possible values depend on the service type, the cloud provider and the project. Therefore, reducing will result in the service rebalancing. Please use `additional_disk_space` to specify the space to be added to the default disk space defined by the plan.
        :param pulumi.Input[_builtins.str] disk_space_cap: The maximum disk space of the service, possible values depend on the service type, the cloud provider and the project.
        :param pulumi.Input[_builtins.str] disk_space_default: The default disk space of the service, possible values depend on the service type, the cloud provider and the project. Its also the minimum value for `disk_space`
        :param pulumi.Input[_builtins.str] disk_space_step: The default disk space step of the service, possible values depend on the service type, the cloud provider and the project. `disk_space` needs to increment from `disk_space_default` by increments of this size.
        :param pulumi.Input[_builtins.str] disk_space_used: The disk space that the service is currently using. This is the sum of `disk_space` and `additional_disk_space` in human-readable format (for example: `90GiB`).
        :param pulumi.Input['M3AggregatorM3aggregatorArgs'] m3aggregator: M3 Aggregator server provided values
        :param pulumi.Input['M3AggregatorM3aggregatorUserConfigArgs'] m3aggregator_user_config: M3aggregator user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later
        :param pulumi.Input[_builtins.str] maintenance_window_dow: Day of week when maintenance operations should be performed. One monday, tuesday, wednesday, etc.
        :param pulumi.Input[_builtins.bool] maintenance_window_enabled: Indicates whether the maintenance window is currently enabled for this service.
        :param pulumi.Input[_builtins.str] maintenance_window_time: Time of day when maintenance operations should be performed. UTC time in HH:mm:ss format.
        :param pulumi.Input[_builtins.str] plan: Defines what kind of computing resources are allocated for the service. It can be changed after creation, though there are some restrictions when going to a smaller plan such as the new plan must have sufficient amount of disk space to store all current data and switching to a plan with fewer nodes might not be supported. The basic plan names are `hobbyist`, `startup-x`, `business-x` and `premium-x` where `x` is (roughly) the amount of memory on each node (also other attributes like number of CPUs and amount of disk space varies but naming is based on memory). The available options can be seen from the [Aiven pricing page](https://aiven.io/pricing).
        :param pulumi.Input[_builtins.str] project: The name of the project this resource belongs to. To set up proper dependencies please refer to this variable as a reference. Changing this property forces recreation of the resource.
        :param pulumi.Input[_builtins.str] project_vpc_id: Specifies the VPC the service should run in. If the value is not set, the service runs on the Public Internet. When set, the value should be given as a reference to set up dependencies correctly, and the VPC must be in the same cloud and region as the service itself. The service can be freely moved to and from VPC after creation, but doing so triggers migration to new servers, so the operation can take a significant amount of time to complete if the service has a lot of data.
        :param pulumi.Input[_builtins.str] service_host: The hostname of the service.
        :param pulumi.Input[Sequence[pulumi.Input['M3AggregatorServiceIntegrationArgs']]] service_integrations: Service integrations to specify when creating a service. Not applied after initial service creation
        :param pulumi.Input[_builtins.str] service_name: Specifies the actual name of the service. The name cannot be changed later without destroying and re-creating the service so name should be picked based on intended service usage rather than current attributes.
        :param pulumi.Input[_builtins.str] service_password: Password used for connecting to the service, if applicable
        :param pulumi.Input[_builtins.int] service_port: The port of the service
        :param pulumi.Input[_builtins.str] service_type: Aiven internal service type code
        :param pulumi.Input[_builtins.str] service_uri: URI for connecting to the service. Service specific info is under "kafka", "pg", etc.
        :param pulumi.Input[_builtins.str] service_username: Username used for connecting to the service, if applicable
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] static_ips: Static IPs that are going to be associated with this service. Please assign a value using the 'toset' function. Once a static ip resource is in the 'assigned' state it cannot be unbound from the node again
        :param pulumi.Input[Sequence[pulumi.Input['M3AggregatorTagArgs']]] tags: Tags are key-value pairs that allow you to categorize services.
        :param pulumi.Input[Sequence[pulumi.Input['M3AggregatorTechEmailArgs']]] tech_emails: The email addresses for [service contacts](https://aiven.io/docs/platform/howto/technical-emails), who will receive important alerts and updates about this service. You can also set email contacts at the project level.
        :param pulumi.Input[_builtins.bool] termination_protection: Prevents the service from being deleted. It is recommended to set this to `true` for all production services to prevent unintentional service deletion. This does not shield against deleting databases or topics but for services with backups much of the content can at least be restored from backup in case accidental deletion is done.
        """
        if additional_disk_space is not None:
            pulumi.set(__self__, "additional_disk_space", additional_disk_space)
        if cloud_name is not None:
            pulumi.set(__self__, "cloud_name", cloud_name)
        if components is not None:
            pulumi.set(__self__, "components", components)
        if disk_space is not None:
            warnings.warn("""Please use `additional_disk_space` to specify the space to be added to the default disk space defined by the plan.""", DeprecationWarning)
            pulumi.log.warn("""disk_space is deprecated: Please use `additional_disk_space` to specify the space to be added to the default disk space defined by the plan.""")
        if disk_space is not None:
            pulumi.set(__self__, "disk_space", disk_space)
        if disk_space_cap is not None:
            pulumi.set(__self__, "disk_space_cap", disk_space_cap)
        if disk_space_default is not None:
            pulumi.set(__self__, "disk_space_default", disk_space_default)
        if disk_space_step is not None:
            pulumi.set(__self__, "disk_space_step", disk_space_step)
        if disk_space_used is not None:
            pulumi.set(__self__, "disk_space_used", disk_space_used)
        if m3aggregator is not None:
            pulumi.set(__self__, "m3aggregator", m3aggregator)
        if m3aggregator_user_config is not None:
            warnings.warn("""This property is deprecated.""", DeprecationWarning)
            pulumi.log.warn("""m3aggregator_user_config is deprecated: This property is deprecated.""")
        if m3aggregator_user_config is not None:
            pulumi.set(__self__, "m3aggregator_user_config", m3aggregator_user_config)
        if maintenance_window_dow is not None:
            pulumi.set(__self__, "maintenance_window_dow", maintenance_window_dow)
        if maintenance_window_enabled is not None:
            pulumi.set(__self__, "maintenance_window_enabled", maintenance_window_enabled)
        if maintenance_window_time is not None:
            pulumi.set(__self__, "maintenance_window_time", maintenance_window_time)
        if plan is not None:
            pulumi.set(__self__, "plan", plan)
        if project is not None:
            pulumi.set(__self__, "project", project)
        if project_vpc_id is not None:
            pulumi.set(__self__, "project_vpc_id", project_vpc_id)
        if service_host is not None:
            pulumi.set(__self__, "service_host", service_host)
        if service_integrations is not None:
            pulumi.set(__self__, "service_integrations", service_integrations)
        if service_name is not None:
            pulumi.set(__self__, "service_name", service_name)
        if service_password is not None:
            pulumi.set(__self__, "service_password", service_password)
        if service_port is not None:
            pulumi.set(__self__, "service_port", service_port)
        if service_type is not None:
            pulumi.set(__self__, "service_type", service_type)
        if service_uri is not None:
            pulumi.set(__self__, "service_uri", service_uri)
        if service_username is not None:
            pulumi.set(__self__, "service_username", service_username)
        if state is not None:
            pulumi.set(__self__, "state", state)
        if static_ips is not None:
            pulumi.set(__self__, "static_ips", static_ips)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if tech_emails is not None:
            pulumi.set(__self__, "tech_emails", tech_emails)
        if termination_protection is not None:
            pulumi.set(__self__, "termination_protection", termination_protection)

    @_builtins.property
    @pulumi.getter(name="additionalDiskSpace")
    def additional_disk_space(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Add [disk storage](https://aiven.io/docs/platform/howto/add-storage-space) in increments of 30  GiB to scale your service. The maximum value depends on the service type and cloud provider. Removing additional storage causes the service nodes to go through a rolling restart, and there might be a short downtime for services without an autoscaler integration or high availability capabilities. The field can be safely removed when autoscaler is enabled without causing any changes.
        """
        return pulumi.get(self, "additional_disk_space")

    @additional_disk_space.setter
    def additional_disk_space(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "additional_disk_space", value)

    @_builtins.property
    @pulumi.getter(name="cloudName")
    def cloud_name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The cloud provider and region the service is hosted in. The format is `provider-region`, for example: `google-europe-west1`. The [available cloud regions](https://aiven.io/docs/platform/reference/list_of_clouds) can differ per project and service. Changing this value [migrates the service to another cloud provider or region](https://aiven.io/docs/platform/howto/migrate-services-cloud-region). The migration runs in the background and includes a DNS update to redirect traffic to the new region. Most services experience no downtime, but some databases may have a brief interruption during DNS propagation.
        """
        return pulumi.get(self, "cloud_name")

    @cloud_name.setter
    def cloud_name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "cloud_name", value)

    @_builtins.property
    @pulumi.getter
    def components(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorComponentArgs']]]]:
        """
        Service component information objects
        """
        return pulumi.get(self, "components")

    @components.setter
    def components(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorComponentArgs']]]]):
        pulumi.set(self, "components", value)

    @_builtins.property
    @pulumi.getter(name="diskSpace")
    @_utilities.deprecated("""Please use `additional_disk_space` to specify the space to be added to the default disk space defined by the plan.""")
    def disk_space(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Service disk space. Possible values depend on the service type, the cloud provider and the project. Therefore, reducing will result in the service rebalancing. Please use `additional_disk_space` to specify the space to be added to the default disk space defined by the plan.
        """
        return pulumi.get(self, "disk_space")

    @disk_space.setter
    def disk_space(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "disk_space", value)

    @_builtins.property
    @pulumi.getter(name="diskSpaceCap")
    def disk_space_cap(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The maximum disk space of the service, possible values depend on the service type, the cloud provider and the project.
        """
        return pulumi.get(self, "disk_space_cap")

    @disk_space_cap.setter
    def disk_space_cap(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "disk_space_cap", value)

    @_builtins.property
    @pulumi.getter(name="diskSpaceDefault")
    def disk_space_default(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The default disk space of the service, possible values depend on the service type, the cloud provider and the project. Its also the minimum value for `disk_space`
        """
        return pulumi.get(self, "disk_space_default")

    @disk_space_default.setter
    def disk_space_default(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "disk_space_default", value)

    @_builtins.property
    @pulumi.getter(name="diskSpaceStep")
    def disk_space_step(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The default disk space step of the service, possible values depend on the service type, the cloud provider and the project. `disk_space` needs to increment from `disk_space_default` by increments of this size.
        """
        return pulumi.get(self, "disk_space_step")

    @disk_space_step.setter
    def disk_space_step(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "disk_space_step", value)

    @_builtins.property
    @pulumi.getter(name="diskSpaceUsed")
    def disk_space_used(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The disk space that the service is currently using. This is the sum of `disk_space` and `additional_disk_space` in human-readable format (for example: `90GiB`).
        """
        return pulumi.get(self, "disk_space_used")

    @disk_space_used.setter
    def disk_space_used(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "disk_space_used", value)

    @_builtins.property
    @pulumi.getter
    def m3aggregator(self) -> Optional[pulumi.Input['M3AggregatorM3aggregatorArgs']]:
        """
        M3 Aggregator server provided values
        """
        return pulumi.get(self, "m3aggregator")

    @m3aggregator.setter
    def m3aggregator(self, value: Optional[pulumi.Input['M3AggregatorM3aggregatorArgs']]):
        pulumi.set(self, "m3aggregator", value)

    @_builtins.property
    @pulumi.getter(name="m3aggregatorUserConfig")
    @_utilities.deprecated("""This property is deprecated.""")
    def m3aggregator_user_config(self) -> Optional[pulumi.Input['M3AggregatorM3aggregatorUserConfigArgs']]:
        """
        M3aggregator user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later
        """
        return pulumi.get(self, "m3aggregator_user_config")

    @m3aggregator_user_config.setter
    def m3aggregator_user_config(self, value: Optional[pulumi.Input['M3AggregatorM3aggregatorUserConfigArgs']]):
        pulumi.set(self, "m3aggregator_user_config", value)

    @_builtins.property
    @pulumi.getter(name="maintenanceWindowDow")
    def maintenance_window_dow(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Day of week when maintenance operations should be performed. One monday, tuesday, wednesday, etc.
        """
        return pulumi.get(self, "maintenance_window_dow")

    @maintenance_window_dow.setter
    def maintenance_window_dow(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "maintenance_window_dow", value)

    @_builtins.property
    @pulumi.getter(name="maintenanceWindowEnabled")
    def maintenance_window_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Indicates whether the maintenance window is currently enabled for this service.
        """
        return pulumi.get(self, "maintenance_window_enabled")

    @maintenance_window_enabled.setter
    def maintenance_window_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "maintenance_window_enabled", value)

    @_builtins.property
    @pulumi.getter(name="maintenanceWindowTime")
    def maintenance_window_time(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Time of day when maintenance operations should be performed. UTC time in HH:mm:ss format.
        """
        return pulumi.get(self, "maintenance_window_time")

    @maintenance_window_time.setter
    def maintenance_window_time(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "maintenance_window_time", value)

    @_builtins.property
    @pulumi.getter
    def plan(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Defines what kind of computing resources are allocated for the service. It can be changed after creation, though there are some restrictions when going to a smaller plan such as the new plan must have sufficient amount of disk space to store all current data and switching to a plan with fewer nodes might not be supported. The basic plan names are `hobbyist`, `startup-x`, `business-x` and `premium-x` where `x` is (roughly) the amount of memory on each node (also other attributes like number of CPUs and amount of disk space varies but naming is based on memory). The available options can be seen from the [Aiven pricing page](https://aiven.io/pricing).
        """
        return pulumi.get(self, "plan")

    @plan.setter
    def plan(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "plan", value)

    @_builtins.property
    @pulumi.getter
    def project(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The name of the project this resource belongs 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, "project")

    @project.setter
    def project(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "project", value)

    @_builtins.property
    @pulumi.getter(name="projectVpcId")
    def project_vpc_id(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies the VPC the service should run in. If the value is not set, the service runs on the Public Internet. When set, the value should be given as a reference to set up dependencies correctly, and the VPC must be in the same cloud and region as the service itself. The service can be freely moved to and from VPC after creation, but doing so triggers migration to new servers, so the operation can take a significant amount of time to complete if the service has a lot of data.
        """
        return pulumi.get(self, "project_vpc_id")

    @project_vpc_id.setter
    def project_vpc_id(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "project_vpc_id", value)

    @_builtins.property
    @pulumi.getter(name="serviceHost")
    def service_host(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The hostname of the service.
        """
        return pulumi.get(self, "service_host")

    @service_host.setter
    def service_host(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "service_host", value)

    @_builtins.property
    @pulumi.getter(name="serviceIntegrations")
    def service_integrations(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorServiceIntegrationArgs']]]]:
        """
        Service integrations to specify when creating a service. Not applied after initial service creation
        """
        return pulumi.get(self, "service_integrations")

    @service_integrations.setter
    def service_integrations(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorServiceIntegrationArgs']]]]):
        pulumi.set(self, "service_integrations", value)

    @_builtins.property
    @pulumi.getter(name="serviceName")
    def service_name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies the actual name of the service. The name cannot be changed later without destroying and re-creating the service so name should be picked based on intended service usage rather than current attributes.
        """
        return pulumi.get(self, "service_name")

    @service_name.setter
    def service_name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "service_name", value)

    @_builtins.property
    @pulumi.getter(name="servicePassword")
    def service_password(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Password used for connecting to the service, if applicable
        """
        return pulumi.get(self, "service_password")

    @service_password.setter
    def service_password(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "service_password", value)

    @_builtins.property
    @pulumi.getter(name="servicePort")
    def service_port(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The port of the service
        """
        return pulumi.get(self, "service_port")

    @service_port.setter
    def service_port(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "service_port", value)

    @_builtins.property
    @pulumi.getter(name="serviceType")
    def service_type(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Aiven internal service type code
        """
        return pulumi.get(self, "service_type")

    @service_type.setter
    def service_type(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "service_type", value)

    @_builtins.property
    @pulumi.getter(name="serviceUri")
    def service_uri(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        URI for connecting to the service. Service specific info is under "kafka", "pg", etc.
        """
        return pulumi.get(self, "service_uri")

    @service_uri.setter
    def service_uri(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "service_uri", value)

    @_builtins.property
    @pulumi.getter(name="serviceUsername")
    def service_username(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Username used for connecting to the service, if applicable
        """
        return pulumi.get(self, "service_username")

    @service_username.setter
    def service_username(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "service_username", value)

    @_builtins.property
    @pulumi.getter
    def state(self) -> Optional[pulumi.Input[_builtins.str]]:
        return pulumi.get(self, "state")

    @state.setter
    def state(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "state", value)

    @_builtins.property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        Static IPs that are going to be associated with this service. Please assign a value using the 'toset' function. Once a static ip resource is in the 'assigned' state it cannot be unbound from the node again
        """
        return pulumi.get(self, "static_ips")

    @static_ips.setter
    def static_ips(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]):
        pulumi.set(self, "static_ips", value)

    @_builtins.property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorTagArgs']]]]:
        """
        Tags are key-value pairs that allow you to categorize services.
        """
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorTagArgs']]]]):
        pulumi.set(self, "tags", value)

    @_builtins.property
    @pulumi.getter(name="techEmails")
    def tech_emails(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorTechEmailArgs']]]]:
        """
        The email addresses for [service contacts](https://aiven.io/docs/platform/howto/technical-emails), who will receive important alerts and updates about this service. You can also set email contacts at the project level.
        """
        return pulumi.get(self, "tech_emails")

    @tech_emails.setter
    def tech_emails(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['M3AggregatorTechEmailArgs']]]]):
        pulumi.set(self, "tech_emails", value)

    @_builtins.property
    @pulumi.getter(name="terminationProtection")
    def termination_protection(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Prevents the service from being deleted. It is recommended to set this to `true` for all production services to prevent unintentional service deletion. This does not shield against deleting databases or topics but for services with backups much of the content can at least be restored from backup in case accidental deletion is done.
        """
        return pulumi.get(self, "termination_protection")

    @termination_protection.setter
    def termination_protection(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "termination_protection", value)


@pulumi.type_token("aiven:index/m3Aggregator:M3Aggregator")
class M3Aggregator(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 additional_disk_space: Optional[pulumi.Input[_builtins.str]] = None,
                 cloud_name: Optional[pulumi.Input[_builtins.str]] = None,
                 disk_space: Optional[pulumi.Input[_builtins.str]] = None,
                 m3aggregator: Optional[pulumi.Input[Union['M3AggregatorM3aggregatorArgs', 'M3AggregatorM3aggregatorArgsDict']]] = None,
                 m3aggregator_user_config: Optional[pulumi.Input[Union['M3AggregatorM3aggregatorUserConfigArgs', 'M3AggregatorM3aggregatorUserConfigArgsDict']]] = None,
                 maintenance_window_dow: Optional[pulumi.Input[_builtins.str]] = None,
                 maintenance_window_time: Optional[pulumi.Input[_builtins.str]] = None,
                 plan: Optional[pulumi.Input[_builtins.str]] = None,
                 project: Optional[pulumi.Input[_builtins.str]] = None,
                 project_vpc_id: Optional[pulumi.Input[_builtins.str]] = None,
                 service_integrations: Optional[pulumi.Input[Sequence[pulumi.Input[Union['M3AggregatorServiceIntegrationArgs', 'M3AggregatorServiceIntegrationArgsDict']]]]] = None,
                 service_name: Optional[pulumi.Input[_builtins.str]] = None,
                 static_ips: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['M3AggregatorTagArgs', 'M3AggregatorTagArgsDict']]]]] = None,
                 tech_emails: Optional[pulumi.Input[Sequence[pulumi.Input[Union['M3AggregatorTechEmailArgs', 'M3AggregatorTechEmailArgsDict']]]]] = None,
                 termination_protection: Optional[pulumi.Input[_builtins.bool]] = None,
                 __props__=None):
        """
        Create a M3Aggregator resource with the given unique name, props, and options.
        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[_builtins.str] additional_disk_space: Add [disk storage](https://aiven.io/docs/platform/howto/add-storage-space) in increments of 30  GiB to scale your service. The maximum value depends on the service type and cloud provider. Removing additional storage causes the service nodes to go through a rolling restart, and there might be a short downtime for services without an autoscaler integration or high availability capabilities. The field can be safely removed when autoscaler is enabled without causing any changes.
        :param pulumi.Input[_builtins.str] cloud_name: The cloud provider and region the service is hosted in. The format is `provider-region`, for example: `google-europe-west1`. The [available cloud regions](https://aiven.io/docs/platform/reference/list_of_clouds) can differ per project and service. Changing this value [migrates the service to another cloud provider or region](https://aiven.io/docs/platform/howto/migrate-services-cloud-region). The migration runs in the background and includes a DNS update to redirect traffic to the new region. Most services experience no downtime, but some databases may have a brief interruption during DNS propagation.
        :param pulumi.Input[_builtins.str] disk_space: Service disk space. Possible values depend on the service type, the cloud provider and the project. Therefore, reducing will result in the service rebalancing. Please use `additional_disk_space` to specify the space to be added to the default disk space defined by the plan.
        :param pulumi.Input[Union['M3AggregatorM3aggregatorArgs', 'M3AggregatorM3aggregatorArgsDict']] m3aggregator: M3 Aggregator server provided values
        :param pulumi.Input[Union['M3AggregatorM3aggregatorUserConfigArgs', 'M3AggregatorM3aggregatorUserConfigArgsDict']] m3aggregator_user_config: M3aggregator user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later
        :param pulumi.Input[_builtins.str] maintenance_window_dow: Day of week when maintenance operations should be performed. One monday, tuesday, wednesday, etc.
        :param pulumi.Input[_builtins.str] maintenance_window_time: Time of day when maintenance operations should be performed. UTC time in HH:mm:ss format.
        :param pulumi.Input[_builtins.str] plan: Defines what kind of computing resources are allocated for the service. It can be changed after creation, though there are some restrictions when going to a smaller plan such as the new plan must have sufficient amount of disk space to store all current data and switching to a plan with fewer nodes might not be supported. The basic plan names are `hobbyist`, `startup-x`, `business-x` and `premium-x` where `x` is (roughly) the amount of memory on each node (also other attributes like number of CPUs and amount of disk space varies but naming is based on memory). The available options can be seen from the [Aiven pricing page](https://aiven.io/pricing).
        :param pulumi.Input[_builtins.str] project: The name of the project this resource belongs to. To set up proper dependencies please refer to this variable as a reference. Changing this property forces recreation of the resource.
        :param pulumi.Input[_builtins.str] project_vpc_id: Specifies the VPC the service should run in. If the value is not set, the service runs on the Public Internet. When set, the value should be given as a reference to set up dependencies correctly, and the VPC must be in the same cloud and region as the service itself. The service can be freely moved to and from VPC after creation, but doing so triggers migration to new servers, so the operation can take a significant amount of time to complete if the service has a lot of data.
        :param pulumi.Input[Sequence[pulumi.Input[Union['M3AggregatorServiceIntegrationArgs', 'M3AggregatorServiceIntegrationArgsDict']]]] service_integrations: Service integrations to specify when creating a service. Not applied after initial service creation
        :param pulumi.Input[_builtins.str] service_name: Specifies the actual name of the service. The name cannot be changed later without destroying and re-creating the service so name should be picked based on intended service usage rather than current attributes.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] static_ips: Static IPs that are going to be associated with this service. Please assign a value using the 'toset' function. Once a static ip resource is in the 'assigned' state it cannot be unbound from the node again
        :param pulumi.Input[Sequence[pulumi.Input[Union['M3AggregatorTagArgs', 'M3AggregatorTagArgsDict']]]] tags: Tags are key-value pairs that allow you to categorize services.
        :param pulumi.Input[Sequence[pulumi.Input[Union['M3AggregatorTechEmailArgs', 'M3AggregatorTechEmailArgsDict']]]] tech_emails: The email addresses for [service contacts](https://aiven.io/docs/platform/howto/technical-emails), who will receive important alerts and updates about this service. You can also set email contacts at the project level.
        :param pulumi.Input[_builtins.bool] termination_protection: Prevents the service from being deleted. It is recommended to set this to `true` for all production services to prevent unintentional service deletion. This does not shield against deleting databases or topics but for services with backups much of the content can at least be restored from backup in case accidental deletion is done.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: M3AggregatorArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Create a M3Aggregator resource with the given unique name, props, and options.
        :param str resource_name: The name of the resource.
        :param M3AggregatorArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(M3AggregatorArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 additional_disk_space: Optional[pulumi.Input[_builtins.str]] = None,
                 cloud_name: Optional[pulumi.Input[_builtins.str]] = None,
                 disk_space: Optional[pulumi.Input[_builtins.str]] = None,
                 m3aggregator: Optional[pulumi.Input[Union['M3AggregatorM3aggregatorArgs', 'M3AggregatorM3aggregatorArgsDict']]] = None,
                 m3aggregator_user_config: Optional[pulumi.Input[Union['M3AggregatorM3aggregatorUserConfigArgs', 'M3AggregatorM3aggregatorUserConfigArgsDict']]] = None,
                 maintenance_window_dow: Optional[pulumi.Input[_builtins.str]] = None,
                 maintenance_window_time: Optional[pulumi.Input[_builtins.str]] = None,
                 plan: Optional[pulumi.Input[_builtins.str]] = None,
                 project: Optional[pulumi.Input[_builtins.str]] = None,
                 project_vpc_id: Optional[pulumi.Input[_builtins.str]] = None,
                 service_integrations: Optional[pulumi.Input[Sequence[pulumi.Input[Union['M3AggregatorServiceIntegrationArgs', 'M3AggregatorServiceIntegrationArgsDict']]]]] = None,
                 service_name: Optional[pulumi.Input[_builtins.str]] = None,
                 static_ips: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['M3AggregatorTagArgs', 'M3AggregatorTagArgsDict']]]]] = None,
                 tech_emails: Optional[pulumi.Input[Sequence[pulumi.Input[Union['M3AggregatorTechEmailArgs', 'M3AggregatorTechEmailArgsDict']]]]] = None,
                 termination_protection: Optional[pulumi.Input[_builtins.bool]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = M3AggregatorArgs.__new__(M3AggregatorArgs)

            __props__.__dict__["additional_disk_space"] = additional_disk_space
            __props__.__dict__["cloud_name"] = cloud_name
            __props__.__dict__["disk_space"] = disk_space
            __props__.__dict__["m3aggregator"] = None if m3aggregator is None else pulumi.Output.secret(m3aggregator)
            __props__.__dict__["m3aggregator_user_config"] = m3aggregator_user_config
            __props__.__dict__["maintenance_window_dow"] = maintenance_window_dow
            __props__.__dict__["maintenance_window_time"] = maintenance_window_time
            if plan is None and not opts.urn:
                raise TypeError("Missing required property 'plan'")
            __props__.__dict__["plan"] = plan
            if project is None and not opts.urn:
                raise TypeError("Missing required property 'project'")
            __props__.__dict__["project"] = project
            __props__.__dict__["project_vpc_id"] = project_vpc_id
            __props__.__dict__["service_integrations"] = service_integrations
            if service_name is None and not opts.urn:
                raise TypeError("Missing required property 'service_name'")
            __props__.__dict__["service_name"] = service_name
            __props__.__dict__["static_ips"] = static_ips
            __props__.__dict__["tags"] = tags
            __props__.__dict__["tech_emails"] = tech_emails
            __props__.__dict__["termination_protection"] = termination_protection
            __props__.__dict__["components"] = None
            __props__.__dict__["disk_space_cap"] = None
            __props__.__dict__["disk_space_default"] = None
            __props__.__dict__["disk_space_step"] = None
            __props__.__dict__["disk_space_used"] = None
            __props__.__dict__["maintenance_window_enabled"] = None
            __props__.__dict__["service_host"] = None
            __props__.__dict__["service_password"] = None
            __props__.__dict__["service_port"] = None
            __props__.__dict__["service_type"] = None
            __props__.__dict__["service_uri"] = None
            __props__.__dict__["service_username"] = None
            __props__.__dict__["state"] = None
        secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["m3aggregator", "servicePassword", "serviceUri"])
        opts = pulumi.ResourceOptions.merge(opts, secret_opts)
        super(M3Aggregator, __self__).__init__(
            'aiven:index/m3Aggregator:M3Aggregator',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            additional_disk_space: Optional[pulumi.Input[_builtins.str]] = None,
            cloud_name: Optional[pulumi.Input[_builtins.str]] = None,
            components: Optional[pulumi.Input[Sequence[pulumi.Input[Union['M3AggregatorComponentArgs', 'M3AggregatorComponentArgsDict']]]]] = None,
            disk_space: Optional[pulumi.Input[_builtins.str]] = None,
            disk_space_cap: Optional[pulumi.Input[_builtins.str]] = None,
            disk_space_default: Optional[pulumi.Input[_builtins.str]] = None,
            disk_space_step: Optional[pulumi.Input[_builtins.str]] = None,
            disk_space_used: Optional[pulumi.Input[_builtins.str]] = None,
            m3aggregator: Optional[pulumi.Input[Union['M3AggregatorM3aggregatorArgs', 'M3AggregatorM3aggregatorArgsDict']]] = None,
            m3aggregator_user_config: Optional[pulumi.Input[Union['M3AggregatorM3aggregatorUserConfigArgs', 'M3AggregatorM3aggregatorUserConfigArgsDict']]] = None,
            maintenance_window_dow: Optional[pulumi.Input[_builtins.str]] = None,
            maintenance_window_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
            maintenance_window_time: Optional[pulumi.Input[_builtins.str]] = None,
            plan: Optional[pulumi.Input[_builtins.str]] = None,
            project: Optional[pulumi.Input[_builtins.str]] = None,
            project_vpc_id: Optional[pulumi.Input[_builtins.str]] = None,
            service_host: Optional[pulumi.Input[_builtins.str]] = None,
            service_integrations: Optional[pulumi.Input[Sequence[pulumi.Input[Union['M3AggregatorServiceIntegrationArgs', 'M3AggregatorServiceIntegrationArgsDict']]]]] = None,
            service_name: Optional[pulumi.Input[_builtins.str]] = None,
            service_password: Optional[pulumi.Input[_builtins.str]] = None,
            service_port: Optional[pulumi.Input[_builtins.int]] = None,
            service_type: Optional[pulumi.Input[_builtins.str]] = None,
            service_uri: Optional[pulumi.Input[_builtins.str]] = None,
            service_username: Optional[pulumi.Input[_builtins.str]] = None,
            state: Optional[pulumi.Input[_builtins.str]] = None,
            static_ips: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
            tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['M3AggregatorTagArgs', 'M3AggregatorTagArgsDict']]]]] = None,
            tech_emails: Optional[pulumi.Input[Sequence[pulumi.Input[Union['M3AggregatorTechEmailArgs', 'M3AggregatorTechEmailArgsDict']]]]] = None,
            termination_protection: Optional[pulumi.Input[_builtins.bool]] = None) -> 'M3Aggregator':
        """
        Get an existing M3Aggregator resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[_builtins.str] additional_disk_space: Add [disk storage](https://aiven.io/docs/platform/howto/add-storage-space) in increments of 30  GiB to scale your service. The maximum value depends on the service type and cloud provider. Removing additional storage causes the service nodes to go through a rolling restart, and there might be a short downtime for services without an autoscaler integration or high availability capabilities. The field can be safely removed when autoscaler is enabled without causing any changes.
        :param pulumi.Input[_builtins.str] cloud_name: The cloud provider and region the service is hosted in. The format is `provider-region`, for example: `google-europe-west1`. The [available cloud regions](https://aiven.io/docs/platform/reference/list_of_clouds) can differ per project and service. Changing this value [migrates the service to another cloud provider or region](https://aiven.io/docs/platform/howto/migrate-services-cloud-region). The migration runs in the background and includes a DNS update to redirect traffic to the new region. Most services experience no downtime, but some databases may have a brief interruption during DNS propagation.
        :param pulumi.Input[Sequence[pulumi.Input[Union['M3AggregatorComponentArgs', 'M3AggregatorComponentArgsDict']]]] components: Service component information objects
        :param pulumi.Input[_builtins.str] disk_space: Service disk space. Possible values depend on the service type, the cloud provider and the project. Therefore, reducing will result in the service rebalancing. Please use `additional_disk_space` to specify the space to be added to the default disk space defined by the plan.
        :param pulumi.Input[_builtins.str] disk_space_cap: The maximum disk space of the service, possible values depend on the service type, the cloud provider and the project.
        :param pulumi.Input[_builtins.str] disk_space_default: The default disk space of the service, possible values depend on the service type, the cloud provider and the project. Its also the minimum value for `disk_space`
        :param pulumi.Input[_builtins.str] disk_space_step: The default disk space step of the service, possible values depend on the service type, the cloud provider and the project. `disk_space` needs to increment from `disk_space_default` by increments of this size.
        :param pulumi.Input[_builtins.str] disk_space_used: The disk space that the service is currently using. This is the sum of `disk_space` and `additional_disk_space` in human-readable format (for example: `90GiB`).
        :param pulumi.Input[Union['M3AggregatorM3aggregatorArgs', 'M3AggregatorM3aggregatorArgsDict']] m3aggregator: M3 Aggregator server provided values
        :param pulumi.Input[Union['M3AggregatorM3aggregatorUserConfigArgs', 'M3AggregatorM3aggregatorUserConfigArgsDict']] m3aggregator_user_config: M3aggregator user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later
        :param pulumi.Input[_builtins.str] maintenance_window_dow: Day of week when maintenance operations should be performed. One monday, tuesday, wednesday, etc.
        :param pulumi.Input[_builtins.bool] maintenance_window_enabled: Indicates whether the maintenance window is currently enabled for this service.
        :param pulumi.Input[_builtins.str] maintenance_window_time: Time of day when maintenance operations should be performed. UTC time in HH:mm:ss format.
        :param pulumi.Input[_builtins.str] plan: Defines what kind of computing resources are allocated for the service. It can be changed after creation, though there are some restrictions when going to a smaller plan such as the new plan must have sufficient amount of disk space to store all current data and switching to a plan with fewer nodes might not be supported. The basic plan names are `hobbyist`, `startup-x`, `business-x` and `premium-x` where `x` is (roughly) the amount of memory on each node (also other attributes like number of CPUs and amount of disk space varies but naming is based on memory). The available options can be seen from the [Aiven pricing page](https://aiven.io/pricing).
        :param pulumi.Input[_builtins.str] project: The name of the project this resource belongs to. To set up proper dependencies please refer to this variable as a reference. Changing this property forces recreation of the resource.
        :param pulumi.Input[_builtins.str] project_vpc_id: Specifies the VPC the service should run in. If the value is not set, the service runs on the Public Internet. When set, the value should be given as a reference to set up dependencies correctly, and the VPC must be in the same cloud and region as the service itself. The service can be freely moved to and from VPC after creation, but doing so triggers migration to new servers, so the operation can take a significant amount of time to complete if the service has a lot of data.
        :param pulumi.Input[_builtins.str] service_host: The hostname of the service.
        :param pulumi.Input[Sequence[pulumi.Input[Union['M3AggregatorServiceIntegrationArgs', 'M3AggregatorServiceIntegrationArgsDict']]]] service_integrations: Service integrations to specify when creating a service. Not applied after initial service creation
        :param pulumi.Input[_builtins.str] service_name: Specifies the actual name of the service. The name cannot be changed later without destroying and re-creating the service so name should be picked based on intended service usage rather than current attributes.
        :param pulumi.Input[_builtins.str] service_password: Password used for connecting to the service, if applicable
        :param pulumi.Input[_builtins.int] service_port: The port of the service
        :param pulumi.Input[_builtins.str] service_type: Aiven internal service type code
        :param pulumi.Input[_builtins.str] service_uri: URI for connecting to the service. Service specific info is under "kafka", "pg", etc.
        :param pulumi.Input[_builtins.str] service_username: Username used for connecting to the service, if applicable
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] static_ips: Static IPs that are going to be associated with this service. Please assign a value using the 'toset' function. Once a static ip resource is in the 'assigned' state it cannot be unbound from the node again
        :param pulumi.Input[Sequence[pulumi.Input[Union['M3AggregatorTagArgs', 'M3AggregatorTagArgsDict']]]] tags: Tags are key-value pairs that allow you to categorize services.
        :param pulumi.Input[Sequence[pulumi.Input[Union['M3AggregatorTechEmailArgs', 'M3AggregatorTechEmailArgsDict']]]] tech_emails: The email addresses for [service contacts](https://aiven.io/docs/platform/howto/technical-emails), who will receive important alerts and updates about this service. You can also set email contacts at the project level.
        :param pulumi.Input[_builtins.bool] termination_protection: Prevents the service from being deleted. It is recommended to set this to `true` for all production services to prevent unintentional service deletion. This does not shield against deleting databases or topics but for services with backups much of the content can at least be restored from backup in case accidental deletion is done.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _M3AggregatorState.__new__(_M3AggregatorState)

        __props__.__dict__["additional_disk_space"] = additional_disk_space
        __props__.__dict__["cloud_name"] = cloud_name
        __props__.__dict__["components"] = components
        __props__.__dict__["disk_space"] = disk_space
        __props__.__dict__["disk_space_cap"] = disk_space_cap
        __props__.__dict__["disk_space_default"] = disk_space_default
        __props__.__dict__["disk_space_step"] = disk_space_step
        __props__.__dict__["disk_space_used"] = disk_space_used
        __props__.__dict__["m3aggregator"] = m3aggregator
        __props__.__dict__["m3aggregator_user_config"] = m3aggregator_user_config
        __props__.__dict__["maintenance_window_dow"] = maintenance_window_dow
        __props__.__dict__["maintenance_window_enabled"] = maintenance_window_enabled
        __props__.__dict__["maintenance_window_time"] = maintenance_window_time
        __props__.__dict__["plan"] = plan
        __props__.__dict__["project"] = project
        __props__.__dict__["project_vpc_id"] = project_vpc_id
        __props__.__dict__["service_host"] = service_host
        __props__.__dict__["service_integrations"] = service_integrations
        __props__.__dict__["service_name"] = service_name
        __props__.__dict__["service_password"] = service_password
        __props__.__dict__["service_port"] = service_port
        __props__.__dict__["service_type"] = service_type
        __props__.__dict__["service_uri"] = service_uri
        __props__.__dict__["service_username"] = service_username
        __props__.__dict__["state"] = state
        __props__.__dict__["static_ips"] = static_ips
        __props__.__dict__["tags"] = tags
        __props__.__dict__["tech_emails"] = tech_emails
        __props__.__dict__["termination_protection"] = termination_protection
        return M3Aggregator(resource_name, opts=opts, __props__=__props__)

    @_builtins.property
    @pulumi.getter(name="additionalDiskSpace")
    def additional_disk_space(self) -> pulumi.Output[_builtins.str]:
        """
        Add [disk storage](https://aiven.io/docs/platform/howto/add-storage-space) in increments of 30  GiB to scale your service. The maximum value depends on the service type and cloud provider. Removing additional storage causes the service nodes to go through a rolling restart, and there might be a short downtime for services without an autoscaler integration or high availability capabilities. The field can be safely removed when autoscaler is enabled without causing any changes.
        """
        return pulumi.get(self, "additional_disk_space")

    @_builtins.property
    @pulumi.getter(name="cloudName")
    def cloud_name(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The cloud provider and region the service is hosted in. The format is `provider-region`, for example: `google-europe-west1`. The [available cloud regions](https://aiven.io/docs/platform/reference/list_of_clouds) can differ per project and service. Changing this value [migrates the service to another cloud provider or region](https://aiven.io/docs/platform/howto/migrate-services-cloud-region). The migration runs in the background and includes a DNS update to redirect traffic to the new region. Most services experience no downtime, but some databases may have a brief interruption during DNS propagation.
        """
        return pulumi.get(self, "cloud_name")

    @_builtins.property
    @pulumi.getter
    def components(self) -> pulumi.Output[Sequence['outputs.M3AggregatorComponent']]:
        """
        Service component information objects
        """
        return pulumi.get(self, "components")

    @_builtins.property
    @pulumi.getter(name="diskSpace")
    @_utilities.deprecated("""Please use `additional_disk_space` to specify the space to be added to the default disk space defined by the plan.""")
    def disk_space(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Service disk space. Possible values depend on the service type, the cloud provider and the project. Therefore, reducing will result in the service rebalancing. Please use `additional_disk_space` to specify the space to be added to the default disk space defined by the plan.
        """
        return pulumi.get(self, "disk_space")

    @_builtins.property
    @pulumi.getter(name="diskSpaceCap")
    def disk_space_cap(self) -> pulumi.Output[_builtins.str]:
        """
        The maximum disk space of the service, possible values depend on the service type, the cloud provider and the project.
        """
        return pulumi.get(self, "disk_space_cap")

    @_builtins.property
    @pulumi.getter(name="diskSpaceDefault")
    def disk_space_default(self) -> pulumi.Output[_builtins.str]:
        """
        The default disk space of the service, possible values depend on the service type, the cloud provider and the project. Its also the minimum value for `disk_space`
        """
        return pulumi.get(self, "disk_space_default")

    @_builtins.property
    @pulumi.getter(name="diskSpaceStep")
    def disk_space_step(self) -> pulumi.Output[_builtins.str]:
        """
        The default disk space step of the service, possible values depend on the service type, the cloud provider and the project. `disk_space` needs to increment from `disk_space_default` by increments of this size.
        """
        return pulumi.get(self, "disk_space_step")

    @_builtins.property
    @pulumi.getter(name="diskSpaceUsed")
    def disk_space_used(self) -> pulumi.Output[_builtins.str]:
        """
        The disk space that the service is currently using. This is the sum of `disk_space` and `additional_disk_space` in human-readable format (for example: `90GiB`).
        """
        return pulumi.get(self, "disk_space_used")

    @_builtins.property
    @pulumi.getter
    def m3aggregator(self) -> pulumi.Output['outputs.M3AggregatorM3aggregator']:
        """
        M3 Aggregator server provided values
        """
        return pulumi.get(self, "m3aggregator")

    @_builtins.property
    @pulumi.getter(name="m3aggregatorUserConfig")
    @_utilities.deprecated("""This property is deprecated.""")
    def m3aggregator_user_config(self) -> pulumi.Output[Optional['outputs.M3AggregatorM3aggregatorUserConfig']]:
        """
        M3aggregator user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later
        """
        return pulumi.get(self, "m3aggregator_user_config")

    @_builtins.property
    @pulumi.getter(name="maintenanceWindowDow")
    def maintenance_window_dow(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Day of week when maintenance operations should be performed. One monday, tuesday, wednesday, etc.
        """
        return pulumi.get(self, "maintenance_window_dow")

    @_builtins.property
    @pulumi.getter(name="maintenanceWindowEnabled")
    def maintenance_window_enabled(self) -> pulumi.Output[_builtins.bool]:
        """
        Indicates whether the maintenance window is currently enabled for this service.
        """
        return pulumi.get(self, "maintenance_window_enabled")

    @_builtins.property
    @pulumi.getter(name="maintenanceWindowTime")
    def maintenance_window_time(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Time of day when maintenance operations should be performed. UTC time in HH:mm:ss format.
        """
        return pulumi.get(self, "maintenance_window_time")

    @_builtins.property
    @pulumi.getter
    def plan(self) -> pulumi.Output[_builtins.str]:
        """
        Defines what kind of computing resources are allocated for the service. It can be changed after creation, though there are some restrictions when going to a smaller plan such as the new plan must have sufficient amount of disk space to store all current data and switching to a plan with fewer nodes might not be supported. The basic plan names are `hobbyist`, `startup-x`, `business-x` and `premium-x` where `x` is (roughly) the amount of memory on each node (also other attributes like number of CPUs and amount of disk space varies but naming is based on memory). The available options can be seen from the [Aiven pricing page](https://aiven.io/pricing).
        """
        return pulumi.get(self, "plan")

    @_builtins.property
    @pulumi.getter
    def project(self) -> pulumi.Output[_builtins.str]:
        """
        The name of the project this resource belongs 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, "project")

    @_builtins.property
    @pulumi.getter(name="projectVpcId")
    def project_vpc_id(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Specifies the VPC the service should run in. If the value is not set, the service runs on the Public Internet. When set, the value should be given as a reference to set up dependencies correctly, and the VPC must be in the same cloud and region as the service itself. The service can be freely moved to and from VPC after creation, but doing so triggers migration to new servers, so the operation can take a significant amount of time to complete if the service has a lot of data.
        """
        return pulumi.get(self, "project_vpc_id")

    @_builtins.property
    @pulumi.getter(name="serviceHost")
    def service_host(self) -> pulumi.Output[_builtins.str]:
        """
        The hostname of the service.
        """
        return pulumi.get(self, "service_host")

    @_builtins.property
    @pulumi.getter(name="serviceIntegrations")
    def service_integrations(self) -> pulumi.Output[Sequence['outputs.M3AggregatorServiceIntegration']]:
        """
        Service integrations to specify when creating a service. Not applied after initial service creation
        """
        return pulumi.get(self, "service_integrations")

    @_builtins.property
    @pulumi.getter(name="serviceName")
    def service_name(self) -> pulumi.Output[_builtins.str]:
        """
        Specifies the actual name of the service. The name cannot be changed later without destroying and re-creating the service so name should be picked based on intended service usage rather than current attributes.
        """
        return pulumi.get(self, "service_name")

    @_builtins.property
    @pulumi.getter(name="servicePassword")
    def service_password(self) -> pulumi.Output[_builtins.str]:
        """
        Password used for connecting to the service, if applicable
        """
        return pulumi.get(self, "service_password")

    @_builtins.property
    @pulumi.getter(name="servicePort")
    def service_port(self) -> pulumi.Output[_builtins.int]:
        """
        The port of the service
        """
        return pulumi.get(self, "service_port")

    @_builtins.property
    @pulumi.getter(name="serviceType")
    def service_type(self) -> pulumi.Output[_builtins.str]:
        """
        Aiven internal service type code
        """
        return pulumi.get(self, "service_type")

    @_builtins.property
    @pulumi.getter(name="serviceUri")
    def service_uri(self) -> pulumi.Output[_builtins.str]:
        """
        URI for connecting to the service. Service specific info is under "kafka", "pg", etc.
        """
        return pulumi.get(self, "service_uri")

    @_builtins.property
    @pulumi.getter(name="serviceUsername")
    def service_username(self) -> pulumi.Output[_builtins.str]:
        """
        Username used for connecting to the service, if applicable
        """
        return pulumi.get(self, "service_username")

    @_builtins.property
    @pulumi.getter
    def state(self) -> pulumi.Output[_builtins.str]:
        return pulumi.get(self, "state")

    @_builtins.property
    @pulumi.getter(name="staticIps")
    def static_ips(self) -> pulumi.Output[Optional[Sequence[_builtins.str]]]:
        """
        Static IPs that are going to be associated with this service. Please assign a value using the 'toset' function. Once a static ip resource is in the 'assigned' state it cannot be unbound from the node again
        """
        return pulumi.get(self, "static_ips")

    @_builtins.property
    @pulumi.getter
    def tags(self) -> pulumi.Output[Optional[Sequence['outputs.M3AggregatorTag']]]:
        """
        Tags are key-value pairs that allow you to categorize services.
        """
        return pulumi.get(self, "tags")

    @_builtins.property
    @pulumi.getter(name="techEmails")
    def tech_emails(self) -> pulumi.Output[Optional[Sequence['outputs.M3AggregatorTechEmail']]]:
        """
        The email addresses for [service contacts](https://aiven.io/docs/platform/howto/technical-emails), who will receive important alerts and updates about this service. You can also set email contacts at the project level.
        """
        return pulumi.get(self, "tech_emails")

    @_builtins.property
    @pulumi.getter(name="terminationProtection")
    def termination_protection(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        Prevents the service from being deleted. It is recommended to set this to `true` for all production services to prevent unintentional service deletion. This does not shield against deleting databases or topics but for services with backups much of the content can at least be restored from backup in case accidental deletion is done.
        """
        return pulumi.get(self, "termination_protection")

