# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import copy
import warnings
import 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

__all__ = [
    'DatabaseMysqlUpdatesArgs',
    'DatabaseMysqlUpdatesArgsDict',
    'DatabaseMysqlV2PendingUpdateArgs',
    'DatabaseMysqlV2PendingUpdateArgsDict',
    'DatabaseMysqlV2TimeoutsArgs',
    'DatabaseMysqlV2TimeoutsArgsDict',
    'DatabaseMysqlV2UpdatesArgs',
    'DatabaseMysqlV2UpdatesArgsDict',
    'DatabasePostgresqlUpdatesArgs',
    'DatabasePostgresqlUpdatesArgsDict',
    'DatabasePostgresqlV2PendingUpdateArgs',
    'DatabasePostgresqlV2PendingUpdateArgsDict',
    'DatabasePostgresqlV2TimeoutsArgs',
    'DatabasePostgresqlV2TimeoutsArgsDict',
    'DatabasePostgresqlV2UpdatesArgs',
    'DatabasePostgresqlV2UpdatesArgsDict',
    'FirewallDeviceArgs',
    'FirewallDeviceArgsDict',
    'FirewallInboundArgs',
    'FirewallInboundArgsDict',
    'FirewallOutboundArgs',
    'FirewallOutboundArgsDict',
    'ImageReplicationArgs',
    'ImageReplicationArgsDict',
    'ImageTimeoutsArgs',
    'ImageTimeoutsArgsDict',
    'InstanceAlertsArgs',
    'InstanceAlertsArgsDict',
    'InstanceBackupsArgs',
    'InstanceBackupsArgsDict',
    'InstanceBackupsScheduleArgs',
    'InstanceBackupsScheduleArgsDict',
    'InstanceConfigArgs',
    'InstanceConfigArgsDict',
    'InstanceConfigDeviceArgs',
    'InstanceConfigDeviceArgsDict',
    'InstanceConfigDevicesArgs',
    'InstanceConfigDevicesArgsDict',
    'InstanceConfigDevicesSdaArgs',
    'InstanceConfigDevicesSdaArgsDict',
    'InstanceConfigDevicesSdbArgs',
    'InstanceConfigDevicesSdbArgsDict',
    'InstanceConfigDevicesSdcArgs',
    'InstanceConfigDevicesSdcArgsDict',
    'InstanceConfigDevicesSddArgs',
    'InstanceConfigDevicesSddArgsDict',
    'InstanceConfigDevicesSdeArgs',
    'InstanceConfigDevicesSdeArgsDict',
    'InstanceConfigDevicesSdfArgs',
    'InstanceConfigDevicesSdfArgsDict',
    'InstanceConfigDevicesSdgArgs',
    'InstanceConfigDevicesSdgArgsDict',
    'InstanceConfigDevicesSdhArgs',
    'InstanceConfigDevicesSdhArgsDict',
    'InstanceConfigHelperArgs',
    'InstanceConfigHelperArgsDict',
    'InstanceConfigHelpersArgs',
    'InstanceConfigHelpersArgsDict',
    'InstanceConfigInterfaceArgs',
    'InstanceConfigInterfaceArgsDict',
    'InstanceConfigInterfaceIpv4Args',
    'InstanceConfigInterfaceIpv4ArgsDict',
    'InstanceDiskArgs',
    'InstanceDiskArgsDict',
    'InstanceDiskTimeoutsArgs',
    'InstanceDiskTimeoutsArgsDict',
    'InstanceInterfaceArgs',
    'InstanceInterfaceArgsDict',
    'InstanceInterfaceIpv4Args',
    'InstanceInterfaceIpv4ArgsDict',
    'InstanceIpVpcNat11Args',
    'InstanceIpVpcNat11ArgsDict',
    'InstanceMetadataArgs',
    'InstanceMetadataArgsDict',
    'InstancePlacementGroupArgs',
    'InstancePlacementGroupArgsDict',
    'InstanceSpecsArgs',
    'InstanceSpecsArgsDict',
    'LkeClusterControlPlaneArgs',
    'LkeClusterControlPlaneArgsDict',
    'LkeClusterControlPlaneAclArgs',
    'LkeClusterControlPlaneAclArgsDict',
    'LkeClusterControlPlaneAclAddressArgs',
    'LkeClusterControlPlaneAclAddressArgsDict',
    'LkeClusterPoolArgs',
    'LkeClusterPoolArgsDict',
    'LkeClusterPoolAutoscalerArgs',
    'LkeClusterPoolAutoscalerArgsDict',
    'LkeClusterPoolNodeArgs',
    'LkeClusterPoolNodeArgsDict',
    'LkeClusterPoolTaintArgs',
    'LkeClusterPoolTaintArgsDict',
    'LkeNodePoolAutoscalerArgs',
    'LkeNodePoolAutoscalerArgsDict',
    'LkeNodePoolNodeArgs',
    'LkeNodePoolNodeArgsDict',
    'LkeNodePoolTaintArgs',
    'LkeNodePoolTaintArgsDict',
    'NetworkingIpAssignmentAssignmentArgs',
    'NetworkingIpAssignmentAssignmentArgsDict',
    'NodeBalancerConfigNodeStatusArgs',
    'NodeBalancerConfigNodeStatusArgsDict',
    'NodeBalancerFirewallArgs',
    'NodeBalancerFirewallArgsDict',
    'NodeBalancerFirewallInboundArgs',
    'NodeBalancerFirewallInboundArgsDict',
    'NodeBalancerFirewallOutboundArgs',
    'NodeBalancerFirewallOutboundArgsDict',
    'NodeBalancerTransferArgs',
    'NodeBalancerTransferArgsDict',
    'ObjectStorageBucketCertArgs',
    'ObjectStorageBucketCertArgsDict',
    'ObjectStorageBucketLifecycleRuleArgs',
    'ObjectStorageBucketLifecycleRuleArgsDict',
    'ObjectStorageBucketLifecycleRuleExpirationArgs',
    'ObjectStorageBucketLifecycleRuleExpirationArgsDict',
    'ObjectStorageBucketLifecycleRuleNoncurrentVersionExpirationArgs',
    'ObjectStorageBucketLifecycleRuleNoncurrentVersionExpirationArgsDict',
    'ObjectStorageKeyBucketAccessArgs',
    'ObjectStorageKeyBucketAccessArgsDict',
    'ObjectStorageKeyRegionsDetailArgs',
    'ObjectStorageKeyRegionsDetailArgsDict',
    'PlacementGroupMemberArgs',
    'PlacementGroupMemberArgsDict',
    'RdnsTimeoutsArgs',
    'RdnsTimeoutsArgsDict',
    'ReservedIpAssignmentVpcNat11Args',
    'ReservedIpAssignmentVpcNat11ArgsDict',
    'StackScriptUserDefinedFieldArgs',
    'StackScriptUserDefinedFieldArgsDict',
    'UserDomainGrantArgs',
    'UserDomainGrantArgsDict',
    'UserFirewallGrantArgs',
    'UserFirewallGrantArgsDict',
    'UserGlobalGrantsArgs',
    'UserGlobalGrantsArgsDict',
    'UserImageGrantArgs',
    'UserImageGrantArgsDict',
    'UserLinodeGrantArgs',
    'UserLinodeGrantArgsDict',
    'UserLongviewGrantArgs',
    'UserLongviewGrantArgsDict',
    'UserNodebalancerGrantArgs',
    'UserNodebalancerGrantArgsDict',
    'UserStackscriptGrantArgs',
    'UserStackscriptGrantArgsDict',
    'UserVolumeGrantArgs',
    'UserVolumeGrantArgsDict',
    'VolumeTimeoutsArgs',
    'VolumeTimeoutsArgsDict',
    'VpcSubnetLinodeArgs',
    'VpcSubnetLinodeArgsDict',
    'VpcSubnetLinodeInterfaceArgs',
    'VpcSubnetLinodeInterfaceArgsDict',
    'GetAccountAvailabilitiesAvailabilityArgs',
    'GetAccountAvailabilitiesAvailabilityArgsDict',
    'GetAccountAvailabilitiesFilterArgs',
    'GetAccountAvailabilitiesFilterArgsDict',
    'GetAccountLoginsFilterArgs',
    'GetAccountLoginsFilterArgsDict',
    'GetAccountLoginsLoginArgs',
    'GetAccountLoginsLoginArgsDict',
    'GetChildAccountsChildAccountArgs',
    'GetChildAccountsChildAccountArgsDict',
    'GetChildAccountsFilterArgs',
    'GetChildAccountsFilterArgsDict',
    'GetDatabaseBackupsBackupArgs',
    'GetDatabaseBackupsBackupArgsDict',
    'GetDatabaseBackupsFilterArgs',
    'GetDatabaseBackupsFilterArgsDict',
    'GetDatabaseEnginesEngineArgs',
    'GetDatabaseEnginesEngineArgsDict',
    'GetDatabaseEnginesFilterArgs',
    'GetDatabaseEnginesFilterArgsDict',
    'GetDatabaseMysqlBackupsFilterArgs',
    'GetDatabaseMysqlBackupsFilterArgsDict',
    'GetDatabasesDatabaseArgs',
    'GetDatabasesDatabaseArgsDict',
    'GetDatabasesFilterArgs',
    'GetDatabasesFilterArgsDict',
    'GetDomainsDomainArgs',
    'GetDomainsDomainArgsDict',
    'GetDomainsFilterArgs',
    'GetDomainsFilterArgsDict',
    'GetFirewallsFilterArgs',
    'GetFirewallsFilterArgsDict',
    'GetFirewallsFirewallArgs',
    'GetFirewallsFirewallArgsDict',
    'GetFirewallsFirewallDeviceArgs',
    'GetFirewallsFirewallDeviceArgsDict',
    'GetFirewallsFirewallInboundArgs',
    'GetFirewallsFirewallInboundArgsDict',
    'GetFirewallsFirewallOutboundArgs',
    'GetFirewallsFirewallOutboundArgsDict',
    'GetImageReplicationArgs',
    'GetImageReplicationArgsDict',
    'GetImagesFilterArgs',
    'GetImagesFilterArgsDict',
    'GetImagesImageArgs',
    'GetImagesImageArgsDict',
    'GetImagesImageReplicationArgs',
    'GetImagesImageReplicationArgsDict',
    'GetInstanceTypesFilterArgs',
    'GetInstanceTypesFilterArgsDict',
    'GetInstanceTypesTypeArgs',
    'GetInstanceTypesTypeArgsDict',
    'GetInstanceTypesTypeAddonArgs',
    'GetInstanceTypesTypeAddonArgsDict',
    'GetInstanceTypesTypeAddonBackupArgs',
    'GetInstanceTypesTypeAddonBackupArgsDict',
    'GetInstanceTypesTypeAddonBackupPriceArgs',
    'GetInstanceTypesTypeAddonBackupPriceArgsDict',
    'GetInstanceTypesTypeAddonBackupRegionPriceArgs',
    'GetInstanceTypesTypeAddonBackupRegionPriceArgsDict',
    'GetInstanceTypesTypePriceArgs',
    'GetInstanceTypesTypePriceArgsDict',
    'GetInstanceTypesTypeRegionPriceArgs',
    'GetInstanceTypesTypeRegionPriceArgsDict',
    'GetInstancesFilterArgs',
    'GetInstancesFilterArgsDict',
    'GetIpv6RangesFilterArgs',
    'GetIpv6RangesFilterArgsDict',
    'GetIpv6RangesRangeArgs',
    'GetIpv6RangesRangeArgsDict',
    'GetKernelsFilterArgs',
    'GetKernelsFilterArgsDict',
    'GetKernelsKernelArgs',
    'GetKernelsKernelArgsDict',
    'GetLkeClusterControlPlaneArgs',
    'GetLkeClusterControlPlaneArgsDict',
    'GetLkeClusterControlPlaneAclArgs',
    'GetLkeClusterControlPlaneAclArgsDict',
    'GetLkeClusterControlPlaneAclAddressArgs',
    'GetLkeClusterControlPlaneAclAddressArgsDict',
    'GetLkeClusterPoolArgs',
    'GetLkeClusterPoolArgsDict',
    'GetLkeClusterPoolAutoscalerArgs',
    'GetLkeClusterPoolAutoscalerArgsDict',
    'GetLkeClusterPoolDiskArgs',
    'GetLkeClusterPoolDiskArgsDict',
    'GetLkeClusterPoolNodeArgs',
    'GetLkeClusterPoolNodeArgsDict',
    'GetLkeClusterPoolTaintArgs',
    'GetLkeClusterPoolTaintArgsDict',
    'GetLkeClustersFilterArgs',
    'GetLkeClustersFilterArgsDict',
    'GetLkeClustersLkeClusterArgs',
    'GetLkeClustersLkeClusterArgsDict',
    'GetLkeClustersLkeClusterControlPlaneArgs',
    'GetLkeClustersLkeClusterControlPlaneArgsDict',
    'GetLkeTypesFilterArgs',
    'GetLkeTypesFilterArgsDict',
    'GetLkeTypesTypeArgs',
    'GetLkeTypesTypeArgsDict',
    'GetLkeTypesTypePriceArgs',
    'GetLkeTypesTypePriceArgsDict',
    'GetLkeTypesTypeRegionPriceArgs',
    'GetLkeTypesTypeRegionPriceArgsDict',
    'GetNbTypesFilterArgs',
    'GetNbTypesFilterArgsDict',
    'GetNbTypesTypeArgs',
    'GetNbTypesTypeArgsDict',
    'GetNbTypesTypePriceArgs',
    'GetNbTypesTypePriceArgsDict',
    'GetNbTypesTypeRegionPriceArgs',
    'GetNbTypesTypeRegionPriceArgsDict',
    'GetNetworkTransferPricesFilterArgs',
    'GetNetworkTransferPricesFilterArgsDict',
    'GetNetworkTransferPricesTypeArgs',
    'GetNetworkTransferPricesTypeArgsDict',
    'GetNetworkTransferPricesTypePriceArgs',
    'GetNetworkTransferPricesTypePriceArgsDict',
    'GetNetworkTransferPricesTypeRegionPriceArgs',
    'GetNetworkTransferPricesTypeRegionPriceArgsDict',
    'GetNetworkingIpsFilterArgs',
    'GetNetworkingIpsFilterArgsDict',
    'GetNetworkingIpsIpAddressArgs',
    'GetNetworkingIpsIpAddressArgsDict',
    'GetNodeBalancerFirewallArgs',
    'GetNodeBalancerFirewallArgsDict',
    'GetNodeBalancerFirewallInboundArgs',
    'GetNodeBalancerFirewallInboundArgsDict',
    'GetNodeBalancerFirewallOutboundArgs',
    'GetNodeBalancerFirewallOutboundArgsDict',
    'GetNodebalancerConfigsFilterArgs',
    'GetNodebalancerConfigsFilterArgsDict',
    'GetNodebalancerConfigsNodebalancerConfigArgs',
    'GetNodebalancerConfigsNodebalancerConfigArgsDict',
    'GetNodebalancerConfigsNodebalancerConfigNodeStatusArgs',
    'GetNodebalancerConfigsNodebalancerConfigNodeStatusArgsDict',
    'GetNodebalancersFilterArgs',
    'GetNodebalancersFilterArgsDict',
    'GetNodebalancersNodebalancerArgs',
    'GetNodebalancersNodebalancerArgsDict',
    'GetNodebalancersNodebalancerTransferArgs',
    'GetNodebalancersNodebalancerTransferArgsDict',
    'GetPlacementGroupMemberArgs',
    'GetPlacementGroupMemberArgsDict',
    'GetPlacementGroupMigrationsArgs',
    'GetPlacementGroupMigrationsArgsDict',
    'GetPlacementGroupMigrationsInboundArgs',
    'GetPlacementGroupMigrationsInboundArgsDict',
    'GetPlacementGroupMigrationsOutboundArgs',
    'GetPlacementGroupMigrationsOutboundArgsDict',
    'GetPlacementGroupsFilterArgs',
    'GetPlacementGroupsFilterArgsDict',
    'GetPlacementGroupsPlacementGroupArgs',
    'GetPlacementGroupsPlacementGroupArgsDict',
    'GetPlacementGroupsPlacementGroupMemberArgs',
    'GetPlacementGroupsPlacementGroupMemberArgsDict',
    'GetPlacementGroupsPlacementGroupMigrationsArgs',
    'GetPlacementGroupsPlacementGroupMigrationsArgsDict',
    'GetPlacementGroupsPlacementGroupMigrationsInboundArgs',
    'GetPlacementGroupsPlacementGroupMigrationsInboundArgsDict',
    'GetPlacementGroupsPlacementGroupMigrationsOutboundArgs',
    'GetPlacementGroupsPlacementGroupMigrationsOutboundArgsDict',
    'GetRegionResolverArgs',
    'GetRegionResolverArgsDict',
    'GetRegionsFilterArgs',
    'GetRegionsFilterArgsDict',
    'GetRegionsRegionArgs',
    'GetRegionsRegionArgsDict',
    'GetRegionsRegionPlacementGroupLimitArgs',
    'GetRegionsRegionPlacementGroupLimitArgsDict',
    'GetRegionsRegionResolverArgs',
    'GetRegionsRegionResolverArgsDict',
    'GetSshkeysFilterArgs',
    'GetSshkeysFilterArgsDict',
    'GetSshkeysSshkeyArgs',
    'GetSshkeysSshkeyArgsDict',
    'GetStackScriptsFilterArgs',
    'GetStackScriptsFilterArgsDict',
    'GetStackScriptsStackscriptArgs',
    'GetStackScriptsStackscriptArgsDict',
    'GetStackScriptsStackscriptUserDefinedFieldArgs',
    'GetStackScriptsStackscriptUserDefinedFieldArgsDict',
    'GetUserDatabaseGrantArgs',
    'GetUserDatabaseGrantArgsDict',
    'GetUserDomainGrantArgs',
    'GetUserDomainGrantArgsDict',
    'GetUserFirewallGrantArgs',
    'GetUserFirewallGrantArgsDict',
    'GetUserImageGrantArgs',
    'GetUserImageGrantArgsDict',
    'GetUserLinodeGrantArgs',
    'GetUserLinodeGrantArgsDict',
    'GetUserLongviewGrantArgs',
    'GetUserLongviewGrantArgsDict',
    'GetUserNodebalancerGrantArgs',
    'GetUserNodebalancerGrantArgsDict',
    'GetUserStackscriptGrantArgs',
    'GetUserStackscriptGrantArgsDict',
    'GetUserVolumeGrantArgs',
    'GetUserVolumeGrantArgsDict',
    'GetUsersFilterArgs',
    'GetUsersFilterArgsDict',
    'GetUsersUserArgs',
    'GetUsersUserArgsDict',
    'GetUsersUserDatabaseGrantArgs',
    'GetUsersUserDatabaseGrantArgsDict',
    'GetUsersUserDomainGrantArgs',
    'GetUsersUserDomainGrantArgsDict',
    'GetUsersUserFirewallGrantArgs',
    'GetUsersUserFirewallGrantArgsDict',
    'GetUsersUserGlobalGrantArgs',
    'GetUsersUserGlobalGrantArgsDict',
    'GetUsersUserImageGrantArgs',
    'GetUsersUserImageGrantArgsDict',
    'GetUsersUserLinodeGrantArgs',
    'GetUsersUserLinodeGrantArgsDict',
    'GetUsersUserLongviewGrantArgs',
    'GetUsersUserLongviewGrantArgsDict',
    'GetUsersUserNodebalancerGrantArgs',
    'GetUsersUserNodebalancerGrantArgsDict',
    'GetUsersUserStackscriptGrantArgs',
    'GetUsersUserStackscriptGrantArgsDict',
    'GetUsersUserVolumeGrantArgs',
    'GetUsersUserVolumeGrantArgsDict',
    'GetVlansFilterArgs',
    'GetVlansFilterArgsDict',
    'GetVlansVlanArgs',
    'GetVlansVlanArgsDict',
    'GetVolumeTypesFilterArgs',
    'GetVolumeTypesFilterArgsDict',
    'GetVolumeTypesTypeArgs',
    'GetVolumeTypesTypeArgsDict',
    'GetVolumeTypesTypePriceArgs',
    'GetVolumeTypesTypePriceArgsDict',
    'GetVolumeTypesTypeRegionPriceArgs',
    'GetVolumeTypesTypeRegionPriceArgsDict',
    'GetVolumesFilterArgs',
    'GetVolumesFilterArgsDict',
    'GetVolumesVolumeArgs',
    'GetVolumesVolumeArgsDict',
    'GetVpcIpsFilterArgs',
    'GetVpcIpsFilterArgsDict',
    'GetVpcIpsVpcIpArgs',
    'GetVpcIpsVpcIpArgsDict',
    'GetVpcSubnetsFilterArgs',
    'GetVpcSubnetsFilterArgsDict',
    'GetVpcSubnetsVpcSubnetArgs',
    'GetVpcSubnetsVpcSubnetArgsDict',
    'GetVpcSubnetsVpcSubnetLinodeArgs',
    'GetVpcSubnetsVpcSubnetLinodeArgsDict',
    'GetVpcSubnetsVpcSubnetLinodeInterfaceArgs',
    'GetVpcSubnetsVpcSubnetLinodeInterfaceArgsDict',
    'GetVpcsFilterArgs',
    'GetVpcsFilterArgsDict',
    'GetVpcsVpcArgs',
    'GetVpcsVpcArgsDict',
]

MYPY = False

if not MYPY:
    class DatabaseMysqlUpdatesArgsDict(TypedDict):
        day_of_week: pulumi.Input[str]
        """
        The day to perform maintenance.
        """
        duration: pulumi.Input[int]
        """
        The maximum maintenance window time in hours.
        """
        frequency: pulumi.Input[str]
        """
        Whether maintenance occurs on a weekly or monthly basis.
        """
        hour_of_day: pulumi.Input[int]
        """
        The hour to begin maintenance based in UTC time.
        """
        week_of_month: NotRequired[pulumi.Input[int]]
        """
        The week of the month to perform monthly frequency updates. Required for monthly frequency updates.
        """
elif False:
    DatabaseMysqlUpdatesArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class DatabaseMysqlUpdatesArgs:
    def __init__(__self__, *,
                 day_of_week: pulumi.Input[str],
                 duration: pulumi.Input[int],
                 frequency: pulumi.Input[str],
                 hour_of_day: pulumi.Input[int],
                 week_of_month: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] day_of_week: The day to perform maintenance.
        :param pulumi.Input[int] duration: The maximum maintenance window time in hours.
        :param pulumi.Input[str] frequency: Whether maintenance occurs on a weekly or monthly basis.
        :param pulumi.Input[int] hour_of_day: The hour to begin maintenance based in UTC time.
        :param pulumi.Input[int] week_of_month: The week of the month to perform monthly frequency updates. Required for monthly frequency updates.
        """
        pulumi.set(__self__, "day_of_week", day_of_week)
        pulumi.set(__self__, "duration", duration)
        pulumi.set(__self__, "frequency", frequency)
        pulumi.set(__self__, "hour_of_day", hour_of_day)
        if week_of_month is not None:
            pulumi.set(__self__, "week_of_month", week_of_month)

    @property
    @pulumi.getter(name="dayOfWeek")
    def day_of_week(self) -> pulumi.Input[str]:
        """
        The day to perform maintenance.
        """
        return pulumi.get(self, "day_of_week")

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

    @property
    @pulumi.getter
    def duration(self) -> pulumi.Input[int]:
        """
        The maximum maintenance window time in hours.
        """
        return pulumi.get(self, "duration")

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

    @property
    @pulumi.getter
    def frequency(self) -> pulumi.Input[str]:
        """
        Whether maintenance occurs on a weekly or monthly basis.
        """
        return pulumi.get(self, "frequency")

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

    @property
    @pulumi.getter(name="hourOfDay")
    def hour_of_day(self) -> pulumi.Input[int]:
        """
        The hour to begin maintenance based in UTC time.
        """
        return pulumi.get(self, "hour_of_day")

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

    @property
    @pulumi.getter(name="weekOfMonth")
    def week_of_month(self) -> Optional[pulumi.Input[int]]:
        """
        The week of the month to perform monthly frequency updates. Required for monthly frequency updates.
        """
        return pulumi.get(self, "week_of_month")

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


if not MYPY:
    class DatabaseMysqlV2PendingUpdateArgsDict(TypedDict):
        deadline: pulumi.Input[str]
        description: pulumi.Input[str]
        planned_for: pulumi.Input[str]
elif False:
    DatabaseMysqlV2PendingUpdateArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class DatabaseMysqlV2PendingUpdateArgs:
    def __init__(__self__, *,
                 deadline: pulumi.Input[str],
                 description: pulumi.Input[str],
                 planned_for: pulumi.Input[str]):
        pulumi.set(__self__, "deadline", deadline)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "planned_for", planned_for)

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

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

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

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

    @property
    @pulumi.getter(name="plannedFor")
    def planned_for(self) -> pulumi.Input[str]:
        return pulumi.get(self, "planned_for")

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


if not MYPY:
    class DatabaseMysqlV2TimeoutsArgsDict(TypedDict):
        create: NotRequired[pulumi.Input[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).
        """
        delete: NotRequired[pulumi.Input[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.
        """
        update: NotRequired[pulumi.Input[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).
        """
elif False:
    DatabaseMysqlV2TimeoutsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class DatabaseMysqlV2TimeoutsArgs:
    def __init__(__self__, *,
                 create: Optional[pulumi.Input[str]] = None,
                 delete: Optional[pulumi.Input[str]] = None,
                 update: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 update is not None:
            pulumi.set(__self__, "update", update)

    @property
    @pulumi.getter
    def create(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter
    def delete(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter
    def update(self) -> Optional[pulumi.Input[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")

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


if not MYPY:
    class DatabaseMysqlV2UpdatesArgsDict(TypedDict):
        day_of_week: pulumi.Input[int]
        duration: pulumi.Input[int]
        frequency: pulumi.Input[str]
        hour_of_day: pulumi.Input[int]
elif False:
    DatabaseMysqlV2UpdatesArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class DatabaseMysqlV2UpdatesArgs:
    def __init__(__self__, *,
                 day_of_week: pulumi.Input[int],
                 duration: pulumi.Input[int],
                 frequency: pulumi.Input[str],
                 hour_of_day: pulumi.Input[int]):
        pulumi.set(__self__, "day_of_week", day_of_week)
        pulumi.set(__self__, "duration", duration)
        pulumi.set(__self__, "frequency", frequency)
        pulumi.set(__self__, "hour_of_day", hour_of_day)

    @property
    @pulumi.getter(name="dayOfWeek")
    def day_of_week(self) -> pulumi.Input[int]:
        return pulumi.get(self, "day_of_week")

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

    @property
    @pulumi.getter
    def duration(self) -> pulumi.Input[int]:
        return pulumi.get(self, "duration")

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

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

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

    @property
    @pulumi.getter(name="hourOfDay")
    def hour_of_day(self) -> pulumi.Input[int]:
        return pulumi.get(self, "hour_of_day")

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


if not MYPY:
    class DatabasePostgresqlUpdatesArgsDict(TypedDict):
        day_of_week: pulumi.Input[str]
        """
        The day to perform maintenance.
        """
        duration: pulumi.Input[int]
        """
        The maximum maintenance window time in hours.
        """
        frequency: pulumi.Input[str]
        """
        Whether maintenance occurs on a weekly or monthly basis.
        """
        hour_of_day: pulumi.Input[int]
        """
        The hour to begin maintenance based in UTC time.
        """
        week_of_month: NotRequired[pulumi.Input[int]]
        """
        The week of the month to perform monthly frequency updates. Required for monthly frequency updates.
        """
elif False:
    DatabasePostgresqlUpdatesArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class DatabasePostgresqlUpdatesArgs:
    def __init__(__self__, *,
                 day_of_week: pulumi.Input[str],
                 duration: pulumi.Input[int],
                 frequency: pulumi.Input[str],
                 hour_of_day: pulumi.Input[int],
                 week_of_month: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] day_of_week: The day to perform maintenance.
        :param pulumi.Input[int] duration: The maximum maintenance window time in hours.
        :param pulumi.Input[str] frequency: Whether maintenance occurs on a weekly or monthly basis.
        :param pulumi.Input[int] hour_of_day: The hour to begin maintenance based in UTC time.
        :param pulumi.Input[int] week_of_month: The week of the month to perform monthly frequency updates. Required for monthly frequency updates.
        """
        pulumi.set(__self__, "day_of_week", day_of_week)
        pulumi.set(__self__, "duration", duration)
        pulumi.set(__self__, "frequency", frequency)
        pulumi.set(__self__, "hour_of_day", hour_of_day)
        if week_of_month is not None:
            pulumi.set(__self__, "week_of_month", week_of_month)

    @property
    @pulumi.getter(name="dayOfWeek")
    def day_of_week(self) -> pulumi.Input[str]:
        """
        The day to perform maintenance.
        """
        return pulumi.get(self, "day_of_week")

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

    @property
    @pulumi.getter
    def duration(self) -> pulumi.Input[int]:
        """
        The maximum maintenance window time in hours.
        """
        return pulumi.get(self, "duration")

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

    @property
    @pulumi.getter
    def frequency(self) -> pulumi.Input[str]:
        """
        Whether maintenance occurs on a weekly or monthly basis.
        """
        return pulumi.get(self, "frequency")

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

    @property
    @pulumi.getter(name="hourOfDay")
    def hour_of_day(self) -> pulumi.Input[int]:
        """
        The hour to begin maintenance based in UTC time.
        """
        return pulumi.get(self, "hour_of_day")

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

    @property
    @pulumi.getter(name="weekOfMonth")
    def week_of_month(self) -> Optional[pulumi.Input[int]]:
        """
        The week of the month to perform monthly frequency updates. Required for monthly frequency updates.
        """
        return pulumi.get(self, "week_of_month")

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


if not MYPY:
    class DatabasePostgresqlV2PendingUpdateArgsDict(TypedDict):
        deadline: pulumi.Input[str]
        description: pulumi.Input[str]
        planned_for: pulumi.Input[str]
elif False:
    DatabasePostgresqlV2PendingUpdateArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class DatabasePostgresqlV2PendingUpdateArgs:
    def __init__(__self__, *,
                 deadline: pulumi.Input[str],
                 description: pulumi.Input[str],
                 planned_for: pulumi.Input[str]):
        pulumi.set(__self__, "deadline", deadline)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "planned_for", planned_for)

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

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

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

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

    @property
    @pulumi.getter(name="plannedFor")
    def planned_for(self) -> pulumi.Input[str]:
        return pulumi.get(self, "planned_for")

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


if not MYPY:
    class DatabasePostgresqlV2TimeoutsArgsDict(TypedDict):
        create: NotRequired[pulumi.Input[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).
        """
        delete: NotRequired[pulumi.Input[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.
        """
        update: NotRequired[pulumi.Input[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).
        """
elif False:
    DatabasePostgresqlV2TimeoutsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class DatabasePostgresqlV2TimeoutsArgs:
    def __init__(__self__, *,
                 create: Optional[pulumi.Input[str]] = None,
                 delete: Optional[pulumi.Input[str]] = None,
                 update: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 update is not None:
            pulumi.set(__self__, "update", update)

    @property
    @pulumi.getter
    def create(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter
    def delete(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter
    def update(self) -> Optional[pulumi.Input[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")

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


if not MYPY:
    class DatabasePostgresqlV2UpdatesArgsDict(TypedDict):
        day_of_week: pulumi.Input[int]
        duration: pulumi.Input[int]
        frequency: pulumi.Input[str]
        hour_of_day: pulumi.Input[int]
elif False:
    DatabasePostgresqlV2UpdatesArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class DatabasePostgresqlV2UpdatesArgs:
    def __init__(__self__, *,
                 day_of_week: pulumi.Input[int],
                 duration: pulumi.Input[int],
                 frequency: pulumi.Input[str],
                 hour_of_day: pulumi.Input[int]):
        pulumi.set(__self__, "day_of_week", day_of_week)
        pulumi.set(__self__, "duration", duration)
        pulumi.set(__self__, "frequency", frequency)
        pulumi.set(__self__, "hour_of_day", hour_of_day)

    @property
    @pulumi.getter(name="dayOfWeek")
    def day_of_week(self) -> pulumi.Input[int]:
        return pulumi.get(self, "day_of_week")

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

    @property
    @pulumi.getter
    def duration(self) -> pulumi.Input[int]:
        return pulumi.get(self, "duration")

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

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

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

    @property
    @pulumi.getter(name="hourOfDay")
    def hour_of_day(self) -> pulumi.Input[int]:
        return pulumi.get(self, "hour_of_day")

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


if not MYPY:
    class FirewallDeviceArgsDict(TypedDict):
        entity_id: pulumi.Input[int]
        """
        The ID of the underlying entity this device references (i.e. the Linode's ID).
        """
        id: pulumi.Input[int]
        """
        The ID of the Firewall Device.
        """
        label: pulumi.Input[str]
        """
        This Firewall's unique label.
        """
        type: pulumi.Input[str]
        """
        The type of Firewall Device.
        """
        url: pulumi.Input[str]
        """
        The URL of the underlying entity this device references.
        """
elif False:
    FirewallDeviceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallDeviceArgs:
    def __init__(__self__, *,
                 entity_id: pulumi.Input[int],
                 id: pulumi.Input[int],
                 label: pulumi.Input[str],
                 type: pulumi.Input[str],
                 url: pulumi.Input[str]):
        """
        :param pulumi.Input[int] entity_id: The ID of the underlying entity this device references (i.e. the Linode's ID).
        :param pulumi.Input[int] id: The ID of the Firewall Device.
        :param pulumi.Input[str] label: This Firewall's unique label.
        :param pulumi.Input[str] type: The type of Firewall Device.
        :param pulumi.Input[str] url: The URL of the underlying entity this device references.
        """
        pulumi.set(__self__, "entity_id", entity_id)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "url", url)

    @property
    @pulumi.getter(name="entityId")
    def entity_id(self) -> pulumi.Input[int]:
        """
        The ID of the underlying entity this device references (i.e. the Linode's ID).
        """
        return pulumi.get(self, "entity_id")

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

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[int]:
        """
        The ID of the Firewall Device.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def label(self) -> pulumi.Input[str]:
        """
        This Firewall's unique label.
        """
        return pulumi.get(self, "label")

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

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        The type of Firewall Device.
        """
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter
    def url(self) -> pulumi.Input[str]:
        """
        The URL of the underlying entity this device references.
        """
        return pulumi.get(self, "url")

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


if not MYPY:
    class FirewallInboundArgsDict(TypedDict):
        action: pulumi.Input[str]
        """
        Controls whether traffic is accepted or dropped by this rule (`ACCEPT`, `DROP`). Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        """
        label: pulumi.Input[str]
        """
        Used to identify this rule. For display purposes only.
        """
        protocol: pulumi.Input[str]
        """
        The network protocol this rule controls. (`TCP`, `UDP`, `ICMP`)
        """
        description: NotRequired[pulumi.Input[str]]
        """
        Used to describe this rule. For display purposes only.
        """
        ipv4s: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of IPv4 addresses or networks. Must be in IP/mask (CIDR) format.
        """
        ipv6s: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of IPv6 addresses or networks. Must be in IP/mask (CIDR) format.
        """
        ports: NotRequired[pulumi.Input[str]]
        """
        A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
elif False:
    FirewallInboundArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallInboundArgs:
    def __init__(__self__, *,
                 action: pulumi.Input[str],
                 label: pulumi.Input[str],
                 protocol: pulumi.Input[str],
                 description: Optional[pulumi.Input[str]] = None,
                 ipv4s: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ipv6s: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ports: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] action: Controls whether traffic is accepted or dropped by this rule (`ACCEPT`, `DROP`). Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        :param pulumi.Input[str] label: Used to identify this rule. For display purposes only.
        :param pulumi.Input[str] protocol: The network protocol this rule controls. (`TCP`, `UDP`, `ICMP`)
        :param pulumi.Input[str] description: Used to describe this rule. For display purposes only.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ipv4s: A list of IPv4 addresses or networks. Must be in IP/mask (CIDR) format.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ipv6s: A list of IPv6 addresses or networks. Must be in IP/mask (CIDR) format.
        :param pulumi.Input[str] ports: A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
        pulumi.set(__self__, "action", action)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "protocol", protocol)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if ipv4s is not None:
            pulumi.set(__self__, "ipv4s", ipv4s)
        if ipv6s is not None:
            pulumi.set(__self__, "ipv6s", ipv6s)
        if ports is not None:
            pulumi.set(__self__, "ports", ports)

    @property
    @pulumi.getter
    def action(self) -> pulumi.Input[str]:
        """
        Controls whether traffic is accepted or dropped by this rule (`ACCEPT`, `DROP`). Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        """
        return pulumi.get(self, "action")

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

    @property
    @pulumi.getter
    def label(self) -> pulumi.Input[str]:
        """
        Used to identify this rule. For display purposes only.
        """
        return pulumi.get(self, "label")

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

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        """
        The network protocol this rule controls. (`TCP`, `UDP`, `ICMP`)
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        Used to describe this rule. For display purposes only.
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter
    def ipv4s(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of IPv4 addresses or networks. Must be in IP/mask (CIDR) format.
        """
        return pulumi.get(self, "ipv4s")

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

    @property
    @pulumi.getter
    def ipv6s(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of IPv6 addresses or networks. Must be in IP/mask (CIDR) format.
        """
        return pulumi.get(self, "ipv6s")

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

    @property
    @pulumi.getter
    def ports(self) -> Optional[pulumi.Input[str]]:
        """
        A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
        return pulumi.get(self, "ports")

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


if not MYPY:
    class FirewallOutboundArgsDict(TypedDict):
        action: pulumi.Input[str]
        """
        Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        """
        label: pulumi.Input[str]
        """
        This Firewall's unique label.
        """
        protocol: pulumi.Input[str]
        """
        The network protocol this rule controls.
        """
        description: NotRequired[pulumi.Input[str]]
        """
        Used to describe this rule. For display purposes only.
        """
        ipv4s: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of CIDR blocks or 0.0.0.0/0 (to allow all) this rule applies to.
        """
        ipv6s: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of IPv6 addresses or networks this rule applies to.
        """
        ports: NotRequired[pulumi.Input[str]]
        """
        A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
elif False:
    FirewallOutboundArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallOutboundArgs:
    def __init__(__self__, *,
                 action: pulumi.Input[str],
                 label: pulumi.Input[str],
                 protocol: pulumi.Input[str],
                 description: Optional[pulumi.Input[str]] = None,
                 ipv4s: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ipv6s: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ports: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] action: Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        :param pulumi.Input[str] label: This Firewall's unique label.
        :param pulumi.Input[str] protocol: The network protocol this rule controls.
        :param pulumi.Input[str] description: Used to describe this rule. For display purposes only.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ipv4s: A list of CIDR blocks or 0.0.0.0/0 (to allow all) this rule applies to.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ipv6s: A list of IPv6 addresses or networks this rule applies to.
        :param pulumi.Input[str] ports: A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
        pulumi.set(__self__, "action", action)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "protocol", protocol)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if ipv4s is not None:
            pulumi.set(__self__, "ipv4s", ipv4s)
        if ipv6s is not None:
            pulumi.set(__self__, "ipv6s", ipv6s)
        if ports is not None:
            pulumi.set(__self__, "ports", ports)

    @property
    @pulumi.getter
    def action(self) -> pulumi.Input[str]:
        """
        Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        """
        return pulumi.get(self, "action")

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

    @property
    @pulumi.getter
    def label(self) -> pulumi.Input[str]:
        """
        This Firewall's unique label.
        """
        return pulumi.get(self, "label")

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

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        """
        The network protocol this rule controls.
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        Used to describe this rule. For display purposes only.
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter
    def ipv4s(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of CIDR blocks or 0.0.0.0/0 (to allow all) this rule applies to.
        """
        return pulumi.get(self, "ipv4s")

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

    @property
    @pulumi.getter
    def ipv6s(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of IPv6 addresses or networks this rule applies to.
        """
        return pulumi.get(self, "ipv6s")

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

    @property
    @pulumi.getter
    def ports(self) -> Optional[pulumi.Input[str]]:
        """
        A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
        return pulumi.get(self, "ports")

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


if not MYPY:
    class ImageReplicationArgsDict(TypedDict):
        region: pulumi.Input[str]
        """
        The region of the image. See all regions [here](https://techdocs.akamai.com/linode-api/reference/get-regions).
        """
        status: pulumi.Input[str]
        """
        The status of an image replica.
        """
elif False:
    ImageReplicationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ImageReplicationArgs:
    def __init__(__self__, *,
                 region: pulumi.Input[str],
                 status: pulumi.Input[str]):
        """
        :param pulumi.Input[str] region: The region of the image. See all regions [here](https://techdocs.akamai.com/linode-api/reference/get-regions).
        :param pulumi.Input[str] status: The status of an image replica.
        """
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "status", status)

    @property
    @pulumi.getter
    def region(self) -> pulumi.Input[str]:
        """
        The region of the image. See all regions [here](https://techdocs.akamai.com/linode-api/reference/get-regions).
        """
        return pulumi.get(self, "region")

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

    @property
    @pulumi.getter
    def status(self) -> pulumi.Input[str]:
        """
        The status of an image replica.
        """
        return pulumi.get(self, "status")

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


if not MYPY:
    class ImageTimeoutsArgsDict(TypedDict):
        create: NotRequired[pulumi.Input[str]]
        """
        Used when creating the instance image (until the instance is available)
        """
elif False:
    ImageTimeoutsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ImageTimeoutsArgs:
    def __init__(__self__, *,
                 create: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] create: Used when creating the instance image (until the instance is available)
        """
        if create is not None:
            pulumi.set(__self__, "create", create)

    @property
    @pulumi.getter
    def create(self) -> Optional[pulumi.Input[str]]:
        """
        Used when creating the instance image (until the instance is available)
        """
        return pulumi.get(self, "create")

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


if not MYPY:
    class InstanceAlertsArgsDict(TypedDict):
        cpu: NotRequired[pulumi.Input[int]]
        """
        The percentage of CPU usage required to trigger an alert. If the average CPU usage over two hours exceeds this value, we'll send you an alert. If this is set to 0, the alert is disabled.
        """
        io: NotRequired[pulumi.Input[int]]
        """
        The amount of disk IO operation per second required to trigger an alert. If the average disk IO over two hours exceeds this value, we'll send you an alert. If set to 0, this alert is disabled.
        """
        network_in: NotRequired[pulumi.Input[int]]
        """
        The amount of incoming traffic, in Mbit/s, required to trigger an alert. If the average incoming traffic over two hours exceeds this value, we'll send you an alert. If this is set to 0 (zero), the alert is disabled.
        """
        network_out: NotRequired[pulumi.Input[int]]
        """
        The amount of outbound traffic, in Mbit/s, required to trigger an alert. If the average outbound traffic over two hours exceeds this value, we'll send you an alert. If this is set to 0 (zero), the alert is disabled.
        """
        transfer_quota: NotRequired[pulumi.Input[int]]
        """
        The percentage of network transfer that may be used before an alert is triggered. When this value is exceeded, we'll alert you. If this is set to 0 (zero), the alert is disabled.
        """
elif False:
    InstanceAlertsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceAlertsArgs:
    def __init__(__self__, *,
                 cpu: Optional[pulumi.Input[int]] = None,
                 io: Optional[pulumi.Input[int]] = None,
                 network_in: Optional[pulumi.Input[int]] = None,
                 network_out: Optional[pulumi.Input[int]] = None,
                 transfer_quota: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] cpu: The percentage of CPU usage required to trigger an alert. If the average CPU usage over two hours exceeds this value, we'll send you an alert. If this is set to 0, the alert is disabled.
        :param pulumi.Input[int] io: The amount of disk IO operation per second required to trigger an alert. If the average disk IO over two hours exceeds this value, we'll send you an alert. If set to 0, this alert is disabled.
        :param pulumi.Input[int] network_in: The amount of incoming traffic, in Mbit/s, required to trigger an alert. If the average incoming traffic over two hours exceeds this value, we'll send you an alert. If this is set to 0 (zero), the alert is disabled.
        :param pulumi.Input[int] network_out: The amount of outbound traffic, in Mbit/s, required to trigger an alert. If the average outbound traffic over two hours exceeds this value, we'll send you an alert. If this is set to 0 (zero), the alert is disabled.
        :param pulumi.Input[int] transfer_quota: The percentage of network transfer that may be used before an alert is triggered. When this value is exceeded, we'll alert you. If this is set to 0 (zero), the alert is disabled.
        """
        if cpu is not None:
            pulumi.set(__self__, "cpu", cpu)
        if io is not None:
            pulumi.set(__self__, "io", io)
        if network_in is not None:
            pulumi.set(__self__, "network_in", network_in)
        if network_out is not None:
            pulumi.set(__self__, "network_out", network_out)
        if transfer_quota is not None:
            pulumi.set(__self__, "transfer_quota", transfer_quota)

    @property
    @pulumi.getter
    def cpu(self) -> Optional[pulumi.Input[int]]:
        """
        The percentage of CPU usage required to trigger an alert. If the average CPU usage over two hours exceeds this value, we'll send you an alert. If this is set to 0, the alert is disabled.
        """
        return pulumi.get(self, "cpu")

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

    @property
    @pulumi.getter
    def io(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of disk IO operation per second required to trigger an alert. If the average disk IO over two hours exceeds this value, we'll send you an alert. If set to 0, this alert is disabled.
        """
        return pulumi.get(self, "io")

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

    @property
    @pulumi.getter(name="networkIn")
    def network_in(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of incoming traffic, in Mbit/s, required to trigger an alert. If the average incoming traffic over two hours exceeds this value, we'll send you an alert. If this is set to 0 (zero), the alert is disabled.
        """
        return pulumi.get(self, "network_in")

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

    @property
    @pulumi.getter(name="networkOut")
    def network_out(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of outbound traffic, in Mbit/s, required to trigger an alert. If the average outbound traffic over two hours exceeds this value, we'll send you an alert. If this is set to 0 (zero), the alert is disabled.
        """
        return pulumi.get(self, "network_out")

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

    @property
    @pulumi.getter(name="transferQuota")
    def transfer_quota(self) -> Optional[pulumi.Input[int]]:
        """
        The percentage of network transfer that may be used before an alert is triggered. When this value is exceeded, we'll alert you. If this is set to 0 (zero), the alert is disabled.
        """
        return pulumi.get(self, "transfer_quota")

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


if not MYPY:
    class InstanceBackupsArgsDict(TypedDict):
        available: NotRequired[pulumi.Input[bool]]
        """
        Whether this Backup is available for restoration.
        """
        enabled: NotRequired[pulumi.Input[bool]]
        """
        If this Linode has the Backup service enabled.
        """
        schedule: NotRequired[pulumi.Input['InstanceBackupsScheduleArgsDict']]
elif False:
    InstanceBackupsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceBackupsArgs:
    def __init__(__self__, *,
                 available: Optional[pulumi.Input[bool]] = None,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 schedule: Optional[pulumi.Input['InstanceBackupsScheduleArgs']] = None):
        """
        :param pulumi.Input[bool] available: Whether this Backup is available for restoration.
        :param pulumi.Input[bool] enabled: If this Linode has the Backup service enabled.
        """
        if available is not None:
            pulumi.set(__self__, "available", available)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if schedule is not None:
            pulumi.set(__self__, "schedule", schedule)

    @property
    @pulumi.getter
    def available(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether this Backup is available for restoration.
        """
        return pulumi.get(self, "available")

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

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        If this Linode has the Backup service enabled.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter
    def schedule(self) -> Optional[pulumi.Input['InstanceBackupsScheduleArgs']]:
        return pulumi.get(self, "schedule")

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


if not MYPY:
    class InstanceBackupsScheduleArgsDict(TypedDict):
        day: NotRequired[pulumi.Input[str]]
        """
        The day of the week that your Linode's weekly Backup is taken. If not set manually, a day will be chosen for you. Backups are taken every day, but backups taken on this day are preferred when selecting backups to retain for a longer period.  If not set manually, then when backups are initially enabled, this may come back as "Scheduling" until the day is automatically selected.
        """
        window: NotRequired[pulumi.Input[str]]
        """
        The window ('W0'-'W22') in which your backups will be taken, in UTC. A backups window is a two-hour span of time in which the backup may occur. For example, 'W10' indicates that your backups should be taken between 10:00 and 12:00. If you do not choose a backup window, one will be selected for you automatically.  If not set manually, when backups are initially enabled this may come back as Scheduling until the window is automatically selected.
        """
elif False:
    InstanceBackupsScheduleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceBackupsScheduleArgs:
    def __init__(__self__, *,
                 day: Optional[pulumi.Input[str]] = None,
                 window: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] day: The day of the week that your Linode's weekly Backup is taken. If not set manually, a day will be chosen for you. Backups are taken every day, but backups taken on this day are preferred when selecting backups to retain for a longer period.  If not set manually, then when backups are initially enabled, this may come back as "Scheduling" until the day is automatically selected.
        :param pulumi.Input[str] window: The window ('W0'-'W22') in which your backups will be taken, in UTC. A backups window is a two-hour span of time in which the backup may occur. For example, 'W10' indicates that your backups should be taken between 10:00 and 12:00. If you do not choose a backup window, one will be selected for you automatically.  If not set manually, when backups are initially enabled this may come back as Scheduling until the window is automatically selected.
        """
        if day is not None:
            pulumi.set(__self__, "day", day)
        if window is not None:
            pulumi.set(__self__, "window", window)

    @property
    @pulumi.getter
    def day(self) -> Optional[pulumi.Input[str]]:
        """
        The day of the week that your Linode's weekly Backup is taken. If not set manually, a day will be chosen for you. Backups are taken every day, but backups taken on this day are preferred when selecting backups to retain for a longer period.  If not set manually, then when backups are initially enabled, this may come back as "Scheduling" until the day is automatically selected.
        """
        return pulumi.get(self, "day")

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

    @property
    @pulumi.getter
    def window(self) -> Optional[pulumi.Input[str]]:
        """
        The window ('W0'-'W22') in which your backups will be taken, in UTC. A backups window is a two-hour span of time in which the backup may occur. For example, 'W10' indicates that your backups should be taken between 10:00 and 12:00. If you do not choose a backup window, one will be selected for you automatically.  If not set manually, when backups are initially enabled this may come back as Scheduling until the window is automatically selected.
        """
        return pulumi.get(self, "window")

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


if not MYPY:
    class InstanceConfigArgsDict(TypedDict):
        label: pulumi.Input[str]
        """
        The Linode's label is for display purposes only. If no label is provided for a Linode, a default will be assigned.
        """
        comments: NotRequired[pulumi.Input[str]]
        """
        Optional field for arbitrary User comments on this Config.
        """
        devices: NotRequired[pulumi.Input['InstanceConfigDevicesArgsDict']]
        """
        Device sda-sdh can be either a Disk or Volume identified by disk_label or volume_id. Only one type per slot allowed.
        """
        helpers: NotRequired[pulumi.Input['InstanceConfigHelpersArgsDict']]
        """
        Helpers enabled when booting to this Linode Config.
        """
        id: NotRequired[pulumi.Input[int]]
        """
        The ID of the Placement Group.
        """
        interfaces: NotRequired[pulumi.Input[Sequence[pulumi.Input['InstanceConfigInterfaceArgsDict']]]]
        """
        An array of Network Interfaces for this Linode’s Configuration Profile.
        """
        kernel: NotRequired[pulumi.Input[str]]
        """
        A Kernel ID to boot a Linode with. Default is based on image choice. (examples: linode/latest-64bit, linode/grub2, linode/direct-disk)
        """
        memory_limit: NotRequired[pulumi.Input[int]]
        """
        Defaults to the total RAM of the Linode
        """
        root_device: NotRequired[pulumi.Input[str]]
        """
        The root device to boot. The corresponding disk must be attached.
        """
        run_level: NotRequired[pulumi.Input[str]]
        """
        Defines the state of your Linode after booting. Defaults to default.
        """
        virt_mode: NotRequired[pulumi.Input[str]]
        """
        Controls the virtualization mode. Defaults to paravirt.
        """
elif False:
    InstanceConfigArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceConfigArgs:
    def __init__(__self__, *,
                 label: pulumi.Input[str],
                 comments: Optional[pulumi.Input[str]] = None,
                 devices: Optional[pulumi.Input['InstanceConfigDevicesArgs']] = None,
                 helpers: Optional[pulumi.Input['InstanceConfigHelpersArgs']] = None,
                 id: Optional[pulumi.Input[int]] = None,
                 interfaces: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceConfigInterfaceArgs']]]] = None,
                 kernel: Optional[pulumi.Input[str]] = None,
                 memory_limit: Optional[pulumi.Input[int]] = None,
                 root_device: Optional[pulumi.Input[str]] = None,
                 run_level: Optional[pulumi.Input[str]] = None,
                 virt_mode: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] label: The Linode's label is for display purposes only. If no label is provided for a Linode, a default will be assigned.
        :param pulumi.Input[str] comments: Optional field for arbitrary User comments on this Config.
        :param pulumi.Input['InstanceConfigDevicesArgs'] devices: Device sda-sdh can be either a Disk or Volume identified by disk_label or volume_id. Only one type per slot allowed.
        :param pulumi.Input['InstanceConfigHelpersArgs'] helpers: Helpers enabled when booting to this Linode Config.
        :param pulumi.Input[int] id: The ID of the Placement Group.
        :param pulumi.Input[Sequence[pulumi.Input['InstanceConfigInterfaceArgs']]] interfaces: An array of Network Interfaces for this Linode’s Configuration Profile.
        :param pulumi.Input[str] kernel: A Kernel ID to boot a Linode with. Default is based on image choice. (examples: linode/latest-64bit, linode/grub2, linode/direct-disk)
        :param pulumi.Input[int] memory_limit: Defaults to the total RAM of the Linode
        :param pulumi.Input[str] root_device: The root device to boot. The corresponding disk must be attached.
        :param pulumi.Input[str] run_level: Defines the state of your Linode after booting. Defaults to default.
        :param pulumi.Input[str] virt_mode: Controls the virtualization mode. Defaults to paravirt.
        """
        pulumi.set(__self__, "label", label)
        if comments is not None:
            pulumi.set(__self__, "comments", comments)
        if devices is not None:
            pulumi.set(__self__, "devices", devices)
        if helpers is not None:
            pulumi.set(__self__, "helpers", helpers)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if interfaces is not None:
            pulumi.set(__self__, "interfaces", interfaces)
        if kernel is not None:
            pulumi.set(__self__, "kernel", kernel)
        if memory_limit is not None:
            pulumi.set(__self__, "memory_limit", memory_limit)
        if root_device is not None:
            pulumi.set(__self__, "root_device", root_device)
        if run_level is not None:
            pulumi.set(__self__, "run_level", run_level)
        if virt_mode is not None:
            pulumi.set(__self__, "virt_mode", virt_mode)

    @property
    @pulumi.getter
    def label(self) -> pulumi.Input[str]:
        """
        The Linode's label is for display purposes only. If no label is provided for a Linode, a default will be assigned.
        """
        return pulumi.get(self, "label")

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

    @property
    @pulumi.getter
    def comments(self) -> Optional[pulumi.Input[str]]:
        """
        Optional field for arbitrary User comments on this Config.
        """
        return pulumi.get(self, "comments")

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

    @property
    @pulumi.getter
    def devices(self) -> Optional[pulumi.Input['InstanceConfigDevicesArgs']]:
        """
        Device sda-sdh can be either a Disk or Volume identified by disk_label or volume_id. Only one type per slot allowed.
        """
        return pulumi.get(self, "devices")

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

    @property
    @pulumi.getter
    def helpers(self) -> Optional[pulumi.Input['InstanceConfigHelpersArgs']]:
        """
        Helpers enabled when booting to this Linode Config.
        """
        return pulumi.get(self, "helpers")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[int]]:
        """
        The ID of the Placement Group.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def interfaces(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['InstanceConfigInterfaceArgs']]]]:
        """
        An array of Network Interfaces for this Linode’s Configuration Profile.
        """
        return pulumi.get(self, "interfaces")

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

    @property
    @pulumi.getter
    def kernel(self) -> Optional[pulumi.Input[str]]:
        """
        A Kernel ID to boot a Linode with. Default is based on image choice. (examples: linode/latest-64bit, linode/grub2, linode/direct-disk)
        """
        return pulumi.get(self, "kernel")

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

    @property
    @pulumi.getter(name="memoryLimit")
    def memory_limit(self) -> Optional[pulumi.Input[int]]:
        """
        Defaults to the total RAM of the Linode
        """
        return pulumi.get(self, "memory_limit")

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

    @property
    @pulumi.getter(name="rootDevice")
    def root_device(self) -> Optional[pulumi.Input[str]]:
        """
        The root device to boot. The corresponding disk must be attached.
        """
        return pulumi.get(self, "root_device")

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

    @property
    @pulumi.getter(name="runLevel")
    def run_level(self) -> Optional[pulumi.Input[str]]:
        """
        Defines the state of your Linode after booting. Defaults to default.
        """
        return pulumi.get(self, "run_level")

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

    @property
    @pulumi.getter(name="virtMode")
    def virt_mode(self) -> Optional[pulumi.Input[str]]:
        """
        Controls the virtualization mode. Defaults to paravirt.
        """
        return pulumi.get(self, "virt_mode")

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


if not MYPY:
    class InstanceConfigDeviceArgsDict(TypedDict):
        device_name: pulumi.Input[str]
        """
        The Disk ID to map to this disk slot
        """
        disk_id: NotRequired[pulumi.Input[int]]
        """
        The Disk ID to map to this disk slot
        """
        volume_id: NotRequired[pulumi.Input[int]]
        """
        The Block Storage volume ID to map to this disk slot
        """
elif False:
    InstanceConfigDeviceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceConfigDeviceArgs:
    def __init__(__self__, *,
                 device_name: pulumi.Input[str],
                 disk_id: Optional[pulumi.Input[int]] = None,
                 volume_id: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] device_name: The Disk ID to map to this disk slot
        :param pulumi.Input[int] disk_id: The Disk ID to map to this disk slot
        :param pulumi.Input[int] volume_id: The Block Storage volume ID to map to this disk slot
        """
        pulumi.set(__self__, "device_name", device_name)
        if disk_id is not None:
            pulumi.set(__self__, "disk_id", disk_id)
        if volume_id is not None:
            pulumi.set(__self__, "volume_id", volume_id)

    @property
    @pulumi.getter(name="deviceName")
    def device_name(self) -> pulumi.Input[str]:
        """
        The Disk ID to map to this disk slot
        """
        return pulumi.get(self, "device_name")

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

    @property
    @pulumi.getter(name="diskId")
    def disk_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Disk ID to map to this disk slot
        """
        return pulumi.get(self, "disk_id")

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

    @property
    @pulumi.getter(name="volumeId")
    def volume_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Block Storage volume ID to map to this disk slot
        """
        return pulumi.get(self, "volume_id")

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


if not MYPY:
    class InstanceConfigDevicesArgsDict(TypedDict):
        sda: NotRequired[pulumi.Input['InstanceConfigDevicesSdaArgsDict']]
        """
        ... `sdh` - (Optional) The SDA-SDH slots, represent the Linux block device nodes for the first 8 disks attached to the Linode.  Each device must be suplied sequentially.  The device can be either a Disk or a Volume identified by `disk_id` or `volume_id`. Only one disk identifier is permitted per slot. Devices mapped from `sde` through `sdh` are unavailable in `"fullvirt"` `virt_mode`.
        """
        sdb: NotRequired[pulumi.Input['InstanceConfigDevicesSdbArgsDict']]
        """
        Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        """
        sdc: NotRequired[pulumi.Input['InstanceConfigDevicesSdcArgsDict']]
        """
        Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        """
        sdd: NotRequired[pulumi.Input['InstanceConfigDevicesSddArgsDict']]
        """
        Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        """
        sde: NotRequired[pulumi.Input['InstanceConfigDevicesSdeArgsDict']]
        """
        Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        """
        sdf: NotRequired[pulumi.Input['InstanceConfigDevicesSdfArgsDict']]
        """
        Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        """
        sdg: NotRequired[pulumi.Input['InstanceConfigDevicesSdgArgsDict']]
        """
        Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        """
        sdh: NotRequired[pulumi.Input['InstanceConfigDevicesSdhArgsDict']]
        """
        Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        """
elif False:
    InstanceConfigDevicesArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceConfigDevicesArgs:
    def __init__(__self__, *,
                 sda: Optional[pulumi.Input['InstanceConfigDevicesSdaArgs']] = None,
                 sdb: Optional[pulumi.Input['InstanceConfigDevicesSdbArgs']] = None,
                 sdc: Optional[pulumi.Input['InstanceConfigDevicesSdcArgs']] = None,
                 sdd: Optional[pulumi.Input['InstanceConfigDevicesSddArgs']] = None,
                 sde: Optional[pulumi.Input['InstanceConfigDevicesSdeArgs']] = None,
                 sdf: Optional[pulumi.Input['InstanceConfigDevicesSdfArgs']] = None,
                 sdg: Optional[pulumi.Input['InstanceConfigDevicesSdgArgs']] = None,
                 sdh: Optional[pulumi.Input['InstanceConfigDevicesSdhArgs']] = None):
        """
        :param pulumi.Input['InstanceConfigDevicesSdaArgs'] sda: ... `sdh` - (Optional) The SDA-SDH slots, represent the Linux block device nodes for the first 8 disks attached to the Linode.  Each device must be suplied sequentially.  The device can be either a Disk or a Volume identified by `disk_id` or `volume_id`. Only one disk identifier is permitted per slot. Devices mapped from `sde` through `sdh` are unavailable in `"fullvirt"` `virt_mode`.
        :param pulumi.Input['InstanceConfigDevicesSdbArgs'] sdb: Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        :param pulumi.Input['InstanceConfigDevicesSdcArgs'] sdc: Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        :param pulumi.Input['InstanceConfigDevicesSddArgs'] sdd: Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        :param pulumi.Input['InstanceConfigDevicesSdeArgs'] sde: Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        :param pulumi.Input['InstanceConfigDevicesSdfArgs'] sdf: Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        :param pulumi.Input['InstanceConfigDevicesSdgArgs'] sdg: Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        :param pulumi.Input['InstanceConfigDevicesSdhArgs'] sdh: Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        """
        if sda is not None:
            pulumi.set(__self__, "sda", sda)
        if sdb is not None:
            pulumi.set(__self__, "sdb", sdb)
        if sdc is not None:
            pulumi.set(__self__, "sdc", sdc)
        if sdd is not None:
            pulumi.set(__self__, "sdd", sdd)
        if sde is not None:
            pulumi.set(__self__, "sde", sde)
        if sdf is not None:
            pulumi.set(__self__, "sdf", sdf)
        if sdg is not None:
            pulumi.set(__self__, "sdg", sdg)
        if sdh is not None:
            pulumi.set(__self__, "sdh", sdh)

    @property
    @pulumi.getter
    def sda(self) -> Optional[pulumi.Input['InstanceConfigDevicesSdaArgs']]:
        """
        ... `sdh` - (Optional) The SDA-SDH slots, represent the Linux block device nodes for the first 8 disks attached to the Linode.  Each device must be suplied sequentially.  The device can be either a Disk or a Volume identified by `disk_id` or `volume_id`. Only one disk identifier is permitted per slot. Devices mapped from `sde` through `sdh` are unavailable in `"fullvirt"` `virt_mode`.
        """
        return pulumi.get(self, "sda")

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

    @property
    @pulumi.getter
    def sdb(self) -> Optional[pulumi.Input['InstanceConfigDevicesSdbArgs']]:
        """
        Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        """
        return pulumi.get(self, "sdb")

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

    @property
    @pulumi.getter
    def sdc(self) -> Optional[pulumi.Input['InstanceConfigDevicesSdcArgs']]:
        """
        Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        """
        return pulumi.get(self, "sdc")

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

    @property
    @pulumi.getter
    def sdd(self) -> Optional[pulumi.Input['InstanceConfigDevicesSddArgs']]:
        """
        Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        """
        return pulumi.get(self, "sdd")

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

    @property
    @pulumi.getter
    def sde(self) -> Optional[pulumi.Input['InstanceConfigDevicesSdeArgs']]:
        """
        Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        """
        return pulumi.get(self, "sde")

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

    @property
    @pulumi.getter
    def sdf(self) -> Optional[pulumi.Input['InstanceConfigDevicesSdfArgs']]:
        """
        Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        """
        return pulumi.get(self, "sdf")

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

    @property
    @pulumi.getter
    def sdg(self) -> Optional[pulumi.Input['InstanceConfigDevicesSdgArgs']]:
        """
        Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        """
        return pulumi.get(self, "sdg")

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

    @property
    @pulumi.getter
    def sdh(self) -> Optional[pulumi.Input['InstanceConfigDevicesSdhArgs']]:
        """
        Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.
        """
        return pulumi.get(self, "sdh")

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


if not MYPY:
    class InstanceConfigDevicesSdaArgsDict(TypedDict):
        disk_id: NotRequired[pulumi.Input[int]]
        """
        The Disk ID to map to this `device` slot
        """
        volume_id: NotRequired[pulumi.Input[int]]
        """
        The Volume ID to map to this `device` slot.
        """
elif False:
    InstanceConfigDevicesSdaArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceConfigDevicesSdaArgs:
    def __init__(__self__, *,
                 disk_id: Optional[pulumi.Input[int]] = None,
                 volume_id: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] disk_id: The Disk ID to map to this `device` slot
        :param pulumi.Input[int] volume_id: The Volume ID to map to this `device` slot.
        """
        if disk_id is not None:
            pulumi.set(__self__, "disk_id", disk_id)
        if volume_id is not None:
            pulumi.set(__self__, "volume_id", volume_id)

    @property
    @pulumi.getter(name="diskId")
    def disk_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Disk ID to map to this `device` slot
        """
        return pulumi.get(self, "disk_id")

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

    @property
    @pulumi.getter(name="volumeId")
    def volume_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Volume ID to map to this `device` slot.
        """
        return pulumi.get(self, "volume_id")

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


if not MYPY:
    class InstanceConfigDevicesSdbArgsDict(TypedDict):
        disk_id: NotRequired[pulumi.Input[int]]
        """
        The Disk ID to map to this disk slot
        """
        volume_id: NotRequired[pulumi.Input[int]]
        """
        The Block Storage volume ID to map to this disk slot
        """
elif False:
    InstanceConfigDevicesSdbArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceConfigDevicesSdbArgs:
    def __init__(__self__, *,
                 disk_id: Optional[pulumi.Input[int]] = None,
                 volume_id: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] disk_id: The Disk ID to map to this disk slot
        :param pulumi.Input[int] volume_id: The Block Storage volume ID to map to this disk slot
        """
        if disk_id is not None:
            pulumi.set(__self__, "disk_id", disk_id)
        if volume_id is not None:
            pulumi.set(__self__, "volume_id", volume_id)

    @property
    @pulumi.getter(name="diskId")
    def disk_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Disk ID to map to this disk slot
        """
        return pulumi.get(self, "disk_id")

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

    @property
    @pulumi.getter(name="volumeId")
    def volume_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Block Storage volume ID to map to this disk slot
        """
        return pulumi.get(self, "volume_id")

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


if not MYPY:
    class InstanceConfigDevicesSdcArgsDict(TypedDict):
        disk_id: NotRequired[pulumi.Input[int]]
        """
        The Disk ID to map to this disk slot
        """
        volume_id: NotRequired[pulumi.Input[int]]
        """
        The Block Storage volume ID to map to this disk slot
        """
elif False:
    InstanceConfigDevicesSdcArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceConfigDevicesSdcArgs:
    def __init__(__self__, *,
                 disk_id: Optional[pulumi.Input[int]] = None,
                 volume_id: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] disk_id: The Disk ID to map to this disk slot
        :param pulumi.Input[int] volume_id: The Block Storage volume ID to map to this disk slot
        """
        if disk_id is not None:
            pulumi.set(__self__, "disk_id", disk_id)
        if volume_id is not None:
            pulumi.set(__self__, "volume_id", volume_id)

    @property
    @pulumi.getter(name="diskId")
    def disk_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Disk ID to map to this disk slot
        """
        return pulumi.get(self, "disk_id")

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

    @property
    @pulumi.getter(name="volumeId")
    def volume_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Block Storage volume ID to map to this disk slot
        """
        return pulumi.get(self, "volume_id")

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


if not MYPY:
    class InstanceConfigDevicesSddArgsDict(TypedDict):
        disk_id: NotRequired[pulumi.Input[int]]
        """
        The Disk ID to map to this disk slot
        """
        volume_id: NotRequired[pulumi.Input[int]]
        """
        The Block Storage volume ID to map to this disk slot
        """
elif False:
    InstanceConfigDevicesSddArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceConfigDevicesSddArgs:
    def __init__(__self__, *,
                 disk_id: Optional[pulumi.Input[int]] = None,
                 volume_id: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] disk_id: The Disk ID to map to this disk slot
        :param pulumi.Input[int] volume_id: The Block Storage volume ID to map to this disk slot
        """
        if disk_id is not None:
            pulumi.set(__self__, "disk_id", disk_id)
        if volume_id is not None:
            pulumi.set(__self__, "volume_id", volume_id)

    @property
    @pulumi.getter(name="diskId")
    def disk_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Disk ID to map to this disk slot
        """
        return pulumi.get(self, "disk_id")

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

    @property
    @pulumi.getter(name="volumeId")
    def volume_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Block Storage volume ID to map to this disk slot
        """
        return pulumi.get(self, "volume_id")

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


if not MYPY:
    class InstanceConfigDevicesSdeArgsDict(TypedDict):
        disk_id: NotRequired[pulumi.Input[int]]
        """
        The Disk ID to map to this disk slot
        """
        volume_id: NotRequired[pulumi.Input[int]]
        """
        The Block Storage volume ID to map to this disk slot
        """
elif False:
    InstanceConfigDevicesSdeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceConfigDevicesSdeArgs:
    def __init__(__self__, *,
                 disk_id: Optional[pulumi.Input[int]] = None,
                 volume_id: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] disk_id: The Disk ID to map to this disk slot
        :param pulumi.Input[int] volume_id: The Block Storage volume ID to map to this disk slot
        """
        if disk_id is not None:
            pulumi.set(__self__, "disk_id", disk_id)
        if volume_id is not None:
            pulumi.set(__self__, "volume_id", volume_id)

    @property
    @pulumi.getter(name="diskId")
    def disk_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Disk ID to map to this disk slot
        """
        return pulumi.get(self, "disk_id")

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

    @property
    @pulumi.getter(name="volumeId")
    def volume_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Block Storage volume ID to map to this disk slot
        """
        return pulumi.get(self, "volume_id")

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


if not MYPY:
    class InstanceConfigDevicesSdfArgsDict(TypedDict):
        disk_id: NotRequired[pulumi.Input[int]]
        """
        The Disk ID to map to this disk slot
        """
        volume_id: NotRequired[pulumi.Input[int]]
        """
        The Block Storage volume ID to map to this disk slot
        """
elif False:
    InstanceConfigDevicesSdfArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceConfigDevicesSdfArgs:
    def __init__(__self__, *,
                 disk_id: Optional[pulumi.Input[int]] = None,
                 volume_id: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] disk_id: The Disk ID to map to this disk slot
        :param pulumi.Input[int] volume_id: The Block Storage volume ID to map to this disk slot
        """
        if disk_id is not None:
            pulumi.set(__self__, "disk_id", disk_id)
        if volume_id is not None:
            pulumi.set(__self__, "volume_id", volume_id)

    @property
    @pulumi.getter(name="diskId")
    def disk_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Disk ID to map to this disk slot
        """
        return pulumi.get(self, "disk_id")

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

    @property
    @pulumi.getter(name="volumeId")
    def volume_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Block Storage volume ID to map to this disk slot
        """
        return pulumi.get(self, "volume_id")

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


if not MYPY:
    class InstanceConfigDevicesSdgArgsDict(TypedDict):
        disk_id: NotRequired[pulumi.Input[int]]
        """
        The Disk ID to map to this disk slot
        """
        volume_id: NotRequired[pulumi.Input[int]]
        """
        The Block Storage volume ID to map to this disk slot
        """
elif False:
    InstanceConfigDevicesSdgArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceConfigDevicesSdgArgs:
    def __init__(__self__, *,
                 disk_id: Optional[pulumi.Input[int]] = None,
                 volume_id: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] disk_id: The Disk ID to map to this disk slot
        :param pulumi.Input[int] volume_id: The Block Storage volume ID to map to this disk slot
        """
        if disk_id is not None:
            pulumi.set(__self__, "disk_id", disk_id)
        if volume_id is not None:
            pulumi.set(__self__, "volume_id", volume_id)

    @property
    @pulumi.getter(name="diskId")
    def disk_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Disk ID to map to this disk slot
        """
        return pulumi.get(self, "disk_id")

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

    @property
    @pulumi.getter(name="volumeId")
    def volume_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Block Storage volume ID to map to this disk slot
        """
        return pulumi.get(self, "volume_id")

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


if not MYPY:
    class InstanceConfigDevicesSdhArgsDict(TypedDict):
        disk_id: NotRequired[pulumi.Input[int]]
        """
        The Disk ID to map to this disk slot
        """
        volume_id: NotRequired[pulumi.Input[int]]
        """
        The Block Storage volume ID to map to this disk slot
        """
elif False:
    InstanceConfigDevicesSdhArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceConfigDevicesSdhArgs:
    def __init__(__self__, *,
                 disk_id: Optional[pulumi.Input[int]] = None,
                 volume_id: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] disk_id: The Disk ID to map to this disk slot
        :param pulumi.Input[int] volume_id: The Block Storage volume ID to map to this disk slot
        """
        if disk_id is not None:
            pulumi.set(__self__, "disk_id", disk_id)
        if volume_id is not None:
            pulumi.set(__self__, "volume_id", volume_id)

    @property
    @pulumi.getter(name="diskId")
    def disk_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Disk ID to map to this disk slot
        """
        return pulumi.get(self, "disk_id")

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

    @property
    @pulumi.getter(name="volumeId")
    def volume_id(self) -> Optional[pulumi.Input[int]]:
        """
        The Block Storage volume ID to map to this disk slot
        """
        return pulumi.get(self, "volume_id")

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


if not MYPY:
    class InstanceConfigHelperArgsDict(TypedDict):
        devtmpfs_automount: NotRequired[pulumi.Input[bool]]
        """
        Populates the /dev directory early during boot without udev. (default `true`)
        """
        distro: NotRequired[pulumi.Input[bool]]
        """
        Helps maintain correct inittab/upstart console device. (default `true`)
        """
        modules_dep: NotRequired[pulumi.Input[bool]]
        """
        Creates a modules dependency file for the Kernel you run. (default `true`)
        """
        network: NotRequired[pulumi.Input[bool]]
        """
        Automatically configures static networking. (default `true`)
        """
        updatedb_disabled: NotRequired[pulumi.Input[bool]]
        """
        Disables updatedb cron job to avoid disk thrashing. (default `true`)
        """
elif False:
    InstanceConfigHelperArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceConfigHelperArgs:
    def __init__(__self__, *,
                 devtmpfs_automount: Optional[pulumi.Input[bool]] = None,
                 distro: Optional[pulumi.Input[bool]] = None,
                 modules_dep: Optional[pulumi.Input[bool]] = None,
                 network: Optional[pulumi.Input[bool]] = None,
                 updatedb_disabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[bool] devtmpfs_automount: Populates the /dev directory early during boot without udev. (default `true`)
        :param pulumi.Input[bool] distro: Helps maintain correct inittab/upstart console device. (default `true`)
        :param pulumi.Input[bool] modules_dep: Creates a modules dependency file for the Kernel you run. (default `true`)
        :param pulumi.Input[bool] network: Automatically configures static networking. (default `true`)
        :param pulumi.Input[bool] updatedb_disabled: Disables updatedb cron job to avoid disk thrashing. (default `true`)
        """
        if devtmpfs_automount is not None:
            pulumi.set(__self__, "devtmpfs_automount", devtmpfs_automount)
        if distro is not None:
            pulumi.set(__self__, "distro", distro)
        if modules_dep is not None:
            pulumi.set(__self__, "modules_dep", modules_dep)
        if network is not None:
            pulumi.set(__self__, "network", network)
        if updatedb_disabled is not None:
            pulumi.set(__self__, "updatedb_disabled", updatedb_disabled)

    @property
    @pulumi.getter(name="devtmpfsAutomount")
    def devtmpfs_automount(self) -> Optional[pulumi.Input[bool]]:
        """
        Populates the /dev directory early during boot without udev. (default `true`)
        """
        return pulumi.get(self, "devtmpfs_automount")

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

    @property
    @pulumi.getter
    def distro(self) -> Optional[pulumi.Input[bool]]:
        """
        Helps maintain correct inittab/upstart console device. (default `true`)
        """
        return pulumi.get(self, "distro")

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

    @property
    @pulumi.getter(name="modulesDep")
    def modules_dep(self) -> Optional[pulumi.Input[bool]]:
        """
        Creates a modules dependency file for the Kernel you run. (default `true`)
        """
        return pulumi.get(self, "modules_dep")

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

    @property
    @pulumi.getter
    def network(self) -> Optional[pulumi.Input[bool]]:
        """
        Automatically configures static networking. (default `true`)
        """
        return pulumi.get(self, "network")

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

    @property
    @pulumi.getter(name="updatedbDisabled")
    def updatedb_disabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Disables updatedb cron job to avoid disk thrashing. (default `true`)
        """
        return pulumi.get(self, "updatedb_disabled")

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


if not MYPY:
    class InstanceConfigHelpersArgsDict(TypedDict):
        devtmpfs_automount: NotRequired[pulumi.Input[bool]]
        """
        Populates the /dev directory early during boot without udev. Defaults to false.
        """
        distro: NotRequired[pulumi.Input[bool]]
        """
        Controls the behavior of the Linode Config's Distribution Helper setting.
        """
        modules_dep: NotRequired[pulumi.Input[bool]]
        """
        Creates a modules dependency file for the Kernel you run.
        """
        network: NotRequired[pulumi.Input[bool]]
        """
        Controls the behavior of the Linode Config's Network Helper setting, used to automatically configure additional IP addresses assigned to this instance.
        """
        updatedb_disabled: NotRequired[pulumi.Input[bool]]
        """
        Disables updatedb cron job to avoid disk thrashing.
        """
elif False:
    InstanceConfigHelpersArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceConfigHelpersArgs:
    def __init__(__self__, *,
                 devtmpfs_automount: Optional[pulumi.Input[bool]] = None,
                 distro: Optional[pulumi.Input[bool]] = None,
                 modules_dep: Optional[pulumi.Input[bool]] = None,
                 network: Optional[pulumi.Input[bool]] = None,
                 updatedb_disabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[bool] devtmpfs_automount: Populates the /dev directory early during boot without udev. Defaults to false.
        :param pulumi.Input[bool] distro: Controls the behavior of the Linode Config's Distribution Helper setting.
        :param pulumi.Input[bool] modules_dep: Creates a modules dependency file for the Kernel you run.
        :param pulumi.Input[bool] network: Controls the behavior of the Linode Config's Network Helper setting, used to automatically configure additional IP addresses assigned to this instance.
        :param pulumi.Input[bool] updatedb_disabled: Disables updatedb cron job to avoid disk thrashing.
        """
        if devtmpfs_automount is not None:
            pulumi.set(__self__, "devtmpfs_automount", devtmpfs_automount)
        if distro is not None:
            pulumi.set(__self__, "distro", distro)
        if modules_dep is not None:
            pulumi.set(__self__, "modules_dep", modules_dep)
        if network is not None:
            pulumi.set(__self__, "network", network)
        if updatedb_disabled is not None:
            pulumi.set(__self__, "updatedb_disabled", updatedb_disabled)

    @property
    @pulumi.getter(name="devtmpfsAutomount")
    def devtmpfs_automount(self) -> Optional[pulumi.Input[bool]]:
        """
        Populates the /dev directory early during boot without udev. Defaults to false.
        """
        return pulumi.get(self, "devtmpfs_automount")

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

    @property
    @pulumi.getter
    def distro(self) -> Optional[pulumi.Input[bool]]:
        """
        Controls the behavior of the Linode Config's Distribution Helper setting.
        """
        return pulumi.get(self, "distro")

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

    @property
    @pulumi.getter(name="modulesDep")
    def modules_dep(self) -> Optional[pulumi.Input[bool]]:
        """
        Creates a modules dependency file for the Kernel you run.
        """
        return pulumi.get(self, "modules_dep")

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

    @property
    @pulumi.getter
    def network(self) -> Optional[pulumi.Input[bool]]:
        """
        Controls the behavior of the Linode Config's Network Helper setting, used to automatically configure additional IP addresses assigned to this instance.
        """
        return pulumi.get(self, "network")

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

    @property
    @pulumi.getter(name="updatedbDisabled")
    def updatedb_disabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Disables updatedb cron job to avoid disk thrashing.
        """
        return pulumi.get(self, "updatedb_disabled")

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


if not MYPY:
    class InstanceConfigInterfaceArgsDict(TypedDict):
        purpose: pulumi.Input[str]
        """
        The type of interface. (`public`, `vlan`, `vpc`)
        """
        active: NotRequired[pulumi.Input[bool]]
        """
        Whether this interface is currently booted and active.
        """
        id: NotRequired[pulumi.Input[int]]
        """
        The ID of the interface.
        """
        ip_ranges: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        IPv4 CIDR VPC Subnet ranges that are routed to this Interface. IPv6 ranges are also available to select participants in the Beta program.
        """
        ipam_address: NotRequired[pulumi.Input[str]]
        """
        This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. `10.0.0.1/24`) This field is only allowed for interfaces with the `vlan` purpose.
        """
        ipv4: NotRequired[pulumi.Input['InstanceConfigInterfaceIpv4ArgsDict']]
        """
        The IPv4 configuration of the VPC interface.This attribute is only allowed for VPC interfaces.
        """
        label: NotRequired[pulumi.Input[str]]
        """
        The name of the VLAN to join. This field is only allowed and required for interfaces with the `vlan` purpose.
        """
        primary: NotRequired[pulumi.Input[bool]]
        """
        Whether the interface is the primary interface that should have the default route for this Linode. This field is only allowed for interfaces with the `public` or `vpc` purpose.

        * `ipv4` - (Optional) The IPv4 configuration of the VPC interface. This field is currently only allowed for interfaces with the `vpc` purpose.

        The following computed attribute is available in a VPC interface:
        """
        subnet_id: NotRequired[pulumi.Input[int]]
        """
        The name of the VPC Subnet to join. This field is only allowed and required for interfaces with the `vpc` purpose.
        """
        vpc_id: NotRequired[pulumi.Input[int]]
        """
        The ID of VPC which this interface is attached to.
        """
elif False:
    InstanceConfigInterfaceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceConfigInterfaceArgs:
    def __init__(__self__, *,
                 purpose: pulumi.Input[str],
                 active: Optional[pulumi.Input[bool]] = None,
                 id: Optional[pulumi.Input[int]] = None,
                 ip_ranges: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ipam_address: Optional[pulumi.Input[str]] = None,
                 ipv4: Optional[pulumi.Input['InstanceConfigInterfaceIpv4Args']] = None,
                 label: Optional[pulumi.Input[str]] = None,
                 primary: Optional[pulumi.Input[bool]] = None,
                 subnet_id: Optional[pulumi.Input[int]] = None,
                 vpc_id: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] purpose: The type of interface. (`public`, `vlan`, `vpc`)
        :param pulumi.Input[bool] active: Whether this interface is currently booted and active.
        :param pulumi.Input[int] id: The ID of the interface.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ip_ranges: IPv4 CIDR VPC Subnet ranges that are routed to this Interface. IPv6 ranges are also available to select participants in the Beta program.
        :param pulumi.Input[str] ipam_address: This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. `10.0.0.1/24`) This field is only allowed for interfaces with the `vlan` purpose.
        :param pulumi.Input['InstanceConfigInterfaceIpv4Args'] ipv4: The IPv4 configuration of the VPC interface.This attribute is only allowed for VPC interfaces.
        :param pulumi.Input[str] label: The name of the VLAN to join. This field is only allowed and required for interfaces with the `vlan` purpose.
        :param pulumi.Input[bool] primary: Whether the interface is the primary interface that should have the default route for this Linode. This field is only allowed for interfaces with the `public` or `vpc` purpose.
               
               * `ipv4` - (Optional) The IPv4 configuration of the VPC interface. This field is currently only allowed for interfaces with the `vpc` purpose.
               
               The following computed attribute is available in a VPC interface:
        :param pulumi.Input[int] subnet_id: The name of the VPC Subnet to join. This field is only allowed and required for interfaces with the `vpc` purpose.
        :param pulumi.Input[int] vpc_id: The ID of VPC which this interface is attached to.
        """
        pulumi.set(__self__, "purpose", purpose)
        if active is not None:
            pulumi.set(__self__, "active", active)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if ip_ranges is not None:
            pulumi.set(__self__, "ip_ranges", ip_ranges)
        if ipam_address is not None:
            pulumi.set(__self__, "ipam_address", ipam_address)
        if ipv4 is not None:
            pulumi.set(__self__, "ipv4", ipv4)
        if label is not None:
            pulumi.set(__self__, "label", label)
        if primary is not None:
            pulumi.set(__self__, "primary", primary)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if vpc_id is not None:
            pulumi.set(__self__, "vpc_id", vpc_id)

    @property
    @pulumi.getter
    def purpose(self) -> pulumi.Input[str]:
        """
        The type of interface. (`public`, `vlan`, `vpc`)
        """
        return pulumi.get(self, "purpose")

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

    @property
    @pulumi.getter
    def active(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether this interface is currently booted and active.
        """
        return pulumi.get(self, "active")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[int]]:
        """
        The ID of the interface.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="ipRanges")
    def ip_ranges(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        IPv4 CIDR VPC Subnet ranges that are routed to this Interface. IPv6 ranges are also available to select participants in the Beta program.
        """
        return pulumi.get(self, "ip_ranges")

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

    @property
    @pulumi.getter(name="ipamAddress")
    def ipam_address(self) -> Optional[pulumi.Input[str]]:
        """
        This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. `10.0.0.1/24`) This field is only allowed for interfaces with the `vlan` purpose.
        """
        return pulumi.get(self, "ipam_address")

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

    @property
    @pulumi.getter
    def ipv4(self) -> Optional[pulumi.Input['InstanceConfigInterfaceIpv4Args']]:
        """
        The IPv4 configuration of the VPC interface.This attribute is only allowed for VPC interfaces.
        """
        return pulumi.get(self, "ipv4")

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

    @property
    @pulumi.getter
    def label(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the VLAN to join. This field is only allowed and required for interfaces with the `vlan` purpose.
        """
        return pulumi.get(self, "label")

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

    @property
    @pulumi.getter
    def primary(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether the interface is the primary interface that should have the default route for this Linode. This field is only allowed for interfaces with the `public` or `vpc` purpose.

        * `ipv4` - (Optional) The IPv4 configuration of the VPC interface. This field is currently only allowed for interfaces with the `vpc` purpose.

        The following computed attribute is available in a VPC interface:
        """
        return pulumi.get(self, "primary")

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[int]]:
        """
        The name of the VPC Subnet to join. This field is only allowed and required for interfaces with the `vpc` purpose.
        """
        return pulumi.get(self, "subnet_id")

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

    @property
    @pulumi.getter(name="vpcId")
    def vpc_id(self) -> Optional[pulumi.Input[int]]:
        """
        The ID of VPC which this interface is attached to.
        """
        return pulumi.get(self, "vpc_id")

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


if not MYPY:
    class InstanceConfigInterfaceIpv4ArgsDict(TypedDict):
        nat11: NotRequired[pulumi.Input[str]]
        """
        The public IP that will be used for the one-to-one NAT purpose. If this is `any`, the public IPv4 address assigned to this Linode is used on this interface and will be 1:1 NATted with the VPC IPv4 address.
        """
        vpc: NotRequired[pulumi.Input[str]]
        """
        The IP from the VPC subnet to use for this interface. A random address will be assigned if this is not specified in a VPC interface.
        """
elif False:
    InstanceConfigInterfaceIpv4ArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceConfigInterfaceIpv4Args:
    def __init__(__self__, *,
                 nat11: Optional[pulumi.Input[str]] = None,
                 vpc: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] nat11: The public IP that will be used for the one-to-one NAT purpose. If this is `any`, the public IPv4 address assigned to this Linode is used on this interface and will be 1:1 NATted with the VPC IPv4 address.
        :param pulumi.Input[str] vpc: The IP from the VPC subnet to use for this interface. A random address will be assigned if this is not specified in a VPC interface.
        """
        if nat11 is not None:
            pulumi.set(__self__, "nat11", nat11)
        if vpc is not None:
            pulumi.set(__self__, "vpc", vpc)

    @property
    @pulumi.getter
    def nat11(self) -> Optional[pulumi.Input[str]]:
        """
        The public IP that will be used for the one-to-one NAT purpose. If this is `any`, the public IPv4 address assigned to this Linode is used on this interface and will be 1:1 NATted with the VPC IPv4 address.
        """
        return pulumi.get(self, "nat11")

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

    @property
    @pulumi.getter
    def vpc(self) -> Optional[pulumi.Input[str]]:
        """
        The IP from the VPC subnet to use for this interface. A random address will be assigned if this is not specified in a VPC interface.
        """
        return pulumi.get(self, "vpc")

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


if not MYPY:
    class InstanceDiskArgsDict(TypedDict):
        label: pulumi.Input[str]
        """
        The Linode's label is for display purposes only. If no label is provided for a Linode, a default will be assigned.
        """
        size: pulumi.Input[int]
        """
        The size of the Disk in MB.
        """
        authorized_keys: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSH public keys to deploy for the root user on the newly created Linode. Only accepted if 'image' is provided.
        """
        authorized_users: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of Linode usernames. If the usernames have associated SSH keys, the keys will be appended to the `root` user's `~/.ssh/authorized_keys` file automatically. Only accepted if 'image' is provided.
        """
        filesystem: NotRequired[pulumi.Input[str]]
        """
        The Disk filesystem can be one of: raw, swap, ext3, ext4, initrd (max 32mb)
        """
        id: NotRequired[pulumi.Input[int]]
        """
        The ID of the Placement Group.
        """
        image: NotRequired[pulumi.Input[str]]
        """
        An Image ID to deploy the Disk from. Official Linode Images start with linode/, while your Images start with private/.
        """
        read_only: NotRequired[pulumi.Input[bool]]
        """
        If true, this Disk is read-only.
        """
        root_pass: NotRequired[pulumi.Input[str]]
        """
        The password that will be initialially assigned to the 'root' user account.
        """
        stackscript_data: NotRequired[pulumi.Input[Mapping[str, pulumi.Input[str]]]]
        """
        An object containing responses to any User Defined Fields present in the StackScript being deployed to this Linode. Only accepted if 'stackscript_id' is given. The required values depend on the StackScript being deployed.
        """
        stackscript_id: NotRequired[pulumi.Input[int]]
        """
        The StackScript to deploy to the newly created Linode. If provided, 'image' must also be provided, and must be an Image that is compatible with this StackScript.
        """
elif False:
    InstanceDiskArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceDiskArgs:
    def __init__(__self__, *,
                 label: pulumi.Input[str],
                 size: pulumi.Input[int],
                 authorized_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 authorized_users: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 filesystem: Optional[pulumi.Input[str]] = None,
                 id: Optional[pulumi.Input[int]] = None,
                 image: Optional[pulumi.Input[str]] = None,
                 read_only: Optional[pulumi.Input[bool]] = None,
                 root_pass: Optional[pulumi.Input[str]] = None,
                 stackscript_data: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 stackscript_id: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] label: The Linode's label is for display purposes only. If no label is provided for a Linode, a default will be assigned.
        :param pulumi.Input[int] size: The size of the Disk in MB.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] authorized_keys: A list of SSH public keys to deploy for the root user on the newly created Linode. Only accepted if 'image' is provided.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] authorized_users: A list of Linode usernames. If the usernames have associated SSH keys, the keys will be appended to the `root` user's `~/.ssh/authorized_keys` file automatically. Only accepted if 'image' is provided.
        :param pulumi.Input[str] filesystem: The Disk filesystem can be one of: raw, swap, ext3, ext4, initrd (max 32mb)
        :param pulumi.Input[int] id: The ID of the Placement Group.
        :param pulumi.Input[str] image: An Image ID to deploy the Disk from. Official Linode Images start with linode/, while your Images start with private/.
        :param pulumi.Input[bool] read_only: If true, this Disk is read-only.
        :param pulumi.Input[str] root_pass: The password that will be initialially assigned to the 'root' user account.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] stackscript_data: An object containing responses to any User Defined Fields present in the StackScript being deployed to this Linode. Only accepted if 'stackscript_id' is given. The required values depend on the StackScript being deployed.
        :param pulumi.Input[int] stackscript_id: The StackScript to deploy to the newly created Linode. If provided, 'image' must also be provided, and must be an Image that is compatible with this StackScript.
        """
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "size", size)
        if authorized_keys is not None:
            pulumi.set(__self__, "authorized_keys", authorized_keys)
        if authorized_users is not None:
            pulumi.set(__self__, "authorized_users", authorized_users)
        if filesystem is not None:
            pulumi.set(__self__, "filesystem", filesystem)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if image is not None:
            pulumi.set(__self__, "image", image)
        if read_only is not None:
            pulumi.set(__self__, "read_only", read_only)
        if root_pass is not None:
            pulumi.set(__self__, "root_pass", root_pass)
        if stackscript_data is not None:
            pulumi.set(__self__, "stackscript_data", stackscript_data)
        if stackscript_id is not None:
            pulumi.set(__self__, "stackscript_id", stackscript_id)

    @property
    @pulumi.getter
    def label(self) -> pulumi.Input[str]:
        """
        The Linode's label is for display purposes only. If no label is provided for a Linode, a default will be assigned.
        """
        return pulumi.get(self, "label")

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

    @property
    @pulumi.getter
    def size(self) -> pulumi.Input[int]:
        """
        The size of the Disk in MB.
        """
        return pulumi.get(self, "size")

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

    @property
    @pulumi.getter(name="authorizedKeys")
    def authorized_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH public keys to deploy for the root user on the newly created Linode. Only accepted if 'image' is provided.
        """
        return pulumi.get(self, "authorized_keys")

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

    @property
    @pulumi.getter(name="authorizedUsers")
    def authorized_users(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of Linode usernames. If the usernames have associated SSH keys, the keys will be appended to the `root` user's `~/.ssh/authorized_keys` file automatically. Only accepted if 'image' is provided.
        """
        return pulumi.get(self, "authorized_users")

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

    @property
    @pulumi.getter
    def filesystem(self) -> Optional[pulumi.Input[str]]:
        """
        The Disk filesystem can be one of: raw, swap, ext3, ext4, initrd (max 32mb)
        """
        return pulumi.get(self, "filesystem")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[int]]:
        """
        The ID of the Placement Group.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def image(self) -> Optional[pulumi.Input[str]]:
        """
        An Image ID to deploy the Disk from. Official Linode Images start with linode/, while your Images start with private/.
        """
        return pulumi.get(self, "image")

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

    @property
    @pulumi.getter(name="readOnly")
    def read_only(self) -> Optional[pulumi.Input[bool]]:
        """
        If true, this Disk is read-only.
        """
        return pulumi.get(self, "read_only")

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

    @property
    @pulumi.getter(name="rootPass")
    def root_pass(self) -> Optional[pulumi.Input[str]]:
        """
        The password that will be initialially assigned to the 'root' user account.
        """
        return pulumi.get(self, "root_pass")

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

    @property
    @pulumi.getter(name="stackscriptData")
    def stackscript_data(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        An object containing responses to any User Defined Fields present in the StackScript being deployed to this Linode. Only accepted if 'stackscript_id' is given. The required values depend on the StackScript being deployed.
        """
        return pulumi.get(self, "stackscript_data")

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

    @property
    @pulumi.getter(name="stackscriptId")
    def stackscript_id(self) -> Optional[pulumi.Input[int]]:
        """
        The StackScript to deploy to the newly created Linode. If provided, 'image' must also be provided, and must be an Image that is compatible with this StackScript.
        """
        return pulumi.get(self, "stackscript_id")

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


if not MYPY:
    class InstanceDiskTimeoutsArgsDict(TypedDict):
        create: NotRequired[pulumi.Input[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).
        """
        delete: NotRequired[pulumi.Input[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.
        """
        update: NotRequired[pulumi.Input[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).
        """
elif False:
    InstanceDiskTimeoutsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceDiskTimeoutsArgs:
    def __init__(__self__, *,
                 create: Optional[pulumi.Input[str]] = None,
                 delete: Optional[pulumi.Input[str]] = None,
                 update: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 update is not None:
            pulumi.set(__self__, "update", update)

    @property
    @pulumi.getter
    def create(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter
    def delete(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter
    def update(self) -> Optional[pulumi.Input[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")

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


if not MYPY:
    class InstanceInterfaceArgsDict(TypedDict):
        purpose: pulumi.Input[str]
        """
        The type of interface. (`public`, `vlan`, `vpc`)
        """
        active: NotRequired[pulumi.Input[bool]]
        """
        Whether this interface is currently booted and active.
        """
        id: NotRequired[pulumi.Input[int]]
        """
        The ID of the Placement Group.
        """
        ip_ranges: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        IPv4 CIDR VPC Subnet ranges that are routed to this Interface. IPv6 ranges are also available to select participants in the Beta program.
        """
        ipam_address: NotRequired[pulumi.Input[str]]
        """
        This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. `10.0.0.1/24`) This field is only allowed for interfaces with the `vlan` purpose.
        """
        ipv4: NotRequired[pulumi.Input['InstanceInterfaceIpv4ArgsDict']]
        """
        A set of reserved IPv4 addresses to assign to this Linode on creation.

        * **NOTE: IP reservation is not currently available to all users.**
        """
        label: NotRequired[pulumi.Input[str]]
        """
        The name of the VLAN to join. This field is only allowed and required for interfaces with the `vlan` purpose.
        """
        primary: NotRequired[pulumi.Input[bool]]
        """
        Whether the interface is the primary interface that should have the default route for this Linode. This field is only allowed for interfaces with the `public` or `vpc` purpose.

        * `ipv4` - (Optional) The IPv4 configuration of the VPC interface. This field is currently only allowed for interfaces with the `vpc` purpose.

        The following computed attribute is available in a VPC interface:
        """
        subnet_id: NotRequired[pulumi.Input[int]]
        """
        The name of the VPC Subnet to join. This field is only allowed and required for interfaces with the `vpc` purpose.
        """
        vpc_id: NotRequired[pulumi.Input[int]]
        """
        The ID of VPC which this interface is attached to.
        """
elif False:
    InstanceInterfaceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceInterfaceArgs:
    def __init__(__self__, *,
                 purpose: pulumi.Input[str],
                 active: Optional[pulumi.Input[bool]] = None,
                 id: Optional[pulumi.Input[int]] = None,
                 ip_ranges: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ipam_address: Optional[pulumi.Input[str]] = None,
                 ipv4: Optional[pulumi.Input['InstanceInterfaceIpv4Args']] = None,
                 label: Optional[pulumi.Input[str]] = None,
                 primary: Optional[pulumi.Input[bool]] = None,
                 subnet_id: Optional[pulumi.Input[int]] = None,
                 vpc_id: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] purpose: The type of interface. (`public`, `vlan`, `vpc`)
        :param pulumi.Input[bool] active: Whether this interface is currently booted and active.
        :param pulumi.Input[int] id: The ID of the Placement Group.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ip_ranges: IPv4 CIDR VPC Subnet ranges that are routed to this Interface. IPv6 ranges are also available to select participants in the Beta program.
        :param pulumi.Input[str] ipam_address: This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. `10.0.0.1/24`) This field is only allowed for interfaces with the `vlan` purpose.
        :param pulumi.Input['InstanceInterfaceIpv4Args'] ipv4: A set of reserved IPv4 addresses to assign to this Linode on creation.
               
               * **NOTE: IP reservation is not currently available to all users.**
        :param pulumi.Input[str] label: The name of the VLAN to join. This field is only allowed and required for interfaces with the `vlan` purpose.
        :param pulumi.Input[bool] primary: Whether the interface is the primary interface that should have the default route for this Linode. This field is only allowed for interfaces with the `public` or `vpc` purpose.
               
               * `ipv4` - (Optional) The IPv4 configuration of the VPC interface. This field is currently only allowed for interfaces with the `vpc` purpose.
               
               The following computed attribute is available in a VPC interface:
        :param pulumi.Input[int] subnet_id: The name of the VPC Subnet to join. This field is only allowed and required for interfaces with the `vpc` purpose.
        :param pulumi.Input[int] vpc_id: The ID of VPC which this interface is attached to.
        """
        pulumi.set(__self__, "purpose", purpose)
        if active is not None:
            pulumi.set(__self__, "active", active)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if ip_ranges is not None:
            pulumi.set(__self__, "ip_ranges", ip_ranges)
        if ipam_address is not None:
            pulumi.set(__self__, "ipam_address", ipam_address)
        if ipv4 is not None:
            pulumi.set(__self__, "ipv4", ipv4)
        if label is not None:
            pulumi.set(__self__, "label", label)
        if primary is not None:
            pulumi.set(__self__, "primary", primary)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if vpc_id is not None:
            pulumi.set(__self__, "vpc_id", vpc_id)

    @property
    @pulumi.getter
    def purpose(self) -> pulumi.Input[str]:
        """
        The type of interface. (`public`, `vlan`, `vpc`)
        """
        return pulumi.get(self, "purpose")

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

    @property
    @pulumi.getter
    def active(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether this interface is currently booted and active.
        """
        return pulumi.get(self, "active")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[int]]:
        """
        The ID of the Placement Group.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="ipRanges")
    def ip_ranges(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        IPv4 CIDR VPC Subnet ranges that are routed to this Interface. IPv6 ranges are also available to select participants in the Beta program.
        """
        return pulumi.get(self, "ip_ranges")

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

    @property
    @pulumi.getter(name="ipamAddress")
    def ipam_address(self) -> Optional[pulumi.Input[str]]:
        """
        This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. `10.0.0.1/24`) This field is only allowed for interfaces with the `vlan` purpose.
        """
        return pulumi.get(self, "ipam_address")

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

    @property
    @pulumi.getter
    def ipv4(self) -> Optional[pulumi.Input['InstanceInterfaceIpv4Args']]:
        """
        A set of reserved IPv4 addresses to assign to this Linode on creation.

        * **NOTE: IP reservation is not currently available to all users.**
        """
        return pulumi.get(self, "ipv4")

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

    @property
    @pulumi.getter
    def label(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the VLAN to join. This field is only allowed and required for interfaces with the `vlan` purpose.
        """
        return pulumi.get(self, "label")

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

    @property
    @pulumi.getter
    def primary(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether the interface is the primary interface that should have the default route for this Linode. This field is only allowed for interfaces with the `public` or `vpc` purpose.

        * `ipv4` - (Optional) The IPv4 configuration of the VPC interface. This field is currently only allowed for interfaces with the `vpc` purpose.

        The following computed attribute is available in a VPC interface:
        """
        return pulumi.get(self, "primary")

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[int]]:
        """
        The name of the VPC Subnet to join. This field is only allowed and required for interfaces with the `vpc` purpose.
        """
        return pulumi.get(self, "subnet_id")

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

    @property
    @pulumi.getter(name="vpcId")
    def vpc_id(self) -> Optional[pulumi.Input[int]]:
        """
        The ID of VPC which this interface is attached to.
        """
        return pulumi.get(self, "vpc_id")

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


if not MYPY:
    class InstanceInterfaceIpv4ArgsDict(TypedDict):
        nat11: NotRequired[pulumi.Input[str]]
        """
        The public IP that will be used for the one-to-one NAT purpose. If this is `any`, the public IPv4 address assigned to this Linode is used on this interface and will be 1:1 NATted with the VPC IPv4 address.
        """
        vpc: NotRequired[pulumi.Input[str]]
        """
        The IP from the VPC subnet to use for this interface. A random address will be assigned if this is not specified in a VPC interface.
        """
elif False:
    InstanceInterfaceIpv4ArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceInterfaceIpv4Args:
    def __init__(__self__, *,
                 nat11: Optional[pulumi.Input[str]] = None,
                 vpc: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] nat11: The public IP that will be used for the one-to-one NAT purpose. If this is `any`, the public IPv4 address assigned to this Linode is used on this interface and will be 1:1 NATted with the VPC IPv4 address.
        :param pulumi.Input[str] vpc: The IP from the VPC subnet to use for this interface. A random address will be assigned if this is not specified in a VPC interface.
        """
        if nat11 is not None:
            pulumi.set(__self__, "nat11", nat11)
        if vpc is not None:
            pulumi.set(__self__, "vpc", vpc)

    @property
    @pulumi.getter
    def nat11(self) -> Optional[pulumi.Input[str]]:
        """
        The public IP that will be used for the one-to-one NAT purpose. If this is `any`, the public IPv4 address assigned to this Linode is used on this interface and will be 1:1 NATted with the VPC IPv4 address.
        """
        return pulumi.get(self, "nat11")

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

    @property
    @pulumi.getter
    def vpc(self) -> Optional[pulumi.Input[str]]:
        """
        The IP from the VPC subnet to use for this interface. A random address will be assigned if this is not specified in a VPC interface.
        """
        return pulumi.get(self, "vpc")

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


if not MYPY:
    class InstanceIpVpcNat11ArgsDict(TypedDict):
        address: pulumi.Input[str]
        """
        The resulting IPv4 address.
        """
        subnet_id: pulumi.Input[int]
        vpc_id: pulumi.Input[int]
elif False:
    InstanceIpVpcNat11ArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceIpVpcNat11Args:
    def __init__(__self__, *,
                 address: pulumi.Input[str],
                 subnet_id: pulumi.Input[int],
                 vpc_id: pulumi.Input[int]):
        """
        :param pulumi.Input[str] address: The resulting IPv4 address.
        """
        pulumi.set(__self__, "address", address)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "vpc_id", vpc_id)

    @property
    @pulumi.getter
    def address(self) -> pulumi.Input[str]:
        """
        The resulting IPv4 address.
        """
        return pulumi.get(self, "address")

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> pulumi.Input[int]:
        return pulumi.get(self, "subnet_id")

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

    @property
    @pulumi.getter(name="vpcId")
    def vpc_id(self) -> pulumi.Input[int]:
        return pulumi.get(self, "vpc_id")

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


if not MYPY:
    class InstanceMetadataArgsDict(TypedDict):
        user_data: NotRequired[pulumi.Input[str]]
        """
        The base64-encoded user-defined data exposed to this instance through the Linode Metadata service. Refer to the base64encode(...) function for information on encoding content for this field.
        """
elif False:
    InstanceMetadataArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceMetadataArgs:
    def __init__(__self__, *,
                 user_data: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] user_data: The base64-encoded user-defined data exposed to this instance through the Linode Metadata service. Refer to the base64encode(...) function for information on encoding content for this field.
        """
        if user_data is not None:
            pulumi.set(__self__, "user_data", user_data)

    @property
    @pulumi.getter(name="userData")
    def user_data(self) -> Optional[pulumi.Input[str]]:
        """
        The base64-encoded user-defined data exposed to this instance through the Linode Metadata service. Refer to the base64encode(...) function for information on encoding content for this field.
        """
        return pulumi.get(self, "user_data")

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


if not MYPY:
    class InstancePlacementGroupArgsDict(TypedDict):
        id: pulumi.Input[int]
        """
        The ID of the Placement Group.
        """
        compliant_only: NotRequired[pulumi.Input[bool]]
        label: NotRequired[pulumi.Input[str]]
        """
        The Linode's label is for display purposes only. If no label is provided for a Linode, a default will be assigned.
        """
        placement_group_policy: NotRequired[pulumi.Input[str]]
        """
        Whether the Placement Group enforces strict compliance.
        """
        placement_group_type: NotRequired[pulumi.Input[str]]
        """
        The placement group type enforced by the Placement Group.
        """
elif False:
    InstancePlacementGroupArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstancePlacementGroupArgs:
    def __init__(__self__, *,
                 id: pulumi.Input[int],
                 compliant_only: Optional[pulumi.Input[bool]] = None,
                 label: Optional[pulumi.Input[str]] = None,
                 placement_group_policy: Optional[pulumi.Input[str]] = None,
                 placement_group_type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] id: The ID of the Placement Group.
        :param pulumi.Input[str] label: The Linode's label is for display purposes only. If no label is provided for a Linode, a default will be assigned.
        :param pulumi.Input[str] placement_group_policy: Whether the Placement Group enforces strict compliance.
        :param pulumi.Input[str] placement_group_type: The placement group type enforced by the Placement Group.
        """
        pulumi.set(__self__, "id", id)
        if compliant_only is not None:
            pulumi.set(__self__, "compliant_only", compliant_only)
        if label is not None:
            pulumi.set(__self__, "label", label)
        if placement_group_policy is not None:
            pulumi.set(__self__, "placement_group_policy", placement_group_policy)
        if placement_group_type is not None:
            pulumi.set(__self__, "placement_group_type", placement_group_type)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[int]:
        """
        The ID of the Placement Group.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="compliantOnly")
    def compliant_only(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "compliant_only")

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

    @property
    @pulumi.getter
    def label(self) -> Optional[pulumi.Input[str]]:
        """
        The Linode's label is for display purposes only. If no label is provided for a Linode, a default will be assigned.
        """
        return pulumi.get(self, "label")

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

    @property
    @pulumi.getter(name="placementGroupPolicy")
    def placement_group_policy(self) -> Optional[pulumi.Input[str]]:
        """
        Whether the Placement Group enforces strict compliance.
        """
        return pulumi.get(self, "placement_group_policy")

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

    @property
    @pulumi.getter(name="placementGroupType")
    def placement_group_type(self) -> Optional[pulumi.Input[str]]:
        """
        The placement group type enforced by the Placement Group.
        """
        return pulumi.get(self, "placement_group_type")

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


if not MYPY:
    class InstanceSpecsArgsDict(TypedDict):
        accelerated_devices: NotRequired[pulumi.Input[int]]
        """
        The number of VPUs this Linode has access to.
        """
        disk: NotRequired[pulumi.Input[int]]
        """
        The amount of storage space, in GB. this Linode has access to. A typical Linode will divide this space between a primary disk with an image deployed to it, and a swap disk, usually 512 MB. This is the default configuration created when deploying a Linode with an image through POST /linode/instances.
        """
        gpus: NotRequired[pulumi.Input[int]]
        """
        The number of GPUs this Linode has access to.
        """
        memory: NotRequired[pulumi.Input[int]]
        """
        The amount of RAM, in MB, this Linode has access to. Typically a Linode will choose to boot with all of its available RAM, but this can be configured in a Config profile.
        """
        transfer: NotRequired[pulumi.Input[int]]
        """
        The amount of network transfer this Linode is allotted each month.
        """
        vcpus: NotRequired[pulumi.Input[int]]
        """
        The number of vcpus this Linode has access to. Typically a Linode will choose to boot with all of its available vcpus, but this can be configured in a Config Profile.
        """
elif False:
    InstanceSpecsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InstanceSpecsArgs:
    def __init__(__self__, *,
                 accelerated_devices: Optional[pulumi.Input[int]] = None,
                 disk: Optional[pulumi.Input[int]] = None,
                 gpus: Optional[pulumi.Input[int]] = None,
                 memory: Optional[pulumi.Input[int]] = None,
                 transfer: Optional[pulumi.Input[int]] = None,
                 vcpus: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] accelerated_devices: The number of VPUs this Linode has access to.
        :param pulumi.Input[int] disk: The amount of storage space, in GB. this Linode has access to. A typical Linode will divide this space between a primary disk with an image deployed to it, and a swap disk, usually 512 MB. This is the default configuration created when deploying a Linode with an image through POST /linode/instances.
        :param pulumi.Input[int] gpus: The number of GPUs this Linode has access to.
        :param pulumi.Input[int] memory: The amount of RAM, in MB, this Linode has access to. Typically a Linode will choose to boot with all of its available RAM, but this can be configured in a Config profile.
        :param pulumi.Input[int] transfer: The amount of network transfer this Linode is allotted each month.
        :param pulumi.Input[int] vcpus: The number of vcpus this Linode has access to. Typically a Linode will choose to boot with all of its available vcpus, but this can be configured in a Config Profile.
        """
        if accelerated_devices is not None:
            pulumi.set(__self__, "accelerated_devices", accelerated_devices)
        if disk is not None:
            pulumi.set(__self__, "disk", disk)
        if gpus is not None:
            pulumi.set(__self__, "gpus", gpus)
        if memory is not None:
            pulumi.set(__self__, "memory", memory)
        if transfer is not None:
            pulumi.set(__self__, "transfer", transfer)
        if vcpus is not None:
            pulumi.set(__self__, "vcpus", vcpus)

    @property
    @pulumi.getter(name="acceleratedDevices")
    def accelerated_devices(self) -> Optional[pulumi.Input[int]]:
        """
        The number of VPUs this Linode has access to.
        """
        return pulumi.get(self, "accelerated_devices")

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

    @property
    @pulumi.getter
    def disk(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of storage space, in GB. this Linode has access to. A typical Linode will divide this space between a primary disk with an image deployed to it, and a swap disk, usually 512 MB. This is the default configuration created when deploying a Linode with an image through POST /linode/instances.
        """
        return pulumi.get(self, "disk")

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

    @property
    @pulumi.getter
    def gpus(self) -> Optional[pulumi.Input[int]]:
        """
        The number of GPUs this Linode has access to.
        """
        return pulumi.get(self, "gpus")

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

    @property
    @pulumi.getter
    def memory(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of RAM, in MB, this Linode has access to. Typically a Linode will choose to boot with all of its available RAM, but this can be configured in a Config profile.
        """
        return pulumi.get(self, "memory")

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

    @property
    @pulumi.getter
    def transfer(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of network transfer this Linode is allotted each month.
        """
        return pulumi.get(self, "transfer")

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

    @property
    @pulumi.getter
    def vcpus(self) -> Optional[pulumi.Input[int]]:
        """
        The number of vcpus this Linode has access to. Typically a Linode will choose to boot with all of its available vcpus, but this can be configured in a Config Profile.
        """
        return pulumi.get(self, "vcpus")

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


if not MYPY:
    class LkeClusterControlPlaneArgsDict(TypedDict):
        acl: NotRequired[pulumi.Input['LkeClusterControlPlaneAclArgsDict']]
        """
        Defines the ACL configuration for an LKE cluster's control plane.
        """
        high_availability: NotRequired[pulumi.Input[bool]]
        """
        Defines whether High Availability is enabled for the cluster Control Plane. This is an **irreversible** change.

        * `acl` - (Optional) Defines the ACL configuration for an LKE cluster's control plane. **NOTE: Control Plane ACLs may not currently be available to  all users.**
        """
elif False:
    LkeClusterControlPlaneArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class LkeClusterControlPlaneArgs:
    def __init__(__self__, *,
                 acl: Optional[pulumi.Input['LkeClusterControlPlaneAclArgs']] = None,
                 high_availability: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input['LkeClusterControlPlaneAclArgs'] acl: Defines the ACL configuration for an LKE cluster's control plane.
        :param pulumi.Input[bool] high_availability: Defines whether High Availability is enabled for the cluster Control Plane. This is an **irreversible** change.
               
               * `acl` - (Optional) Defines the ACL configuration for an LKE cluster's control plane. **NOTE: Control Plane ACLs may not currently be available to  all users.**
        """
        if acl is not None:
            pulumi.set(__self__, "acl", acl)
        if high_availability is not None:
            pulumi.set(__self__, "high_availability", high_availability)

    @property
    @pulumi.getter
    def acl(self) -> Optional[pulumi.Input['LkeClusterControlPlaneAclArgs']]:
        """
        Defines the ACL configuration for an LKE cluster's control plane.
        """
        return pulumi.get(self, "acl")

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

    @property
    @pulumi.getter(name="highAvailability")
    def high_availability(self) -> Optional[pulumi.Input[bool]]:
        """
        Defines whether High Availability is enabled for the cluster Control Plane. This is an **irreversible** change.

        * `acl` - (Optional) Defines the ACL configuration for an LKE cluster's control plane. **NOTE: Control Plane ACLs may not currently be available to  all users.**
        """
        return pulumi.get(self, "high_availability")

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


if not MYPY:
    class LkeClusterControlPlaneAclArgsDict(TypedDict):
        addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input['LkeClusterControlPlaneAclAddressArgsDict']]]]
        """
        A list of ip addresses to allow.
        """
        enabled: NotRequired[pulumi.Input[bool]]
        """
        Defines default policy. A value of true results in a default policy of DENY. A value of false results in default policy of ALLOW, and has the same effect as delete the ACL configuration.

        * `addresses` - (Optional) A list of ip addresses to allow.
        """
elif False:
    LkeClusterControlPlaneAclArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class LkeClusterControlPlaneAclArgs:
    def __init__(__self__, *,
                 addresses: Optional[pulumi.Input[Sequence[pulumi.Input['LkeClusterControlPlaneAclAddressArgs']]]] = None,
                 enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['LkeClusterControlPlaneAclAddressArgs']]] addresses: A list of ip addresses to allow.
        :param pulumi.Input[bool] enabled: Defines default policy. A value of true results in a default policy of DENY. A value of false results in default policy of ALLOW, and has the same effect as delete the ACL configuration.
               
               * `addresses` - (Optional) A list of ip addresses to allow.
        """
        if addresses is not None:
            pulumi.set(__self__, "addresses", addresses)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['LkeClusterControlPlaneAclAddressArgs']]]]:
        """
        A list of ip addresses to allow.
        """
        return pulumi.get(self, "addresses")

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

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Defines default policy. A value of true results in a default policy of DENY. A value of false results in default policy of ALLOW, and has the same effect as delete the ACL configuration.

        * `addresses` - (Optional) A list of ip addresses to allow.
        """
        return pulumi.get(self, "enabled")

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


if not MYPY:
    class LkeClusterControlPlaneAclAddressArgsDict(TypedDict):
        ipv4s: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A set of individual ipv4 addresses or CIDRs to ALLOW.
        """
        ipv6s: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A set of individual ipv6 addresses or CIDRs to ALLOW.
        """
elif False:
    LkeClusterControlPlaneAclAddressArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class LkeClusterControlPlaneAclAddressArgs:
    def __init__(__self__, *,
                 ipv4s: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ipv6s: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ipv4s: A set of individual ipv4 addresses or CIDRs to ALLOW.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ipv6s: A set of individual ipv6 addresses or CIDRs to ALLOW.
        """
        if ipv4s is not None:
            pulumi.set(__self__, "ipv4s", ipv4s)
        if ipv6s is not None:
            pulumi.set(__self__, "ipv6s", ipv6s)

    @property
    @pulumi.getter
    def ipv4s(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A set of individual ipv4 addresses or CIDRs to ALLOW.
        """
        return pulumi.get(self, "ipv4s")

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

    @property
    @pulumi.getter
    def ipv6s(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A set of individual ipv6 addresses or CIDRs to ALLOW.
        """
        return pulumi.get(self, "ipv6s")

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


if not MYPY:
    class LkeClusterPoolArgsDict(TypedDict):
        type: pulumi.Input[str]
        """
        A Linode Type for all of the nodes in the Node Pool. See all node types [here](https://api.linode.com/v4/linode/types).
        """
        autoscaler: NotRequired[pulumi.Input['LkeClusterPoolAutoscalerArgsDict']]
        """
        When specified, the number of nodes autoscales within the defined minimum and maximum values.
        """
        count: NotRequired[pulumi.Input[int]]
        """
        The number of nodes in the Node Pool. If undefined with an autoscaler the initial node count will equal the autoscaler minimum.

        * `autoscaler` - (Optional) If defined, an autoscaler will be enabled with the given configuration.
        """
        disk_encryption: NotRequired[pulumi.Input[str]]
        """
        The disk encryption policy for nodes in this pool.
        """
        id: NotRequired[pulumi.Input[int]]
        """
        The ID of the node.
        """
        labels: NotRequired[pulumi.Input[Mapping[str, pulumi.Input[str]]]]
        """
        Key-value pairs added as labels to nodes in the node pool. Labels help classify your nodes and to easily select subsets of objects.
        """
        nodes: NotRequired[pulumi.Input[Sequence[pulumi.Input['LkeClusterPoolNodeArgsDict']]]]
        """
        The nodes in the node pool.
        """
        tags: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        An array of tags applied to the Kubernetes cluster. Tags are case-insensitive and are for organizational purposes only.
        """
        taints: NotRequired[pulumi.Input[Sequence[pulumi.Input['LkeClusterPoolTaintArgsDict']]]]
        """
        Kubernetes taints to add to node pool nodes. Taints help control how pods are scheduled onto nodes, specifically allowing them to repel certain pods.
        """
elif False:
    LkeClusterPoolArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class LkeClusterPoolArgs:
    def __init__(__self__, *,
                 type: pulumi.Input[str],
                 autoscaler: Optional[pulumi.Input['LkeClusterPoolAutoscalerArgs']] = None,
                 count: Optional[pulumi.Input[int]] = None,
                 disk_encryption: Optional[pulumi.Input[str]] = None,
                 id: Optional[pulumi.Input[int]] = None,
                 labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 nodes: Optional[pulumi.Input[Sequence[pulumi.Input['LkeClusterPoolNodeArgs']]]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 taints: Optional[pulumi.Input[Sequence[pulumi.Input['LkeClusterPoolTaintArgs']]]] = None):
        """
        :param pulumi.Input[str] type: A Linode Type for all of the nodes in the Node Pool. See all node types [here](https://api.linode.com/v4/linode/types).
        :param pulumi.Input['LkeClusterPoolAutoscalerArgs'] autoscaler: When specified, the number of nodes autoscales within the defined minimum and maximum values.
        :param pulumi.Input[int] count: The number of nodes in the Node Pool. If undefined with an autoscaler the initial node count will equal the autoscaler minimum.
               
               * `autoscaler` - (Optional) If defined, an autoscaler will be enabled with the given configuration.
        :param pulumi.Input[str] disk_encryption: The disk encryption policy for nodes in this pool.
        :param pulumi.Input[int] id: The ID of the node.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Key-value pairs added as labels to nodes in the node pool. Labels help classify your nodes and to easily select subsets of objects.
        :param pulumi.Input[Sequence[pulumi.Input['LkeClusterPoolNodeArgs']]] nodes: The nodes in the node pool.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: An array of tags applied to the Kubernetes cluster. Tags are case-insensitive and are for organizational purposes only.
        :param pulumi.Input[Sequence[pulumi.Input['LkeClusterPoolTaintArgs']]] taints: Kubernetes taints to add to node pool nodes. Taints help control how pods are scheduled onto nodes, specifically allowing them to repel certain pods.
        """
        pulumi.set(__self__, "type", type)
        if autoscaler is not None:
            pulumi.set(__self__, "autoscaler", autoscaler)
        if count is not None:
            pulumi.set(__self__, "count", count)
        if disk_encryption is not None:
            pulumi.set(__self__, "disk_encryption", disk_encryption)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if labels is not None:
            pulumi.set(__self__, "labels", labels)
        if nodes is not None:
            pulumi.set(__self__, "nodes", nodes)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if taints is not None:
            pulumi.set(__self__, "taints", taints)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        A Linode Type for all of the nodes in the Node Pool. See all node types [here](https://api.linode.com/v4/linode/types).
        """
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter
    def autoscaler(self) -> Optional[pulumi.Input['LkeClusterPoolAutoscalerArgs']]:
        """
        When specified, the number of nodes autoscales within the defined minimum and maximum values.
        """
        return pulumi.get(self, "autoscaler")

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

    @property
    @pulumi.getter
    def count(self) -> Optional[pulumi.Input[int]]:
        """
        The number of nodes in the Node Pool. If undefined with an autoscaler the initial node count will equal the autoscaler minimum.

        * `autoscaler` - (Optional) If defined, an autoscaler will be enabled with the given configuration.
        """
        return pulumi.get(self, "count")

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

    @property
    @pulumi.getter(name="diskEncryption")
    def disk_encryption(self) -> Optional[pulumi.Input[str]]:
        """
        The disk encryption policy for nodes in this pool.
        """
        return pulumi.get(self, "disk_encryption")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[int]]:
        """
        The ID of the node.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        Key-value pairs added as labels to nodes in the node pool. Labels help classify your nodes and to easily select subsets of objects.
        """
        return pulumi.get(self, "labels")

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

    @property
    @pulumi.getter
    def nodes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['LkeClusterPoolNodeArgs']]]]:
        """
        The nodes in the node pool.
        """
        return pulumi.get(self, "nodes")

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

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        An array of tags applied to the Kubernetes cluster. Tags are case-insensitive and are for organizational purposes only.
        """
        return pulumi.get(self, "tags")

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

    @property
    @pulumi.getter
    def taints(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['LkeClusterPoolTaintArgs']]]]:
        """
        Kubernetes taints to add to node pool nodes. Taints help control how pods are scheduled onto nodes, specifically allowing them to repel certain pods.
        """
        return pulumi.get(self, "taints")

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


if not MYPY:
    class LkeClusterPoolAutoscalerArgsDict(TypedDict):
        max: pulumi.Input[int]
        """
        The maximum number of nodes to autoscale to.
        """
        min: pulumi.Input[int]
        """
        The minimum number of nodes to autoscale to.
        """
elif False:
    LkeClusterPoolAutoscalerArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class LkeClusterPoolAutoscalerArgs:
    def __init__(__self__, *,
                 max: pulumi.Input[int],
                 min: pulumi.Input[int]):
        """
        :param pulumi.Input[int] max: The maximum number of nodes to autoscale to.
        :param pulumi.Input[int] min: The minimum number of nodes to autoscale to.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> pulumi.Input[int]:
        """
        The maximum number of nodes to autoscale to.
        """
        return pulumi.get(self, "max")

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

    @property
    @pulumi.getter
    def min(self) -> pulumi.Input[int]:
        """
        The minimum number of nodes to autoscale to.
        """
        return pulumi.get(self, "min")

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


if not MYPY:
    class LkeClusterPoolNodeArgsDict(TypedDict):
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the node.
        """
        instance_id: NotRequired[pulumi.Input[int]]
        """
        The ID of the underlying Linode instance.
        """
        status: NotRequired[pulumi.Input[str]]
        """
        The status of the node. (`ready`, `not_ready`)
        """
elif False:
    LkeClusterPoolNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class LkeClusterPoolNodeArgs:
    def __init__(__self__, *,
                 id: Optional[pulumi.Input[str]] = None,
                 instance_id: Optional[pulumi.Input[int]] = None,
                 status: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] id: The ID of the node.
        :param pulumi.Input[int] instance_id: The ID of the underlying Linode instance.
        :param pulumi.Input[str] status: The status of the node. (`ready`, `not_ready`)
        """
        if id is not None:
            pulumi.set(__self__, "id", id)
        if instance_id is not None:
            pulumi.set(__self__, "instance_id", instance_id)
        if status is not None:
            pulumi.set(__self__, "status", status)

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the node.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> Optional[pulumi.Input[int]]:
        """
        The ID of the underlying Linode instance.
        """
        return pulumi.get(self, "instance_id")

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

    @property
    @pulumi.getter
    def status(self) -> Optional[pulumi.Input[str]]:
        """
        The status of the node. (`ready`, `not_ready`)
        """
        return pulumi.get(self, "status")

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


if not MYPY:
    class LkeClusterPoolTaintArgsDict(TypedDict):
        effect: pulumi.Input[str]
        """
        The Kubernetes taint effect.
        """
        key: pulumi.Input[str]
        """
        The Kubernetes taint key.
        """
        value: pulumi.Input[str]
        """
        The Kubernetes taint value.
        """
elif False:
    LkeClusterPoolTaintArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class LkeClusterPoolTaintArgs:
    def __init__(__self__, *,
                 effect: pulumi.Input[str],
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] effect: The Kubernetes taint effect.
        :param pulumi.Input[str] key: The Kubernetes taint key.
        :param pulumi.Input[str] value: The Kubernetes taint value.
        """
        pulumi.set(__self__, "effect", effect)
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def effect(self) -> pulumi.Input[str]:
        """
        The Kubernetes taint effect.
        """
        return pulumi.get(self, "effect")

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

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        """
        The Kubernetes taint key.
        """
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The Kubernetes taint value.
        """
        return pulumi.get(self, "value")

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


if not MYPY:
    class LkeNodePoolAutoscalerArgsDict(TypedDict):
        max: pulumi.Input[int]
        """
        The maximum number of nodes to autoscale to.
        """
        min: pulumi.Input[int]
        """
        The minimum number of nodes to autoscale to.
        """
elif False:
    LkeNodePoolAutoscalerArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class LkeNodePoolAutoscalerArgs:
    def __init__(__self__, *,
                 max: pulumi.Input[int],
                 min: pulumi.Input[int]):
        """
        :param pulumi.Input[int] max: The maximum number of nodes to autoscale to.
        :param pulumi.Input[int] min: The minimum number of nodes to autoscale to.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> pulumi.Input[int]:
        """
        The maximum number of nodes to autoscale to.
        """
        return pulumi.get(self, "max")

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

    @property
    @pulumi.getter
    def min(self) -> pulumi.Input[int]:
        """
        The minimum number of nodes to autoscale to.
        """
        return pulumi.get(self, "min")

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


if not MYPY:
    class LkeNodePoolNodeArgsDict(TypedDict):
        id: pulumi.Input[str]
        """
        The ID of the node.
        """
        instance_id: pulumi.Input[int]
        """
        The ID of the underlying Linode instance.
        """
        status: pulumi.Input[str]
        """
        The status of the node. (`ready`, `not_ready`)
        """
elif False:
    LkeNodePoolNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class LkeNodePoolNodeArgs:
    def __init__(__self__, *,
                 id: pulumi.Input[str],
                 instance_id: pulumi.Input[int],
                 status: pulumi.Input[str]):
        """
        :param pulumi.Input[str] id: The ID of the node.
        :param pulumi.Input[int] instance_id: The ID of the underlying Linode instance.
        :param pulumi.Input[str] status: The status of the node. (`ready`, `not_ready`)
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_id", instance_id)
        pulumi.set(__self__, "status", status)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[str]:
        """
        The ID of the node.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> pulumi.Input[int]:
        """
        The ID of the underlying Linode instance.
        """
        return pulumi.get(self, "instance_id")

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

    @property
    @pulumi.getter
    def status(self) -> pulumi.Input[str]:
        """
        The status of the node. (`ready`, `not_ready`)
        """
        return pulumi.get(self, "status")

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


if not MYPY:
    class LkeNodePoolTaintArgsDict(TypedDict):
        effect: pulumi.Input[str]
        """
        The Kubernetes taint effect. Accepted values are `NoSchedule`, `PreferNoSchedule`, and `NoExecute`. For the descriptions of these values, see [Kubernetes Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/).
        """
        key: pulumi.Input[str]
        """
        The Kubernetes taint key.
        """
        value: pulumi.Input[str]
        """
        The Kubernetes taint value.
        """
elif False:
    LkeNodePoolTaintArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class LkeNodePoolTaintArgs:
    def __init__(__self__, *,
                 effect: pulumi.Input[str],
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] effect: The Kubernetes taint effect. Accepted values are `NoSchedule`, `PreferNoSchedule`, and `NoExecute`. For the descriptions of these values, see [Kubernetes Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/).
        :param pulumi.Input[str] key: The Kubernetes taint key.
        :param pulumi.Input[str] value: The Kubernetes taint value.
        """
        pulumi.set(__self__, "effect", effect)
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def effect(self) -> pulumi.Input[str]:
        """
        The Kubernetes taint effect. Accepted values are `NoSchedule`, `PreferNoSchedule`, and `NoExecute`. For the descriptions of these values, see [Kubernetes Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/).
        """
        return pulumi.get(self, "effect")

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

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        """
        The Kubernetes taint key.
        """
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The Kubernetes taint value.
        """
        return pulumi.get(self, "value")

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


if not MYPY:
    class NetworkingIpAssignmentAssignmentArgsDict(TypedDict):
        address: pulumi.Input[str]
        """
        The IPv4 address or IPv6 range to assign.
        """
        linode_id: pulumi.Input[int]
        """
        The ID of the Linode to which the IP address will be assigned.
        """
elif False:
    NetworkingIpAssignmentAssignmentArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkingIpAssignmentAssignmentArgs:
    def __init__(__self__, *,
                 address: pulumi.Input[str],
                 linode_id: pulumi.Input[int]):
        """
        :param pulumi.Input[str] address: The IPv4 address or IPv6 range to assign.
        :param pulumi.Input[int] linode_id: The ID of the Linode to which the IP address will be assigned.
        """
        pulumi.set(__self__, "address", address)
        pulumi.set(__self__, "linode_id", linode_id)

    @property
    @pulumi.getter
    def address(self) -> pulumi.Input[str]:
        """
        The IPv4 address or IPv6 range to assign.
        """
        return pulumi.get(self, "address")

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

    @property
    @pulumi.getter(name="linodeId")
    def linode_id(self) -> pulumi.Input[int]:
        """
        The ID of the Linode to which the IP address will be assigned.
        """
        return pulumi.get(self, "linode_id")

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


if not MYPY:
    class NodeBalancerConfigNodeStatusArgsDict(TypedDict):
        down: pulumi.Input[int]
        """
        The number of backends considered to be 'DOWN' and unhealthy. These are not in rotation, and not serving requests.
        """
        up: pulumi.Input[int]
        """
        The number of backends considered to be 'UP' and healthy, and that are serving requests.
        """
elif False:
    NodeBalancerConfigNodeStatusArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NodeBalancerConfigNodeStatusArgs:
    def __init__(__self__, *,
                 down: pulumi.Input[int],
                 up: pulumi.Input[int]):
        """
        :param pulumi.Input[int] down: The number of backends considered to be 'DOWN' and unhealthy. These are not in rotation, and not serving requests.
        :param pulumi.Input[int] up: The number of backends considered to be 'UP' and healthy, and that are serving requests.
        """
        pulumi.set(__self__, "down", down)
        pulumi.set(__self__, "up", up)

    @property
    @pulumi.getter
    def down(self) -> pulumi.Input[int]:
        """
        The number of backends considered to be 'DOWN' and unhealthy. These are not in rotation, and not serving requests.
        """
        return pulumi.get(self, "down")

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

    @property
    @pulumi.getter
    def up(self) -> pulumi.Input[int]:
        """
        The number of backends considered to be 'UP' and healthy, and that are serving requests.
        """
        return pulumi.get(self, "up")

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


if not MYPY:
    class NodeBalancerFirewallArgsDict(TypedDict):
        created: pulumi.Input[str]
        """
        When this firewall was created.
        """
        id: pulumi.Input[int]
        """
        (Required) The Firewall's ID.
        """
        inbound_policy: pulumi.Input[str]
        """
        The default behavior for inbound traffic. (`ACCEPT`, `DROP`)
        """
        inbounds: pulumi.Input[Sequence[pulumi.Input['NodeBalancerFirewallInboundArgsDict']]]
        label: pulumi.Input[str]
        """
        The label of the Linode NodeBalancer
        """
        outbound_policy: pulumi.Input[str]
        """
        The default behavior for outbound traffic. (`ACCEPT`, `DROP`)
        """
        outbounds: pulumi.Input[Sequence[pulumi.Input['NodeBalancerFirewallOutboundArgsDict']]]
        status: pulumi.Input[str]
        """
        The status of the firewall. (`enabled`, `disabled`, `deleted`)
        """
        tags: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        """
        updated: pulumi.Input[str]
        """
        When this firewall was last updated.
        """
elif False:
    NodeBalancerFirewallArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NodeBalancerFirewallArgs:
    def __init__(__self__, *,
                 created: pulumi.Input[str],
                 id: pulumi.Input[int],
                 inbound_policy: pulumi.Input[str],
                 inbounds: pulumi.Input[Sequence[pulumi.Input['NodeBalancerFirewallInboundArgs']]],
                 label: pulumi.Input[str],
                 outbound_policy: pulumi.Input[str],
                 outbounds: pulumi.Input[Sequence[pulumi.Input['NodeBalancerFirewallOutboundArgs']]],
                 status: pulumi.Input[str],
                 tags: pulumi.Input[Sequence[pulumi.Input[str]]],
                 updated: pulumi.Input[str]):
        """
        :param pulumi.Input[str] created: When this firewall was created.
        :param pulumi.Input[int] id: (Required) The Firewall's ID.
        :param pulumi.Input[str] inbound_policy: The default behavior for inbound traffic. (`ACCEPT`, `DROP`)
        :param pulumi.Input[str] label: The label of the Linode NodeBalancer
        :param pulumi.Input[str] outbound_policy: The default behavior for outbound traffic. (`ACCEPT`, `DROP`)
        :param pulumi.Input[str] status: The status of the firewall. (`enabled`, `disabled`, `deleted`)
        :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        :param pulumi.Input[str] updated: When this firewall was last updated.
        """
        pulumi.set(__self__, "created", created)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "inbound_policy", inbound_policy)
        pulumi.set(__self__, "inbounds", inbounds)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "outbound_policy", outbound_policy)
        pulumi.set(__self__, "outbounds", outbounds)
        pulumi.set(__self__, "status", status)
        pulumi.set(__self__, "tags", tags)
        pulumi.set(__self__, "updated", updated)

    @property
    @pulumi.getter
    def created(self) -> pulumi.Input[str]:
        """
        When this firewall was created.
        """
        return pulumi.get(self, "created")

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

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[int]:
        """
        (Required) The Firewall's ID.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="inboundPolicy")
    def inbound_policy(self) -> pulumi.Input[str]:
        """
        The default behavior for inbound traffic. (`ACCEPT`, `DROP`)
        """
        return pulumi.get(self, "inbound_policy")

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

    @property
    @pulumi.getter
    def inbounds(self) -> pulumi.Input[Sequence[pulumi.Input['NodeBalancerFirewallInboundArgs']]]:
        return pulumi.get(self, "inbounds")

    @inbounds.setter
    def inbounds(self, value: pulumi.Input[Sequence[pulumi.Input['NodeBalancerFirewallInboundArgs']]]):
        pulumi.set(self, "inbounds", value)

    @property
    @pulumi.getter
    def label(self) -> pulumi.Input[str]:
        """
        The label of the Linode NodeBalancer
        """
        return pulumi.get(self, "label")

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

    @property
    @pulumi.getter(name="outboundPolicy")
    def outbound_policy(self) -> pulumi.Input[str]:
        """
        The default behavior for outbound traffic. (`ACCEPT`, `DROP`)
        """
        return pulumi.get(self, "outbound_policy")

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

    @property
    @pulumi.getter
    def outbounds(self) -> pulumi.Input[Sequence[pulumi.Input['NodeBalancerFirewallOutboundArgs']]]:
        return pulumi.get(self, "outbounds")

    @outbounds.setter
    def outbounds(self, value: pulumi.Input[Sequence[pulumi.Input['NodeBalancerFirewallOutboundArgs']]]):
        pulumi.set(self, "outbounds", value)

    @property
    @pulumi.getter
    def status(self) -> pulumi.Input[str]:
        """
        The status of the firewall. (`enabled`, `disabled`, `deleted`)
        """
        return pulumi.get(self, "status")

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

    @property
    @pulumi.getter
    def tags(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        """
        return pulumi.get(self, "tags")

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

    @property
    @pulumi.getter
    def updated(self) -> pulumi.Input[str]:
        """
        When this firewall was last updated.
        """
        return pulumi.get(self, "updated")

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


if not MYPY:
    class NodeBalancerFirewallInboundArgsDict(TypedDict):
        action: pulumi.Input[str]
        """
        Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        """
        description: pulumi.Input[str]
        ipv4s: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of IPv4 addresses or networks. Must be in IP/mask format.
        """
        ipv6s: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of IPv6 addresses or networks. Must be in IP/mask format.
        """
        label: pulumi.Input[str]
        """
        The label of the Linode NodeBalancer
        """
        ports: pulumi.Input[str]
        """
        A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
        protocol: pulumi.Input[str]
        """
        The network protocol this rule controls. (`TCP`, `UDP`, `ICMP`)
        """
elif False:
    NodeBalancerFirewallInboundArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NodeBalancerFirewallInboundArgs:
    def __init__(__self__, *,
                 action: pulumi.Input[str],
                 description: pulumi.Input[str],
                 ipv4s: pulumi.Input[Sequence[pulumi.Input[str]]],
                 ipv6s: pulumi.Input[Sequence[pulumi.Input[str]]],
                 label: pulumi.Input[str],
                 ports: pulumi.Input[str],
                 protocol: pulumi.Input[str]):
        """
        :param pulumi.Input[str] action: Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ipv4s: A list of IPv4 addresses or networks. Must be in IP/mask format.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ipv6s: A list of IPv6 addresses or networks. Must be in IP/mask format.
        :param pulumi.Input[str] label: The label of the Linode NodeBalancer
        :param pulumi.Input[str] ports: A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        :param pulumi.Input[str] protocol: The network protocol this rule controls. (`TCP`, `UDP`, `ICMP`)
        """
        pulumi.set(__self__, "action", action)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "ipv4s", ipv4s)
        pulumi.set(__self__, "ipv6s", ipv6s)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "ports", ports)
        pulumi.set(__self__, "protocol", protocol)

    @property
    @pulumi.getter
    def action(self) -> pulumi.Input[str]:
        """
        Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        """
        return pulumi.get(self, "action")

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

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

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

    @property
    @pulumi.getter
    def ipv4s(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of IPv4 addresses or networks. Must be in IP/mask format.
        """
        return pulumi.get(self, "ipv4s")

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

    @property
    @pulumi.getter
    def ipv6s(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of IPv6 addresses or networks. Must be in IP/mask format.
        """
        return pulumi.get(self, "ipv6s")

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

    @property
    @pulumi.getter
    def label(self) -> pulumi.Input[str]:
        """
        The label of the Linode NodeBalancer
        """
        return pulumi.get(self, "label")

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

    @property
    @pulumi.getter
    def ports(self) -> pulumi.Input[str]:
        """
        A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
        return pulumi.get(self, "ports")

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

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        """
        The network protocol this rule controls. (`TCP`, `UDP`, `ICMP`)
        """
        return pulumi.get(self, "protocol")

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


if not MYPY:
    class NodeBalancerFirewallOutboundArgsDict(TypedDict):
        action: pulumi.Input[str]
        """
        Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        """
        description: pulumi.Input[str]
        ipv4s: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of IPv4 addresses or networks. Must be in IP/mask format.
        """
        ipv6s: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of IPv6 addresses or networks. Must be in IP/mask format.
        """
        label: pulumi.Input[str]
        """
        The label of the Linode NodeBalancer
        """
        ports: pulumi.Input[str]
        """
        A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
        protocol: pulumi.Input[str]
        """
        The network protocol this rule controls. (`TCP`, `UDP`, `ICMP`)
        """
elif False:
    NodeBalancerFirewallOutboundArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NodeBalancerFirewallOutboundArgs:
    def __init__(__self__, *,
                 action: pulumi.Input[str],
                 description: pulumi.Input[str],
                 ipv4s: pulumi.Input[Sequence[pulumi.Input[str]]],
                 ipv6s: pulumi.Input[Sequence[pulumi.Input[str]]],
                 label: pulumi.Input[str],
                 ports: pulumi.Input[str],
                 protocol: pulumi.Input[str]):
        """
        :param pulumi.Input[str] action: Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ipv4s: A list of IPv4 addresses or networks. Must be in IP/mask format.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ipv6s: A list of IPv6 addresses or networks. Must be in IP/mask format.
        :param pulumi.Input[str] label: The label of the Linode NodeBalancer
        :param pulumi.Input[str] ports: A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        :param pulumi.Input[str] protocol: The network protocol this rule controls. (`TCP`, `UDP`, `ICMP`)
        """
        pulumi.set(__self__, "action", action)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "ipv4s", ipv4s)
        pulumi.set(__self__, "ipv6s", ipv6s)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "ports", ports)
        pulumi.set(__self__, "protocol", protocol)

    @property
    @pulumi.getter
    def action(self) -> pulumi.Input[str]:
        """
        Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        """
        return pulumi.get(self, "action")

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

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

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

    @property
    @pulumi.getter
    def ipv4s(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of IPv4 addresses or networks. Must be in IP/mask format.
        """
        return pulumi.get(self, "ipv4s")

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

    @property
    @pulumi.getter
    def ipv6s(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of IPv6 addresses or networks. Must be in IP/mask format.
        """
        return pulumi.get(self, "ipv6s")

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

    @property
    @pulumi.getter
    def label(self) -> pulumi.Input[str]:
        """
        The label of the Linode NodeBalancer
        """
        return pulumi.get(self, "label")

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

    @property
    @pulumi.getter
    def ports(self) -> pulumi.Input[str]:
        """
        A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
        return pulumi.get(self, "ports")

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

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        """
        The network protocol this rule controls. (`TCP`, `UDP`, `ICMP`)
        """
        return pulumi.get(self, "protocol")

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


if not MYPY:
    class NodeBalancerTransferArgsDict(TypedDict):
        in_: pulumi.Input[float]
        """
        The total transfer, in MB, used by this NodeBalancer for the current month
        """
        out: pulumi.Input[float]
        """
        The total inbound transfer, in MB, used for this NodeBalancer for the current month
        """
        total: pulumi.Input[float]
        """
        The total outbound transfer, in MB, used for this NodeBalancer for the current month
        """
elif False:
    NodeBalancerTransferArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NodeBalancerTransferArgs:
    def __init__(__self__, *,
                 in_: pulumi.Input[float],
                 out: pulumi.Input[float],
                 total: pulumi.Input[float]):
        """
        :param pulumi.Input[float] in_: The total transfer, in MB, used by this NodeBalancer for the current month
        :param pulumi.Input[float] out: The total inbound transfer, in MB, used for this NodeBalancer for the current month
        :param pulumi.Input[float] total: The total outbound transfer, in MB, used for this NodeBalancer for the current month
        """
        pulumi.set(__self__, "in_", in_)
        pulumi.set(__self__, "out", out)
        pulumi.set(__self__, "total", total)

    @property
    @pulumi.getter(name="in")
    def in_(self) -> pulumi.Input[float]:
        """
        The total transfer, in MB, used by this NodeBalancer for the current month
        """
        return pulumi.get(self, "in_")

    @in_.setter
    def in_(self, value: pulumi.Input[float]):
        pulumi.set(self, "in_", value)

    @property
    @pulumi.getter
    def out(self) -> pulumi.Input[float]:
        """
        The total inbound transfer, in MB, used for this NodeBalancer for the current month
        """
        return pulumi.get(self, "out")

    @out.setter
    def out(self, value: pulumi.Input[float]):
        pulumi.set(self, "out", value)

    @property
    @pulumi.getter
    def total(self) -> pulumi.Input[float]:
        """
        The total outbound transfer, in MB, used for this NodeBalancer for the current month
        """
        return pulumi.get(self, "total")

    @total.setter
    def total(self, value: pulumi.Input[float]):
        pulumi.set(self, "total", value)


if not MYPY:
    class ObjectStorageBucketCertArgsDict(TypedDict):
        certificate: pulumi.Input[str]
        """
        The Base64 encoded and PEM formatted SSL certificate.
        """
        private_key: pulumi.Input[str]
        """
        The private key associated with the TLS/SSL certificate.
        """
elif False:
    ObjectStorageBucketCertArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ObjectStorageBucketCertArgs:
    def __init__(__self__, *,
                 certificate: pulumi.Input[str],
                 private_key: pulumi.Input[str]):
        """
        :param pulumi.Input[str] certificate: The Base64 encoded and PEM formatted SSL certificate.
        :param pulumi.Input[str] private_key: The private key associated with the TLS/SSL certificate.
        """
        pulumi.set(__self__, "certificate", certificate)
        pulumi.set(__self__, "private_key", private_key)

    @property
    @pulumi.getter
    def certificate(self) -> pulumi.Input[str]:
        """
        The Base64 encoded and PEM formatted SSL certificate.
        """
        return pulumi.get(self, "certificate")

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

    @property
    @pulumi.getter(name="privateKey")
    def private_key(self) -> pulumi.Input[str]:
        """
        The private key associated with the TLS/SSL certificate.
        """
        return pulumi.get(self, "private_key")

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


if not MYPY:
    class ObjectStorageBucketLifecycleRuleArgsDict(TypedDict):
        enabled: pulumi.Input[bool]
        """
        Specifies whether the lifecycle rule is active.
        """
        abort_incomplete_multipart_upload_days: NotRequired[pulumi.Input[int]]
        """
        Specifies the number of days after initiating a multipart upload when the multipart upload must be completed.

        * `expiration` - (Optional) Specifies a period in the object's expire.

        * `noncurrent_version_expiration` - (Optional) Specifies when non-current object versions expire.
        """
        expiration: NotRequired[pulumi.Input['ObjectStorageBucketLifecycleRuleExpirationArgsDict']]
        """
        Specifies a period in the object's expire.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The unique identifier for the rule.
        """
        noncurrent_version_expiration: NotRequired[pulumi.Input['ObjectStorageBucketLifecycleRuleNoncurrentVersionExpirationArgsDict']]
        """
        Specifies when non-current object versions expire.
        """
        prefix: NotRequired[pulumi.Input[str]]
        """
        The object key prefix identifying one or more objects to which the rule applies.
        """
elif False:
    ObjectStorageBucketLifecycleRuleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ObjectStorageBucketLifecycleRuleArgs:
    def __init__(__self__, *,
                 enabled: pulumi.Input[bool],
                 abort_incomplete_multipart_upload_days: Optional[pulumi.Input[int]] = None,
                 expiration: Optional[pulumi.Input['ObjectStorageBucketLifecycleRuleExpirationArgs']] = None,
                 id: Optional[pulumi.Input[str]] = None,
                 noncurrent_version_expiration: Optional[pulumi.Input['ObjectStorageBucketLifecycleRuleNoncurrentVersionExpirationArgs']] = None,
                 prefix: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] enabled: Specifies whether the lifecycle rule is active.
        :param pulumi.Input[int] abort_incomplete_multipart_upload_days: Specifies the number of days after initiating a multipart upload when the multipart upload must be completed.
               
               * `expiration` - (Optional) Specifies a period in the object's expire.
               
               * `noncurrent_version_expiration` - (Optional) Specifies when non-current object versions expire.
        :param pulumi.Input['ObjectStorageBucketLifecycleRuleExpirationArgs'] expiration: Specifies a period in the object's expire.
        :param pulumi.Input[str] id: The unique identifier for the rule.
        :param pulumi.Input['ObjectStorageBucketLifecycleRuleNoncurrentVersionExpirationArgs'] noncurrent_version_expiration: Specifies when non-current object versions expire.
        :param pulumi.Input[str] prefix: The object key prefix identifying one or more objects to which the rule applies.
        """
        pulumi.set(__self__, "enabled", enabled)
        if abort_incomplete_multipart_upload_days is not None:
            pulumi.set(__self__, "abort_incomplete_multipart_upload_days", abort_incomplete_multipart_upload_days)
        if expiration is not None:
            pulumi.set(__self__, "expiration", expiration)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if noncurrent_version_expiration is not None:
            pulumi.set(__self__, "noncurrent_version_expiration", noncurrent_version_expiration)
        if prefix is not None:
            pulumi.set(__self__, "prefix", prefix)

    @property
    @pulumi.getter
    def enabled(self) -> pulumi.Input[bool]:
        """
        Specifies whether the lifecycle rule is active.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter(name="abortIncompleteMultipartUploadDays")
    def abort_incomplete_multipart_upload_days(self) -> Optional[pulumi.Input[int]]:
        """
        Specifies the number of days after initiating a multipart upload when the multipart upload must be completed.

        * `expiration` - (Optional) Specifies a period in the object's expire.

        * `noncurrent_version_expiration` - (Optional) Specifies when non-current object versions expire.
        """
        return pulumi.get(self, "abort_incomplete_multipart_upload_days")

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

    @property
    @pulumi.getter
    def expiration(self) -> Optional[pulumi.Input['ObjectStorageBucketLifecycleRuleExpirationArgs']]:
        """
        Specifies a period in the object's expire.
        """
        return pulumi.get(self, "expiration")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The unique identifier for the rule.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="noncurrentVersionExpiration")
    def noncurrent_version_expiration(self) -> Optional[pulumi.Input['ObjectStorageBucketLifecycleRuleNoncurrentVersionExpirationArgs']]:
        """
        Specifies when non-current object versions expire.
        """
        return pulumi.get(self, "noncurrent_version_expiration")

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

    @property
    @pulumi.getter
    def prefix(self) -> Optional[pulumi.Input[str]]:
        """
        The object key prefix identifying one or more objects to which the rule applies.
        """
        return pulumi.get(self, "prefix")

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


if not MYPY:
    class ObjectStorageBucketLifecycleRuleExpirationArgsDict(TypedDict):
        date: NotRequired[pulumi.Input[str]]
        """
        Specifies the date after which you want the corresponding action to take effect.
        """
        days: NotRequired[pulumi.Input[int]]
        """
        Specifies the number of days after object creation when the specific rule action takes effect.
        """
        expired_object_delete_marker: NotRequired[pulumi.Input[bool]]
        """
        On a versioned bucket (versioning-enabled or versioning-suspended bucket), you can add this element in the lifecycle configuration to direct Linode Object Storage to delete expired object delete markers. This cannot be specified with Days or Date in a Lifecycle Expiration Policy.
        """
elif False:
    ObjectStorageBucketLifecycleRuleExpirationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ObjectStorageBucketLifecycleRuleExpirationArgs:
    def __init__(__self__, *,
                 date: Optional[pulumi.Input[str]] = None,
                 days: Optional[pulumi.Input[int]] = None,
                 expired_object_delete_marker: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] date: Specifies the date after which you want the corresponding action to take effect.
        :param pulumi.Input[int] days: Specifies the number of days after object creation when the specific rule action takes effect.
        :param pulumi.Input[bool] expired_object_delete_marker: On a versioned bucket (versioning-enabled or versioning-suspended bucket), you can add this element in the lifecycle configuration to direct Linode Object Storage to delete expired object delete markers. This cannot be specified with Days or Date in a Lifecycle Expiration Policy.
        """
        if date is not None:
            pulumi.set(__self__, "date", date)
        if days is not None:
            pulumi.set(__self__, "days", days)
        if expired_object_delete_marker is not None:
            pulumi.set(__self__, "expired_object_delete_marker", expired_object_delete_marker)

    @property
    @pulumi.getter
    def date(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies the date after which you want the corresponding action to take effect.
        """
        return pulumi.get(self, "date")

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

    @property
    @pulumi.getter
    def days(self) -> Optional[pulumi.Input[int]]:
        """
        Specifies the number of days after object creation when the specific rule action takes effect.
        """
        return pulumi.get(self, "days")

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

    @property
    @pulumi.getter(name="expiredObjectDeleteMarker")
    def expired_object_delete_marker(self) -> Optional[pulumi.Input[bool]]:
        """
        On a versioned bucket (versioning-enabled or versioning-suspended bucket), you can add this element in the lifecycle configuration to direct Linode Object Storage to delete expired object delete markers. This cannot be specified with Days or Date in a Lifecycle Expiration Policy.
        """
        return pulumi.get(self, "expired_object_delete_marker")

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


if not MYPY:
    class ObjectStorageBucketLifecycleRuleNoncurrentVersionExpirationArgsDict(TypedDict):
        days: pulumi.Input[int]
        """
        Specifies the number of days non-current object versions expire.
        """
elif False:
    ObjectStorageBucketLifecycleRuleNoncurrentVersionExpirationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ObjectStorageBucketLifecycleRuleNoncurrentVersionExpirationArgs:
    def __init__(__self__, *,
                 days: pulumi.Input[int]):
        """
        :param pulumi.Input[int] days: Specifies the number of days non-current object versions expire.
        """
        pulumi.set(__self__, "days", days)

    @property
    @pulumi.getter
    def days(self) -> pulumi.Input[int]:
        """
        Specifies the number of days non-current object versions expire.
        """
        return pulumi.get(self, "days")

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


if not MYPY:
    class ObjectStorageKeyBucketAccessArgsDict(TypedDict):
        bucket_name: pulumi.Input[str]
        """
        The unique label of the bucket to which the key will grant limited access.
        """
        permissions: pulumi.Input[str]
        """
        This Limited Access Key’s permissions for the selected bucket. *Changing `permissions` forces the creation of a new Object Storage Key.* (`read_write`, `read_only`)
        """
        cluster: NotRequired[pulumi.Input[str]]
        """
        The Object Storage cluster where the bucket resides. Deprecated in favor of `region`.
        """
        region: NotRequired[pulumi.Input[str]]
        """
        The region where the bucket resides.
        """
elif False:
    ObjectStorageKeyBucketAccessArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ObjectStorageKeyBucketAccessArgs:
    def __init__(__self__, *,
                 bucket_name: pulumi.Input[str],
                 permissions: pulumi.Input[str],
                 cluster: Optional[pulumi.Input[str]] = None,
                 region: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] bucket_name: The unique label of the bucket to which the key will grant limited access.
        :param pulumi.Input[str] permissions: This Limited Access Key’s permissions for the selected bucket. *Changing `permissions` forces the creation of a new Object Storage Key.* (`read_write`, `read_only`)
        :param pulumi.Input[str] cluster: The Object Storage cluster where the bucket resides. Deprecated in favor of `region`.
        :param pulumi.Input[str] region: The region where the bucket resides.
        """
        pulumi.set(__self__, "bucket_name", bucket_name)
        pulumi.set(__self__, "permissions", permissions)
        if cluster is not None:
            warnings.warn("""The `cluster` attribute in a `bucket_access` block has been deprecated in favor of `region` attribute. A cluster value can be converted to a region value by removing -x at the end, for example, a cluster value `us-mia-1` can be converted to region value `us-mia`""", DeprecationWarning)
            pulumi.log.warn("""cluster is deprecated: The `cluster` attribute in a `bucket_access` block has been deprecated in favor of `region` attribute. A cluster value can be converted to a region value by removing -x at the end, for example, a cluster value `us-mia-1` can be converted to region value `us-mia`""")
        if cluster is not None:
            pulumi.set(__self__, "cluster", cluster)
        if region is not None:
            pulumi.set(__self__, "region", region)

    @property
    @pulumi.getter(name="bucketName")
    def bucket_name(self) -> pulumi.Input[str]:
        """
        The unique label of the bucket to which the key will grant limited access.
        """
        return pulumi.get(self, "bucket_name")

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

    @property
    @pulumi.getter
    def permissions(self) -> pulumi.Input[str]:
        """
        This Limited Access Key’s permissions for the selected bucket. *Changing `permissions` forces the creation of a new Object Storage Key.* (`read_write`, `read_only`)
        """
        return pulumi.get(self, "permissions")

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

    @property
    @pulumi.getter
    @_utilities.deprecated("""The `cluster` attribute in a `bucket_access` block has been deprecated in favor of `region` attribute. A cluster value can be converted to a region value by removing -x at the end, for example, a cluster value `us-mia-1` can be converted to region value `us-mia`""")
    def cluster(self) -> Optional[pulumi.Input[str]]:
        """
        The Object Storage cluster where the bucket resides. Deprecated in favor of `region`.
        """
        return pulumi.get(self, "cluster")

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

    @property
    @pulumi.getter
    def region(self) -> Optional[pulumi.Input[str]]:
        """
        The region where the bucket resides.
        """
        return pulumi.get(self, "region")

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


if not MYPY:
    class ObjectStorageKeyRegionsDetailArgsDict(TypedDict):
        id: pulumi.Input[str]
        """
        The ID of the region.
        """
        s3_endpoint: pulumi.Input[str]
        """
        The S3-compatible hostname you can use to access the Object Storage buckets in this region.
        """
elif False:
    ObjectStorageKeyRegionsDetailArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ObjectStorageKeyRegionsDetailArgs:
    def __init__(__self__, *,
                 id: pulumi.Input[str],
                 s3_endpoint: pulumi.Input[str]):
        """
        :param pulumi.Input[str] id: The ID of the region.
        :param pulumi.Input[str] s3_endpoint: The S3-compatible hostname you can use to access the Object Storage buckets in this region.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "s3_endpoint", s3_endpoint)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[str]:
        """
        The ID of the region.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="s3Endpoint")
    def s3_endpoint(self) -> pulumi.Input[str]:
        """
        The S3-compatible hostname you can use to access the Object Storage buckets in this region.
        """
        return pulumi.get(self, "s3_endpoint")

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


if not MYPY:
    class PlacementGroupMemberArgsDict(TypedDict):
        is_compliant: pulumi.Input[bool]
        """
        Whether this Linode is currently compliant with the group's placement group type.
        """
        linode_id: pulumi.Input[int]
        """
        The ID of the Linode.
        """
elif False:
    PlacementGroupMemberArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class PlacementGroupMemberArgs:
    def __init__(__self__, *,
                 is_compliant: pulumi.Input[bool],
                 linode_id: pulumi.Input[int]):
        """
        :param pulumi.Input[bool] is_compliant: Whether this Linode is currently compliant with the group's placement group type.
        :param pulumi.Input[int] linode_id: The ID of the Linode.
        """
        pulumi.set(__self__, "is_compliant", is_compliant)
        pulumi.set(__self__, "linode_id", linode_id)

    @property
    @pulumi.getter(name="isCompliant")
    def is_compliant(self) -> pulumi.Input[bool]:
        """
        Whether this Linode is currently compliant with the group's placement group type.
        """
        return pulumi.get(self, "is_compliant")

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

    @property
    @pulumi.getter(name="linodeId")
    def linode_id(self) -> pulumi.Input[int]:
        """
        The ID of the Linode.
        """
        return pulumi.get(self, "linode_id")

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


if not MYPY:
    class RdnsTimeoutsArgsDict(TypedDict):
        create: NotRequired[pulumi.Input[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).
        """
        update: NotRequired[pulumi.Input[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).
        """
elif False:
    RdnsTimeoutsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class RdnsTimeoutsArgs:
    def __init__(__self__, *,
                 create: Optional[pulumi.Input[str]] = None,
                 update: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[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 update is not None:
            pulumi.set(__self__, "update", update)

    @property
    @pulumi.getter
    def create(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter
    def update(self) -> Optional[pulumi.Input[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")

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


if not MYPY:
    class ReservedIpAssignmentVpcNat11ArgsDict(TypedDict):
        address: pulumi.Input[str]
        subnet_id: pulumi.Input[int]
        vpc_id: pulumi.Input[int]
elif False:
    ReservedIpAssignmentVpcNat11ArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ReservedIpAssignmentVpcNat11Args:
    def __init__(__self__, *,
                 address: pulumi.Input[str],
                 subnet_id: pulumi.Input[int],
                 vpc_id: pulumi.Input[int]):
        pulumi.set(__self__, "address", address)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "vpc_id", vpc_id)

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

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> pulumi.Input[int]:
        return pulumi.get(self, "subnet_id")

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

    @property
    @pulumi.getter(name="vpcId")
    def vpc_id(self) -> pulumi.Input[int]:
        return pulumi.get(self, "vpc_id")

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


if not MYPY:
    class StackScriptUserDefinedFieldArgsDict(TypedDict):
        default: pulumi.Input[str]
        """
        The default value. If not specified, this value will be used.
        """
        example: pulumi.Input[str]
        """
        An example value for the field.
        """
        label: pulumi.Input[str]
        """
        The StackScript's label is for display purposes only.
        """
        many_of: pulumi.Input[str]
        """
        A list of acceptable values for the field in any quantity, combination or order.
        """
        name: pulumi.Input[str]
        """
        The name of the field.
        """
        one_of: pulumi.Input[str]
        """
        A list of acceptable single values for the field.
        """
elif False:
    StackScriptUserDefinedFieldArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class StackScriptUserDefinedFieldArgs:
    def __init__(__self__, *,
                 default: pulumi.Input[str],
                 example: pulumi.Input[str],
                 label: pulumi.Input[str],
                 many_of: pulumi.Input[str],
                 name: pulumi.Input[str],
                 one_of: pulumi.Input[str]):
        """
        :param pulumi.Input[str] default: The default value. If not specified, this value will be used.
        :param pulumi.Input[str] example: An example value for the field.
        :param pulumi.Input[str] label: The StackScript's label is for display purposes only.
        :param pulumi.Input[str] many_of: A list of acceptable values for the field in any quantity, combination or order.
        :param pulumi.Input[str] name: The name of the field.
        :param pulumi.Input[str] one_of: A list of acceptable single values for the field.
        """
        pulumi.set(__self__, "default", default)
        pulumi.set(__self__, "example", example)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "many_of", many_of)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "one_of", one_of)

    @property
    @pulumi.getter
    def default(self) -> pulumi.Input[str]:
        """
        The default value. If not specified, this value will be used.
        """
        return pulumi.get(self, "default")

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

    @property
    @pulumi.getter
    def example(self) -> pulumi.Input[str]:
        """
        An example value for the field.
        """
        return pulumi.get(self, "example")

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

    @property
    @pulumi.getter
    def label(self) -> pulumi.Input[str]:
        """
        The StackScript's label is for display purposes only.
        """
        return pulumi.get(self, "label")

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

    @property
    @pulumi.getter(name="manyOf")
    def many_of(self) -> pulumi.Input[str]:
        """
        A list of acceptable values for the field in any quantity, combination or order.
        """
        return pulumi.get(self, "many_of")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the field.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="oneOf")
    def one_of(self) -> pulumi.Input[str]:
        """
        A list of acceptable single values for the field.
        """
        return pulumi.get(self, "one_of")

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


if not MYPY:
    class UserDomainGrantArgsDict(TypedDict):
        id: pulumi.Input[int]
        """
        The ID of the entity this grant applies to.
        """
        permissions: pulumi.Input[str]
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
elif False:
    UserDomainGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class UserDomainGrantArgs:
    def __init__(__self__, *,
                 id: pulumi.Input[int],
                 permissions: pulumi.Input[str]):
        """
        :param pulumi.Input[int] id: The ID of the entity this grant applies to.
        :param pulumi.Input[str] permissions: The level of access this User has to this entity. If null, this User has no access.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[int]:
        """
        The ID of the entity this grant applies to.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def permissions(self) -> pulumi.Input[str]:
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
        return pulumi.get(self, "permissions")

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


if not MYPY:
    class UserFirewallGrantArgsDict(TypedDict):
        id: pulumi.Input[int]
        """
        The ID of the entity this grant applies to.
        """
        permissions: pulumi.Input[str]
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
elif False:
    UserFirewallGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class UserFirewallGrantArgs:
    def __init__(__self__, *,
                 id: pulumi.Input[int],
                 permissions: pulumi.Input[str]):
        """
        :param pulumi.Input[int] id: The ID of the entity this grant applies to.
        :param pulumi.Input[str] permissions: The level of access this User has to this entity. If null, this User has no access.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[int]:
        """
        The ID of the entity this grant applies to.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def permissions(self) -> pulumi.Input[str]:
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
        return pulumi.get(self, "permissions")

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


if not MYPY:
    class UserGlobalGrantsArgsDict(TypedDict):
        account_access: NotRequired[pulumi.Input[str]]
        """
        The level of access this User has to Account-level actions, like billing information. A restricted User will never be able to manage users.
        """
        add_databases: NotRequired[pulumi.Input[bool]]
        """
        If true, this User may add Databases.
        """
        add_domains: NotRequired[pulumi.Input[bool]]
        """
        If true, this User may add Domains.
        """
        add_firewalls: NotRequired[pulumi.Input[bool]]
        """
        If true, this User may add Firewalls.
        """
        add_images: NotRequired[pulumi.Input[bool]]
        """
        If true, this User may add Images.
        """
        add_linodes: NotRequired[pulumi.Input[bool]]
        """
        If true, this User may create Linodes.
        """
        add_longview: NotRequired[pulumi.Input[bool]]
        """
        If true, this User may create Longview clients and view the current plan.
        """
        add_nodebalancers: NotRequired[pulumi.Input[bool]]
        """
        If true, this User may add NodeBalancers.
        """
        add_stackscripts: NotRequired[pulumi.Input[bool]]
        """
        If true, this User may add StackScripts.
        """
        add_volumes: NotRequired[pulumi.Input[bool]]
        """
        If true, this User may add Volumes.
        """
        cancel_account: NotRequired[pulumi.Input[bool]]
        """
        If true, this User may cancel the entire Account.
        """
        longview_subscription: NotRequired[pulumi.Input[bool]]
        """
        If true, this User may manage the Account’s Longview subscription.
        """
elif False:
    UserGlobalGrantsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class UserGlobalGrantsArgs:
    def __init__(__self__, *,
                 account_access: Optional[pulumi.Input[str]] = None,
                 add_databases: Optional[pulumi.Input[bool]] = None,
                 add_domains: Optional[pulumi.Input[bool]] = None,
                 add_firewalls: Optional[pulumi.Input[bool]] = None,
                 add_images: Optional[pulumi.Input[bool]] = None,
                 add_linodes: Optional[pulumi.Input[bool]] = None,
                 add_longview: Optional[pulumi.Input[bool]] = None,
                 add_nodebalancers: Optional[pulumi.Input[bool]] = None,
                 add_stackscripts: Optional[pulumi.Input[bool]] = None,
                 add_volumes: Optional[pulumi.Input[bool]] = None,
                 cancel_account: Optional[pulumi.Input[bool]] = None,
                 longview_subscription: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] account_access: The level of access this User has to Account-level actions, like billing information. A restricted User will never be able to manage users.
        :param pulumi.Input[bool] add_databases: If true, this User may add Databases.
        :param pulumi.Input[bool] add_domains: If true, this User may add Domains.
        :param pulumi.Input[bool] add_firewalls: If true, this User may add Firewalls.
        :param pulumi.Input[bool] add_images: If true, this User may add Images.
        :param pulumi.Input[bool] add_linodes: If true, this User may create Linodes.
        :param pulumi.Input[bool] add_longview: If true, this User may create Longview clients and view the current plan.
        :param pulumi.Input[bool] add_nodebalancers: If true, this User may add NodeBalancers.
        :param pulumi.Input[bool] add_stackscripts: If true, this User may add StackScripts.
        :param pulumi.Input[bool] add_volumes: If true, this User may add Volumes.
        :param pulumi.Input[bool] cancel_account: If true, this User may cancel the entire Account.
        :param pulumi.Input[bool] longview_subscription: If true, this User may manage the Account’s Longview subscription.
        """
        if account_access is not None:
            pulumi.set(__self__, "account_access", account_access)
        if add_databases is not None:
            pulumi.set(__self__, "add_databases", add_databases)
        if add_domains is not None:
            pulumi.set(__self__, "add_domains", add_domains)
        if add_firewalls is not None:
            pulumi.set(__self__, "add_firewalls", add_firewalls)
        if add_images is not None:
            pulumi.set(__self__, "add_images", add_images)
        if add_linodes is not None:
            pulumi.set(__self__, "add_linodes", add_linodes)
        if add_longview is not None:
            pulumi.set(__self__, "add_longview", add_longview)
        if add_nodebalancers is not None:
            pulumi.set(__self__, "add_nodebalancers", add_nodebalancers)
        if add_stackscripts is not None:
            pulumi.set(__self__, "add_stackscripts", add_stackscripts)
        if add_volumes is not None:
            pulumi.set(__self__, "add_volumes", add_volumes)
        if cancel_account is not None:
            pulumi.set(__self__, "cancel_account", cancel_account)
        if longview_subscription is not None:
            pulumi.set(__self__, "longview_subscription", longview_subscription)

    @property
    @pulumi.getter(name="accountAccess")
    def account_access(self) -> Optional[pulumi.Input[str]]:
        """
        The level of access this User has to Account-level actions, like billing information. A restricted User will never be able to manage users.
        """
        return pulumi.get(self, "account_access")

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

    @property
    @pulumi.getter(name="addDatabases")
    def add_databases(self) -> Optional[pulumi.Input[bool]]:
        """
        If true, this User may add Databases.
        """
        return pulumi.get(self, "add_databases")

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

    @property
    @pulumi.getter(name="addDomains")
    def add_domains(self) -> Optional[pulumi.Input[bool]]:
        """
        If true, this User may add Domains.
        """
        return pulumi.get(self, "add_domains")

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

    @property
    @pulumi.getter(name="addFirewalls")
    def add_firewalls(self) -> Optional[pulumi.Input[bool]]:
        """
        If true, this User may add Firewalls.
        """
        return pulumi.get(self, "add_firewalls")

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

    @property
    @pulumi.getter(name="addImages")
    def add_images(self) -> Optional[pulumi.Input[bool]]:
        """
        If true, this User may add Images.
        """
        return pulumi.get(self, "add_images")

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

    @property
    @pulumi.getter(name="addLinodes")
    def add_linodes(self) -> Optional[pulumi.Input[bool]]:
        """
        If true, this User may create Linodes.
        """
        return pulumi.get(self, "add_linodes")

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

    @property
    @pulumi.getter(name="addLongview")
    def add_longview(self) -> Optional[pulumi.Input[bool]]:
        """
        If true, this User may create Longview clients and view the current plan.
        """
        return pulumi.get(self, "add_longview")

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

    @property
    @pulumi.getter(name="addNodebalancers")
    def add_nodebalancers(self) -> Optional[pulumi.Input[bool]]:
        """
        If true, this User may add NodeBalancers.
        """
        return pulumi.get(self, "add_nodebalancers")

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

    @property
    @pulumi.getter(name="addStackscripts")
    def add_stackscripts(self) -> Optional[pulumi.Input[bool]]:
        """
        If true, this User may add StackScripts.
        """
        return pulumi.get(self, "add_stackscripts")

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

    @property
    @pulumi.getter(name="addVolumes")
    def add_volumes(self) -> Optional[pulumi.Input[bool]]:
        """
        If true, this User may add Volumes.
        """
        return pulumi.get(self, "add_volumes")

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

    @property
    @pulumi.getter(name="cancelAccount")
    def cancel_account(self) -> Optional[pulumi.Input[bool]]:
        """
        If true, this User may cancel the entire Account.
        """
        return pulumi.get(self, "cancel_account")

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

    @property
    @pulumi.getter(name="longviewSubscription")
    def longview_subscription(self) -> Optional[pulumi.Input[bool]]:
        """
        If true, this User may manage the Account’s Longview subscription.
        """
        return pulumi.get(self, "longview_subscription")

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


if not MYPY:
    class UserImageGrantArgsDict(TypedDict):
        id: pulumi.Input[int]
        """
        The ID of the entity this grant applies to.
        """
        permissions: pulumi.Input[str]
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
elif False:
    UserImageGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class UserImageGrantArgs:
    def __init__(__self__, *,
                 id: pulumi.Input[int],
                 permissions: pulumi.Input[str]):
        """
        :param pulumi.Input[int] id: The ID of the entity this grant applies to.
        :param pulumi.Input[str] permissions: The level of access this User has to this entity. If null, this User has no access.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[int]:
        """
        The ID of the entity this grant applies to.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def permissions(self) -> pulumi.Input[str]:
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
        return pulumi.get(self, "permissions")

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


if not MYPY:
    class UserLinodeGrantArgsDict(TypedDict):
        id: pulumi.Input[int]
        """
        The ID of the entity this grant applies to.
        """
        permissions: pulumi.Input[str]
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
elif False:
    UserLinodeGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class UserLinodeGrantArgs:
    def __init__(__self__, *,
                 id: pulumi.Input[int],
                 permissions: pulumi.Input[str]):
        """
        :param pulumi.Input[int] id: The ID of the entity this grant applies to.
        :param pulumi.Input[str] permissions: The level of access this User has to this entity. If null, this User has no access.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[int]:
        """
        The ID of the entity this grant applies to.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def permissions(self) -> pulumi.Input[str]:
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
        return pulumi.get(self, "permissions")

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


if not MYPY:
    class UserLongviewGrantArgsDict(TypedDict):
        id: pulumi.Input[int]
        """
        The ID of the entity this grant applies to.
        """
        permissions: pulumi.Input[str]
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
elif False:
    UserLongviewGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class UserLongviewGrantArgs:
    def __init__(__self__, *,
                 id: pulumi.Input[int],
                 permissions: pulumi.Input[str]):
        """
        :param pulumi.Input[int] id: The ID of the entity this grant applies to.
        :param pulumi.Input[str] permissions: The level of access this User has to this entity. If null, this User has no access.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[int]:
        """
        The ID of the entity this grant applies to.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def permissions(self) -> pulumi.Input[str]:
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
        return pulumi.get(self, "permissions")

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


if not MYPY:
    class UserNodebalancerGrantArgsDict(TypedDict):
        id: pulumi.Input[int]
        """
        The ID of the entity this grant applies to.
        """
        permissions: pulumi.Input[str]
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
elif False:
    UserNodebalancerGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class UserNodebalancerGrantArgs:
    def __init__(__self__, *,
                 id: pulumi.Input[int],
                 permissions: pulumi.Input[str]):
        """
        :param pulumi.Input[int] id: The ID of the entity this grant applies to.
        :param pulumi.Input[str] permissions: The level of access this User has to this entity. If null, this User has no access.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[int]:
        """
        The ID of the entity this grant applies to.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def permissions(self) -> pulumi.Input[str]:
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
        return pulumi.get(self, "permissions")

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


if not MYPY:
    class UserStackscriptGrantArgsDict(TypedDict):
        id: pulumi.Input[int]
        """
        The ID of the entity this grant applies to.
        """
        permissions: pulumi.Input[str]
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
elif False:
    UserStackscriptGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class UserStackscriptGrantArgs:
    def __init__(__self__, *,
                 id: pulumi.Input[int],
                 permissions: pulumi.Input[str]):
        """
        :param pulumi.Input[int] id: The ID of the entity this grant applies to.
        :param pulumi.Input[str] permissions: The level of access this User has to this entity. If null, this User has no access.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[int]:
        """
        The ID of the entity this grant applies to.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def permissions(self) -> pulumi.Input[str]:
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
        return pulumi.get(self, "permissions")

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


if not MYPY:
    class UserVolumeGrantArgsDict(TypedDict):
        id: pulumi.Input[int]
        """
        The ID of the entity this grant applies to.
        """
        permissions: pulumi.Input[str]
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
elif False:
    UserVolumeGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class UserVolumeGrantArgs:
    def __init__(__self__, *,
                 id: pulumi.Input[int],
                 permissions: pulumi.Input[str]):
        """
        :param pulumi.Input[int] id: The ID of the entity this grant applies to.
        :param pulumi.Input[str] permissions: The level of access this User has to this entity. If null, this User has no access.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[int]:
        """
        The ID of the entity this grant applies to.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def permissions(self) -> pulumi.Input[str]:
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
        return pulumi.get(self, "permissions")

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


if not MYPY:
    class VolumeTimeoutsArgsDict(TypedDict):
        create: NotRequired[pulumi.Input[str]]
        """
        Used when creating the volume (until the volume is reaches the initial `active` state)
        """
        delete: NotRequired[pulumi.Input[str]]
        """
        Used when deleting the volume
        """
        update: NotRequired[pulumi.Input[str]]
        """
        Used when updating the volume when necessary during update - e.g. when resizing the volume
        """
elif False:
    VolumeTimeoutsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VolumeTimeoutsArgs:
    def __init__(__self__, *,
                 create: Optional[pulumi.Input[str]] = None,
                 delete: Optional[pulumi.Input[str]] = None,
                 update: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] create: Used when creating the volume (until the volume is reaches the initial `active` state)
        :param pulumi.Input[str] delete: Used when deleting the volume
        :param pulumi.Input[str] update: Used when updating the volume when necessary during update - e.g. when resizing the volume
        """
        if create is not None:
            pulumi.set(__self__, "create", create)
        if delete is not None:
            pulumi.set(__self__, "delete", delete)
        if update is not None:
            pulumi.set(__self__, "update", update)

    @property
    @pulumi.getter
    def create(self) -> Optional[pulumi.Input[str]]:
        """
        Used when creating the volume (until the volume is reaches the initial `active` state)
        """
        return pulumi.get(self, "create")

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

    @property
    @pulumi.getter
    def delete(self) -> Optional[pulumi.Input[str]]:
        """
        Used when deleting the volume
        """
        return pulumi.get(self, "delete")

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

    @property
    @pulumi.getter
    def update(self) -> Optional[pulumi.Input[str]]:
        """
        Used when updating the volume when necessary during update - e.g. when resizing the volume
        """
        return pulumi.get(self, "update")

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


if not MYPY:
    class VpcSubnetLinodeArgsDict(TypedDict):
        id: pulumi.Input[int]
        """
        The ID of the VPC Subnet.
        """
        interfaces: pulumi.Input[Sequence[pulumi.Input['VpcSubnetLinodeInterfaceArgsDict']]]
elif False:
    VpcSubnetLinodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpcSubnetLinodeArgs:
    def __init__(__self__, *,
                 id: pulumi.Input[int],
                 interfaces: pulumi.Input[Sequence[pulumi.Input['VpcSubnetLinodeInterfaceArgs']]]):
        """
        :param pulumi.Input[int] id: The ID of the VPC Subnet.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "interfaces", interfaces)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[int]:
        """
        The ID of the VPC Subnet.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def interfaces(self) -> pulumi.Input[Sequence[pulumi.Input['VpcSubnetLinodeInterfaceArgs']]]:
        return pulumi.get(self, "interfaces")

    @interfaces.setter
    def interfaces(self, value: pulumi.Input[Sequence[pulumi.Input['VpcSubnetLinodeInterfaceArgs']]]):
        pulumi.set(self, "interfaces", value)


if not MYPY:
    class VpcSubnetLinodeInterfaceArgsDict(TypedDict):
        active: pulumi.Input[bool]
        id: pulumi.Input[int]
        """
        The ID of the VPC Subnet.
        """
elif False:
    VpcSubnetLinodeInterfaceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpcSubnetLinodeInterfaceArgs:
    def __init__(__self__, *,
                 active: pulumi.Input[bool],
                 id: pulumi.Input[int]):
        """
        :param pulumi.Input[int] id: The ID of the VPC Subnet.
        """
        pulumi.set(__self__, "active", active)
        pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def active(self) -> pulumi.Input[bool]:
        return pulumi.get(self, "active")

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

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[int]:
        """
        The ID of the VPC Subnet.
        """
        return pulumi.get(self, "id")

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


if not MYPY:
    class GetAccountAvailabilitiesAvailabilityArgsDict(TypedDict):
        availables: Sequence[str]
        """
        A set of services which are available for the given region.
        """
        region: str
        """
        The region this availability entry refers to.
        """
        unavailables: Sequence[str]
        """
        A set of services that are unavailable for the given region.
        """
elif False:
    GetAccountAvailabilitiesAvailabilityArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetAccountAvailabilitiesAvailabilityArgs:
    def __init__(__self__, *,
                 availables: Sequence[str],
                 region: str,
                 unavailables: Sequence[str]):
        """
        :param Sequence[str] availables: A set of services which are available for the given region.
        :param str region: The region this availability entry refers to.
        :param Sequence[str] unavailables: A set of services that are unavailable for the given region.
        """
        pulumi.set(__self__, "availables", availables)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "unavailables", unavailables)

    @property
    @pulumi.getter
    def availables(self) -> Sequence[str]:
        """
        A set of services which are available for the given region.
        """
        return pulumi.get(self, "availables")

    @availables.setter
    def availables(self, value: Sequence[str]):
        pulumi.set(self, "availables", value)

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The region this availability entry refers to.
        """
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: str):
        pulumi.set(self, "region", value)

    @property
    @pulumi.getter
    def unavailables(self) -> Sequence[str]:
        """
        A set of services that are unavailable for the given region.
        """
        return pulumi.get(self, "unavailables")

    @unavailables.setter
    def unavailables(self, value: Sequence[str]):
        pulumi.set(self, "unavailables", value)


if not MYPY:
    class GetAccountAvailabilitiesFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetAccountAvailabilitiesFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetAccountAvailabilitiesFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetAccountLoginsFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetAccountLoginsFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetAccountLoginsFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetAccountLoginsLoginArgsDict(TypedDict):
        datetime: str
        """
        When the login was initiated.
        """
        id: int
        """
        The unique ID of this login object.
        """
        ip: str
        """
        The remote IP address that requested the login.
        """
        restricted: bool
        """
        True if the User that was logged into was a restricted User, false otherwise.
        """
        status: str
        """
        Whether the login attempt succeeded or failed.
        """
        username: str
        """
        The username of the User that was logged into.
        """
elif False:
    GetAccountLoginsLoginArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetAccountLoginsLoginArgs:
    def __init__(__self__, *,
                 datetime: str,
                 id: int,
                 ip: str,
                 restricted: bool,
                 status: str,
                 username: str):
        """
        :param str datetime: When the login was initiated.
        :param int id: The unique ID of this login object.
        :param str ip: The remote IP address that requested the login.
        :param bool restricted: True if the User that was logged into was a restricted User, false otherwise.
        :param str status: Whether the login attempt succeeded or failed.
        :param str username: The username of the User that was logged into.
        """
        pulumi.set(__self__, "datetime", datetime)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ip", ip)
        pulumi.set(__self__, "restricted", restricted)
        pulumi.set(__self__, "status", status)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def datetime(self) -> str:
        """
        When the login was initiated.
        """
        return pulumi.get(self, "datetime")

    @datetime.setter
    def datetime(self, value: str):
        pulumi.set(self, "datetime", value)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The unique ID of this login object.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def ip(self) -> str:
        """
        The remote IP address that requested the login.
        """
        return pulumi.get(self, "ip")

    @ip.setter
    def ip(self, value: str):
        pulumi.set(self, "ip", value)

    @property
    @pulumi.getter
    def restricted(self) -> bool:
        """
        True if the User that was logged into was a restricted User, false otherwise.
        """
        return pulumi.get(self, "restricted")

    @restricted.setter
    def restricted(self, value: bool):
        pulumi.set(self, "restricted", value)

    @property
    @pulumi.getter
    def status(self) -> str:
        """
        Whether the login attempt succeeded or failed.
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: str):
        pulumi.set(self, "status", value)

    @property
    @pulumi.getter
    def username(self) -> str:
        """
        The username of the User that was logged into.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: str):
        pulumi.set(self, "username", value)


if not MYPY:
    class GetChildAccountsChildAccountArgsDict(TypedDict):
        active_since: str
        """
        When this account was first activated
        """
        address1: str
        """
        First line of this Account's billing address.
        """
        address2: str
        """
        Second line of this Account's billing address.
        """
        balance: float
        """
        This Account's balance, in US dollars.
        """
        capabilities: Sequence[str]
        """
        A set containing all the capabilities of this Account.
        """
        city: str
        """
        The city for this Account's billing address.
        """
        company: str
        """
        The company name associated with this Account.
        """
        country: str
        """
        The two-letter country code of this Account's billing address.
        """
        email: str
        """
        The email address for this Account, for account management communications, and may be used for other communications as configured.
        """
        euuid: str
        """
        The unique ID of this Account.
        """
        first_name: str
        """
        The first name of the person associated with this Account.
        """
        id: str
        """
        The Email of the Account.
        """
        last_name: str
        """
        The last name of the person associated with this Account.
        """
        phone: str
        """
        The phone number associated with this Account.
        """
        state: str
        """
        If billing address is in the United States, this is the State portion of the Account's billing address. If the address is outside the US, this is the Province associated with the Account's billing address.
        """
        zip: str
        """
        The zip code of this Account's billing address.
        """
elif False:
    GetChildAccountsChildAccountArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetChildAccountsChildAccountArgs:
    def __init__(__self__, *,
                 active_since: str,
                 address1: str,
                 address2: str,
                 balance: float,
                 capabilities: Sequence[str],
                 city: str,
                 company: str,
                 country: str,
                 email: str,
                 euuid: str,
                 first_name: str,
                 id: str,
                 last_name: str,
                 phone: str,
                 state: str,
                 zip: str):
        """
        :param str active_since: When this account was first activated
        :param str address1: First line of this Account's billing address.
        :param str address2: Second line of this Account's billing address.
        :param float balance: This Account's balance, in US dollars.
        :param Sequence[str] capabilities: A set containing all the capabilities of this Account.
        :param str city: The city for this Account's billing address.
        :param str company: The company name associated with this Account.
        :param str country: The two-letter country code of this Account's billing address.
        :param str email: The email address for this Account, for account management communications, and may be used for other communications as configured.
        :param str euuid: The unique ID of this Account.
        :param str first_name: The first name of the person associated with this Account.
        :param str id: The Email of the Account.
        :param str last_name: The last name of the person associated with this Account.
        :param str phone: The phone number associated with this Account.
        :param str state: If billing address is in the United States, this is the State portion of the Account's billing address. If the address is outside the US, this is the Province associated with the Account's billing address.
        :param str zip: The zip code of this Account's billing address.
        """
        pulumi.set(__self__, "active_since", active_since)
        pulumi.set(__self__, "address1", address1)
        pulumi.set(__self__, "address2", address2)
        pulumi.set(__self__, "balance", balance)
        pulumi.set(__self__, "capabilities", capabilities)
        pulumi.set(__self__, "city", city)
        pulumi.set(__self__, "company", company)
        pulumi.set(__self__, "country", country)
        pulumi.set(__self__, "email", email)
        pulumi.set(__self__, "euuid", euuid)
        pulumi.set(__self__, "first_name", first_name)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "last_name", last_name)
        pulumi.set(__self__, "phone", phone)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "zip", zip)

    @property
    @pulumi.getter(name="activeSince")
    def active_since(self) -> str:
        """
        When this account was first activated
        """
        return pulumi.get(self, "active_since")

    @active_since.setter
    def active_since(self, value: str):
        pulumi.set(self, "active_since", value)

    @property
    @pulumi.getter
    def address1(self) -> str:
        """
        First line of this Account's billing address.
        """
        return pulumi.get(self, "address1")

    @address1.setter
    def address1(self, value: str):
        pulumi.set(self, "address1", value)

    @property
    @pulumi.getter
    def address2(self) -> str:
        """
        Second line of this Account's billing address.
        """
        return pulumi.get(self, "address2")

    @address2.setter
    def address2(self, value: str):
        pulumi.set(self, "address2", value)

    @property
    @pulumi.getter
    def balance(self) -> float:
        """
        This Account's balance, in US dollars.
        """
        return pulumi.get(self, "balance")

    @balance.setter
    def balance(self, value: float):
        pulumi.set(self, "balance", value)

    @property
    @pulumi.getter
    def capabilities(self) -> Sequence[str]:
        """
        A set containing all the capabilities of this Account.
        """
        return pulumi.get(self, "capabilities")

    @capabilities.setter
    def capabilities(self, value: Sequence[str]):
        pulumi.set(self, "capabilities", value)

    @property
    @pulumi.getter
    def city(self) -> str:
        """
        The city for this Account's billing address.
        """
        return pulumi.get(self, "city")

    @city.setter
    def city(self, value: str):
        pulumi.set(self, "city", value)

    @property
    @pulumi.getter
    def company(self) -> str:
        """
        The company name associated with this Account.
        """
        return pulumi.get(self, "company")

    @company.setter
    def company(self, value: str):
        pulumi.set(self, "company", value)

    @property
    @pulumi.getter
    def country(self) -> str:
        """
        The two-letter country code of this Account's billing address.
        """
        return pulumi.get(self, "country")

    @country.setter
    def country(self, value: str):
        pulumi.set(self, "country", value)

    @property
    @pulumi.getter
    def email(self) -> str:
        """
        The email address for this Account, for account management communications, and may be used for other communications as configured.
        """
        return pulumi.get(self, "email")

    @email.setter
    def email(self, value: str):
        pulumi.set(self, "email", value)

    @property
    @pulumi.getter
    def euuid(self) -> str:
        """
        The unique ID of this Account.
        """
        return pulumi.get(self, "euuid")

    @euuid.setter
    def euuid(self, value: str):
        pulumi.set(self, "euuid", value)

    @property
    @pulumi.getter(name="firstName")
    def first_name(self) -> str:
        """
        The first name of the person associated with this Account.
        """
        return pulumi.get(self, "first_name")

    @first_name.setter
    def first_name(self, value: str):
        pulumi.set(self, "first_name", value)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The Email of the Account.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter(name="lastName")
    def last_name(self) -> str:
        """
        The last name of the person associated with this Account.
        """
        return pulumi.get(self, "last_name")

    @last_name.setter
    def last_name(self, value: str):
        pulumi.set(self, "last_name", value)

    @property
    @pulumi.getter
    def phone(self) -> str:
        """
        The phone number associated with this Account.
        """
        return pulumi.get(self, "phone")

    @phone.setter
    def phone(self, value: str):
        pulumi.set(self, "phone", value)

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        If billing address is in the United States, this is the State portion of the Account's billing address. If the address is outside the US, this is the Province associated with the Account's billing address.
        """
        return pulumi.get(self, "state")

    @state.setter
    def state(self, value: str):
        pulumi.set(self, "state", value)

    @property
    @pulumi.getter
    def zip(self) -> str:
        """
        The zip code of this Account's billing address.
        """
        return pulumi.get(self, "zip")

    @zip.setter
    def zip(self, value: str):
        pulumi.set(self, "zip", value)


if not MYPY:
    class GetChildAccountsFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetChildAccountsFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetChildAccountsFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetDatabaseBackupsBackupArgsDict(TypedDict):
        created: str
        """
        A time value given in a combined date and time format that represents when the database backup was created.
        """
        id: int
        """
        The ID of the database backup object.
        """
        label: str
        """
        The database backup’s label, for display purposes only.
        """
        type: str
        """
        The type of database backup, determined by how the backup was created.
        """
elif False:
    GetDatabaseBackupsBackupArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetDatabaseBackupsBackupArgs:
    def __init__(__self__, *,
                 created: str,
                 id: int,
                 label: str,
                 type: str):
        """
        :param str created: A time value given in a combined date and time format that represents when the database backup was created.
        :param int id: The ID of the database backup object.
        :param str label: The database backup’s label, for display purposes only.
        :param str type: The type of database backup, determined by how the backup was created.
        """
        pulumi.set(__self__, "created", created)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def created(self) -> str:
        """
        A time value given in a combined date and time format that represents when the database backup was created.
        """
        return pulumi.get(self, "created")

    @created.setter
    def created(self, value: str):
        pulumi.set(self, "created", value)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of the database backup object.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The database backup’s label, for display purposes only.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of database backup, determined by how the backup was created.
        """
        return pulumi.get(self, "type")

    @type.setter
    def type(self, value: str):
        pulumi.set(self, "type", value)


if not MYPY:
    class GetDatabaseBackupsFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetDatabaseBackupsFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetDatabaseBackupsFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetDatabaseEnginesEngineArgsDict(TypedDict):
        engine: str
        """
        The Managed Database engine type.
        """
        id: str
        """
        The Managed Database engine ID in engine/version format.
        """
        version: str
        """
        The Managed Database engine version.
        """
elif False:
    GetDatabaseEnginesEngineArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetDatabaseEnginesEngineArgs:
    def __init__(__self__, *,
                 engine: str,
                 id: str,
                 version: str):
        """
        :param str engine: The Managed Database engine type.
        :param str id: The Managed Database engine ID in engine/version format.
        :param str version: The Managed Database engine version.
        """
        pulumi.set(__self__, "engine", engine)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter
    def engine(self) -> str:
        """
        The Managed Database engine type.
        """
        return pulumi.get(self, "engine")

    @engine.setter
    def engine(self, value: str):
        pulumi.set(self, "engine", value)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The Managed Database engine ID in engine/version format.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def version(self) -> str:
        """
        The Managed Database engine version.
        """
        return pulumi.get(self, "version")

    @version.setter
    def version(self, value: str):
        pulumi.set(self, "version", value)


if not MYPY:
    class GetDatabaseEnginesFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetDatabaseEnginesFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetDatabaseEnginesFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetDatabaseMysqlBackupsFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetDatabaseMysqlBackupsFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetDatabaseMysqlBackupsFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetDatabasesDatabaseArgsDict(TypedDict):
        allow_lists: Sequence[str]
        """
        A list of IP addresses that can access the Managed Database.
        """
        cluster_size: int
        """
        The number of Linode Instance nodes deployed to the Managed Database.
        """
        created: str
        """
        When this Managed Database was created.
        """
        encrypted: bool
        """
        Whether the Managed Databases is encrypted.
        """
        engine: str
        """
        The Managed Database engine.
        """
        host_primary: str
        """
        The primary host for the Managed Database.
        """
        host_secondary: str
        """
        The secondary/private network host for the Managed Database.
        """
        id: int
        """
        The ID of the Managed Database.
        """
        instance_uri: str
        """
        he API route for the database instance.
        """
        label: str
        """
        A unique, user-defined string referring to the Managed Database.
        """
        region: str
        """
        The region to use for the Managed Database.
        """
        replication_type: str
        """
        The replication method used for the Managed Database.
        """
        ssl_connection: bool
        """
        Whether to require SSL credentials to establish a connection to the Managed Database.
        """
        status: str
        """
        The operating status of the Managed Database.
        """
        type: str
        """
        The Linode Instance type used for the nodes of the  Managed Database instance.
        """
        updated: str
        """
        When this Managed Database was last updated.
        """
        version: str
        """
        The Managed Database engine version.
        """
elif False:
    GetDatabasesDatabaseArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetDatabasesDatabaseArgs:
    def __init__(__self__, *,
                 allow_lists: Sequence[str],
                 cluster_size: int,
                 created: str,
                 encrypted: bool,
                 engine: str,
                 host_primary: str,
                 host_secondary: str,
                 id: int,
                 instance_uri: str,
                 label: str,
                 region: str,
                 replication_type: str,
                 ssl_connection: bool,
                 status: str,
                 type: str,
                 updated: str,
                 version: str):
        """
        :param Sequence[str] allow_lists: A list of IP addresses that can access the Managed Database.
        :param int cluster_size: The number of Linode Instance nodes deployed to the Managed Database.
        :param str created: When this Managed Database was created.
        :param bool encrypted: Whether the Managed Databases is encrypted.
        :param str engine: The Managed Database engine.
        :param str host_primary: The primary host for the Managed Database.
        :param str host_secondary: The secondary/private network host for the Managed Database.
        :param int id: The ID of the Managed Database.
        :param str instance_uri: he API route for the database instance.
        :param str label: A unique, user-defined string referring to the Managed Database.
        :param str region: The region to use for the Managed Database.
        :param str replication_type: The replication method used for the Managed Database.
        :param bool ssl_connection: Whether to require SSL credentials to establish a connection to the Managed Database.
        :param str status: The operating status of the Managed Database.
        :param str type: The Linode Instance type used for the nodes of the  Managed Database instance.
        :param str updated: When this Managed Database was last updated.
        :param str version: The Managed Database engine version.
        """
        pulumi.set(__self__, "allow_lists", allow_lists)
        pulumi.set(__self__, "cluster_size", cluster_size)
        pulumi.set(__self__, "created", created)
        pulumi.set(__self__, "encrypted", encrypted)
        pulumi.set(__self__, "engine", engine)
        pulumi.set(__self__, "host_primary", host_primary)
        pulumi.set(__self__, "host_secondary", host_secondary)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_uri", instance_uri)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "replication_type", replication_type)
        pulumi.set(__self__, "ssl_connection", ssl_connection)
        pulumi.set(__self__, "status", status)
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "updated", updated)
        pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter(name="allowLists")
    def allow_lists(self) -> Sequence[str]:
        """
        A list of IP addresses that can access the Managed Database.
        """
        return pulumi.get(self, "allow_lists")

    @allow_lists.setter
    def allow_lists(self, value: Sequence[str]):
        pulumi.set(self, "allow_lists", value)

    @property
    @pulumi.getter(name="clusterSize")
    def cluster_size(self) -> int:
        """
        The number of Linode Instance nodes deployed to the Managed Database.
        """
        return pulumi.get(self, "cluster_size")

    @cluster_size.setter
    def cluster_size(self, value: int):
        pulumi.set(self, "cluster_size", value)

    @property
    @pulumi.getter
    def created(self) -> str:
        """
        When this Managed Database was created.
        """
        return pulumi.get(self, "created")

    @created.setter
    def created(self, value: str):
        pulumi.set(self, "created", value)

    @property
    @pulumi.getter
    def encrypted(self) -> bool:
        """
        Whether the Managed Databases is encrypted.
        """
        return pulumi.get(self, "encrypted")

    @encrypted.setter
    def encrypted(self, value: bool):
        pulumi.set(self, "encrypted", value)

    @property
    @pulumi.getter
    def engine(self) -> str:
        """
        The Managed Database engine.
        """
        return pulumi.get(self, "engine")

    @engine.setter
    def engine(self, value: str):
        pulumi.set(self, "engine", value)

    @property
    @pulumi.getter(name="hostPrimary")
    def host_primary(self) -> str:
        """
        The primary host for the Managed Database.
        """
        return pulumi.get(self, "host_primary")

    @host_primary.setter
    def host_primary(self, value: str):
        pulumi.set(self, "host_primary", value)

    @property
    @pulumi.getter(name="hostSecondary")
    def host_secondary(self) -> str:
        """
        The secondary/private network host for the Managed Database.
        """
        return pulumi.get(self, "host_secondary")

    @host_secondary.setter
    def host_secondary(self, value: str):
        pulumi.set(self, "host_secondary", value)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of the Managed Database.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter(name="instanceUri")
    def instance_uri(self) -> str:
        """
        he API route for the database instance.
        """
        return pulumi.get(self, "instance_uri")

    @instance_uri.setter
    def instance_uri(self, value: str):
        pulumi.set(self, "instance_uri", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        A unique, user-defined string referring to the Managed Database.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The region to use for the Managed Database.
        """
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: str):
        pulumi.set(self, "region", value)

    @property
    @pulumi.getter(name="replicationType")
    def replication_type(self) -> str:
        """
        The replication method used for the Managed Database.
        """
        return pulumi.get(self, "replication_type")

    @replication_type.setter
    def replication_type(self, value: str):
        pulumi.set(self, "replication_type", value)

    @property
    @pulumi.getter(name="sslConnection")
    def ssl_connection(self) -> bool:
        """
        Whether to require SSL credentials to establish a connection to the Managed Database.
        """
        return pulumi.get(self, "ssl_connection")

    @ssl_connection.setter
    def ssl_connection(self, value: bool):
        pulumi.set(self, "ssl_connection", value)

    @property
    @pulumi.getter
    def status(self) -> str:
        """
        The operating status of the Managed Database.
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: str):
        pulumi.set(self, "status", value)

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The Linode Instance type used for the nodes of the  Managed Database instance.
        """
        return pulumi.get(self, "type")

    @type.setter
    def type(self, value: str):
        pulumi.set(self, "type", value)

    @property
    @pulumi.getter
    def updated(self) -> str:
        """
        When this Managed Database was last updated.
        """
        return pulumi.get(self, "updated")

    @updated.setter
    def updated(self, value: str):
        pulumi.set(self, "updated", value)

    @property
    @pulumi.getter
    def version(self) -> str:
        """
        The Managed Database engine version.
        """
        return pulumi.get(self, "version")

    @version.setter
    def version(self, value: str):
        pulumi.set(self, "version", value)


if not MYPY:
    class GetDatabasesFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetDatabasesFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetDatabasesFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetDomainsDomainArgsDict(TypedDict):
        axfr_ips: Sequence[str]
        """
        The list of IPs that may perform a zone transfer for this Domain.
        """
        description: str
        """
        A description for this Domain.
        """
        expire_sec: int
        """
        The amount of time in seconds that may pass before this Domain is no longer authoritative.
        """
        group: str
        """
        The group this Domain belongs to.
        """
        master_ips: Sequence[str]
        """
        The IP addresses representing the master DNS for this Domain.
        """
        refresh_sec: int
        """
        The amount of time in seconds before this Domain should be refreshed.
        """
        retry_sec: int
        """
        The interval, in seconds, at which a failed refresh should be retried.
        """
        soa_email: str
        """
        Start of Authority email address.
        """
        status: str
        """
        Used to control whether this Domain is currently being rendered. (`disabled`, `active`)
        """
        tags: Sequence[str]
        """
        An array of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        """
        ttl_sec: int
        """
        'Time to Live'-the amount of time in seconds that this Domain's records may be cached by resolvers or other domain servers.
        """
        type: str
        """
        If this Domain represents the authoritative source of information for the domain it describes, or if it is a read-only copy of a master (also called a slave) (`master`, `slave`)
        """
        domain: NotRequired[str]
        """
        The domain this Domain represents. These must be unique in our system; you cannot have two Domains representing the same domain
        """
        id: NotRequired[int]
        """
        The unique ID of this Domain.
        """
elif False:
    GetDomainsDomainArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetDomainsDomainArgs:
    def __init__(__self__, *,
                 axfr_ips: Sequence[str],
                 description: str,
                 expire_sec: int,
                 group: str,
                 master_ips: Sequence[str],
                 refresh_sec: int,
                 retry_sec: int,
                 soa_email: str,
                 status: str,
                 tags: Sequence[str],
                 ttl_sec: int,
                 type: str,
                 domain: Optional[str] = None,
                 id: Optional[int] = None):
        """
        :param Sequence[str] axfr_ips: The list of IPs that may perform a zone transfer for this Domain.
        :param str description: A description for this Domain.
        :param int expire_sec: The amount of time in seconds that may pass before this Domain is no longer authoritative.
        :param str group: The group this Domain belongs to.
        :param Sequence[str] master_ips: The IP addresses representing the master DNS for this Domain.
        :param int refresh_sec: The amount of time in seconds before this Domain should be refreshed.
        :param int retry_sec: The interval, in seconds, at which a failed refresh should be retried.
        :param str soa_email: Start of Authority email address.
        :param str status: Used to control whether this Domain is currently being rendered. (`disabled`, `active`)
        :param Sequence[str] tags: An array of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        :param int ttl_sec: 'Time to Live'-the amount of time in seconds that this Domain's records may be cached by resolvers or other domain servers.
        :param str type: If this Domain represents the authoritative source of information for the domain it describes, or if it is a read-only copy of a master (also called a slave) (`master`, `slave`)
        :param str domain: The domain this Domain represents. These must be unique in our system; you cannot have two Domains representing the same domain
        :param int id: The unique ID of this Domain.
        """
        pulumi.set(__self__, "axfr_ips", axfr_ips)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "expire_sec", expire_sec)
        pulumi.set(__self__, "group", group)
        pulumi.set(__self__, "master_ips", master_ips)
        pulumi.set(__self__, "refresh_sec", refresh_sec)
        pulumi.set(__self__, "retry_sec", retry_sec)
        pulumi.set(__self__, "soa_email", soa_email)
        pulumi.set(__self__, "status", status)
        pulumi.set(__self__, "tags", tags)
        pulumi.set(__self__, "ttl_sec", ttl_sec)
        pulumi.set(__self__, "type", type)
        if domain is not None:
            pulumi.set(__self__, "domain", domain)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter(name="axfrIps")
    def axfr_ips(self) -> Sequence[str]:
        """
        The list of IPs that may perform a zone transfer for this Domain.
        """
        return pulumi.get(self, "axfr_ips")

    @axfr_ips.setter
    def axfr_ips(self, value: Sequence[str]):
        pulumi.set(self, "axfr_ips", value)

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        A description for this Domain.
        """
        return pulumi.get(self, "description")

    @description.setter
    def description(self, value: str):
        pulumi.set(self, "description", value)

    @property
    @pulumi.getter(name="expireSec")
    def expire_sec(self) -> int:
        """
        The amount of time in seconds that may pass before this Domain is no longer authoritative.
        """
        return pulumi.get(self, "expire_sec")

    @expire_sec.setter
    def expire_sec(self, value: int):
        pulumi.set(self, "expire_sec", value)

    @property
    @pulumi.getter
    def group(self) -> str:
        """
        The group this Domain belongs to.
        """
        return pulumi.get(self, "group")

    @group.setter
    def group(self, value: str):
        pulumi.set(self, "group", value)

    @property
    @pulumi.getter(name="masterIps")
    def master_ips(self) -> Sequence[str]:
        """
        The IP addresses representing the master DNS for this Domain.
        """
        return pulumi.get(self, "master_ips")

    @master_ips.setter
    def master_ips(self, value: Sequence[str]):
        pulumi.set(self, "master_ips", value)

    @property
    @pulumi.getter(name="refreshSec")
    def refresh_sec(self) -> int:
        """
        The amount of time in seconds before this Domain should be refreshed.
        """
        return pulumi.get(self, "refresh_sec")

    @refresh_sec.setter
    def refresh_sec(self, value: int):
        pulumi.set(self, "refresh_sec", value)

    @property
    @pulumi.getter(name="retrySec")
    def retry_sec(self) -> int:
        """
        The interval, in seconds, at which a failed refresh should be retried.
        """
        return pulumi.get(self, "retry_sec")

    @retry_sec.setter
    def retry_sec(self, value: int):
        pulumi.set(self, "retry_sec", value)

    @property
    @pulumi.getter(name="soaEmail")
    def soa_email(self) -> str:
        """
        Start of Authority email address.
        """
        return pulumi.get(self, "soa_email")

    @soa_email.setter
    def soa_email(self, value: str):
        pulumi.set(self, "soa_email", value)

    @property
    @pulumi.getter
    def status(self) -> str:
        """
        Used to control whether this Domain is currently being rendered. (`disabled`, `active`)
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: str):
        pulumi.set(self, "status", value)

    @property
    @pulumi.getter
    def tags(self) -> Sequence[str]:
        """
        An array of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        """
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Sequence[str]):
        pulumi.set(self, "tags", value)

    @property
    @pulumi.getter(name="ttlSec")
    def ttl_sec(self) -> int:
        """
        'Time to Live'-the amount of time in seconds that this Domain's records may be cached by resolvers or other domain servers.
        """
        return pulumi.get(self, "ttl_sec")

    @ttl_sec.setter
    def ttl_sec(self, value: int):
        pulumi.set(self, "ttl_sec", value)

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        If this Domain represents the authoritative source of information for the domain it describes, or if it is a read-only copy of a master (also called a slave) (`master`, `slave`)
        """
        return pulumi.get(self, "type")

    @type.setter
    def type(self, value: str):
        pulumi.set(self, "type", value)

    @property
    @pulumi.getter
    def domain(self) -> Optional[str]:
        """
        The domain this Domain represents. These must be unique in our system; you cannot have two Domains representing the same domain
        """
        return pulumi.get(self, "domain")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[int]:
        """
        The unique ID of this Domain.
        """
        return pulumi.get(self, "id")

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


if not MYPY:
    class GetDomainsFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetDomainsFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetDomainsFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetFirewallsFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetFirewallsFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetFirewallsFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetFirewallsFirewallArgsDict(TypedDict):
        created: str
        """
        When this firewall was created.
        """
        disabled: bool
        """
        If true, the Firewall is inactive.
        """
        id: int
        """
        The unique ID assigned to this Firewall.
        """
        inbound_policy: str
        """
        The default behavior for inbound traffic.
        """
        label: str
        """
        The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned.
        """
        linodes: Sequence[int]
        """
        The IDs of Linodes this firewall is applied to.
        """
        nodebalancers: Sequence[int]
        """
        The IDs of NodeBalancers assigned to this Firewall..
        """
        outbound_policy: str
        """
        The default behavior for outbound traffic.
        """
        status: str
        """
        The status of the firewall.
        """
        tags: Sequence[str]
        """
        An array of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        """
        updated: str
        """
        When this firewall was last updated.
        """
        devices: NotRequired[Sequence['GetFirewallsFirewallDeviceArgsDict']]
        """
        The devices associated with this firewall.
        """
        inbounds: NotRequired[Sequence['GetFirewallsFirewallInboundArgsDict']]
        """
        A set of firewall rules that specify what inbound network traffic is allowed.
        """
        outbounds: NotRequired[Sequence['GetFirewallsFirewallOutboundArgsDict']]
        """
        A set of firewall rules that specify what outbound network traffic is allowed.
        """
elif False:
    GetFirewallsFirewallArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetFirewallsFirewallArgs:
    def __init__(__self__, *,
                 created: str,
                 disabled: bool,
                 id: int,
                 inbound_policy: str,
                 label: str,
                 linodes: Sequence[int],
                 nodebalancers: Sequence[int],
                 outbound_policy: str,
                 status: str,
                 tags: Sequence[str],
                 updated: str,
                 devices: Optional[Sequence['GetFirewallsFirewallDeviceArgs']] = None,
                 inbounds: Optional[Sequence['GetFirewallsFirewallInboundArgs']] = None,
                 outbounds: Optional[Sequence['GetFirewallsFirewallOutboundArgs']] = None):
        """
        :param str created: When this firewall was created.
        :param bool disabled: If true, the Firewall is inactive.
        :param int id: The unique ID assigned to this Firewall.
        :param str inbound_policy: The default behavior for inbound traffic.
        :param str label: The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned.
        :param Sequence[int] linodes: The IDs of Linodes this firewall is applied to.
        :param Sequence[int] nodebalancers: The IDs of NodeBalancers assigned to this Firewall..
        :param str outbound_policy: The default behavior for outbound traffic.
        :param str status: The status of the firewall.
        :param Sequence[str] tags: An array of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        :param str updated: When this firewall was last updated.
        :param Sequence['GetFirewallsFirewallDeviceArgs'] devices: The devices associated with this firewall.
        :param Sequence['GetFirewallsFirewallInboundArgs'] inbounds: A set of firewall rules that specify what inbound network traffic is allowed.
        :param Sequence['GetFirewallsFirewallOutboundArgs'] outbounds: A set of firewall rules that specify what outbound network traffic is allowed.
        """
        pulumi.set(__self__, "created", created)
        pulumi.set(__self__, "disabled", disabled)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "inbound_policy", inbound_policy)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "linodes", linodes)
        pulumi.set(__self__, "nodebalancers", nodebalancers)
        pulumi.set(__self__, "outbound_policy", outbound_policy)
        pulumi.set(__self__, "status", status)
        pulumi.set(__self__, "tags", tags)
        pulumi.set(__self__, "updated", updated)
        if devices is not None:
            pulumi.set(__self__, "devices", devices)
        if inbounds is not None:
            pulumi.set(__self__, "inbounds", inbounds)
        if outbounds is not None:
            pulumi.set(__self__, "outbounds", outbounds)

    @property
    @pulumi.getter
    def created(self) -> str:
        """
        When this firewall was created.
        """
        return pulumi.get(self, "created")

    @created.setter
    def created(self, value: str):
        pulumi.set(self, "created", value)

    @property
    @pulumi.getter
    def disabled(self) -> bool:
        """
        If true, the Firewall is inactive.
        """
        return pulumi.get(self, "disabled")

    @disabled.setter
    def disabled(self, value: bool):
        pulumi.set(self, "disabled", value)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The unique ID assigned to this Firewall.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter(name="inboundPolicy")
    def inbound_policy(self) -> str:
        """
        The default behavior for inbound traffic.
        """
        return pulumi.get(self, "inbound_policy")

    @inbound_policy.setter
    def inbound_policy(self, value: str):
        pulumi.set(self, "inbound_policy", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def linodes(self) -> Sequence[int]:
        """
        The IDs of Linodes this firewall is applied to.
        """
        return pulumi.get(self, "linodes")

    @linodes.setter
    def linodes(self, value: Sequence[int]):
        pulumi.set(self, "linodes", value)

    @property
    @pulumi.getter
    def nodebalancers(self) -> Sequence[int]:
        """
        The IDs of NodeBalancers assigned to this Firewall..
        """
        return pulumi.get(self, "nodebalancers")

    @nodebalancers.setter
    def nodebalancers(self, value: Sequence[int]):
        pulumi.set(self, "nodebalancers", value)

    @property
    @pulumi.getter(name="outboundPolicy")
    def outbound_policy(self) -> str:
        """
        The default behavior for outbound traffic.
        """
        return pulumi.get(self, "outbound_policy")

    @outbound_policy.setter
    def outbound_policy(self, value: str):
        pulumi.set(self, "outbound_policy", value)

    @property
    @pulumi.getter
    def status(self) -> str:
        """
        The status of the firewall.
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: str):
        pulumi.set(self, "status", value)

    @property
    @pulumi.getter
    def tags(self) -> Sequence[str]:
        """
        An array of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        """
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Sequence[str]):
        pulumi.set(self, "tags", value)

    @property
    @pulumi.getter
    def updated(self) -> str:
        """
        When this firewall was last updated.
        """
        return pulumi.get(self, "updated")

    @updated.setter
    def updated(self, value: str):
        pulumi.set(self, "updated", value)

    @property
    @pulumi.getter
    def devices(self) -> Optional[Sequence['GetFirewallsFirewallDeviceArgs']]:
        """
        The devices associated with this firewall.
        """
        return pulumi.get(self, "devices")

    @devices.setter
    def devices(self, value: Optional[Sequence['GetFirewallsFirewallDeviceArgs']]):
        pulumi.set(self, "devices", value)

    @property
    @pulumi.getter
    def inbounds(self) -> Optional[Sequence['GetFirewallsFirewallInboundArgs']]:
        """
        A set of firewall rules that specify what inbound network traffic is allowed.
        """
        return pulumi.get(self, "inbounds")

    @inbounds.setter
    def inbounds(self, value: Optional[Sequence['GetFirewallsFirewallInboundArgs']]):
        pulumi.set(self, "inbounds", value)

    @property
    @pulumi.getter
    def outbounds(self) -> Optional[Sequence['GetFirewallsFirewallOutboundArgs']]:
        """
        A set of firewall rules that specify what outbound network traffic is allowed.
        """
        return pulumi.get(self, "outbounds")

    @outbounds.setter
    def outbounds(self, value: Optional[Sequence['GetFirewallsFirewallOutboundArgs']]):
        pulumi.set(self, "outbounds", value)


if not MYPY:
    class GetFirewallsFirewallDeviceArgsDict(TypedDict):
        entity_id: int
        """
        The ID of the underlying entity this device references (i.e. the Linode's ID).
        """
        id: int
        """
        The unique ID assigned to this Firewall.
        """
        label: str
        """
        The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned.
        """
        type: str
        """
        The type of Firewall Device.
        """
        url: str
        """
        The URL of the underlying entity this device references.
        """
elif False:
    GetFirewallsFirewallDeviceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetFirewallsFirewallDeviceArgs:
    def __init__(__self__, *,
                 entity_id: int,
                 id: int,
                 label: str,
                 type: str,
                 url: str):
        """
        :param int entity_id: The ID of the underlying entity this device references (i.e. the Linode's ID).
        :param int id: The unique ID assigned to this Firewall.
        :param str label: The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned.
        :param str type: The type of Firewall Device.
        :param str url: The URL of the underlying entity this device references.
        """
        pulumi.set(__self__, "entity_id", entity_id)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "url", url)

    @property
    @pulumi.getter(name="entityId")
    def entity_id(self) -> int:
        """
        The ID of the underlying entity this device references (i.e. the Linode's ID).
        """
        return pulumi.get(self, "entity_id")

    @entity_id.setter
    def entity_id(self, value: int):
        pulumi.set(self, "entity_id", value)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The unique ID assigned to this Firewall.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of Firewall Device.
        """
        return pulumi.get(self, "type")

    @type.setter
    def type(self, value: str):
        pulumi.set(self, "type", value)

    @property
    @pulumi.getter
    def url(self) -> str:
        """
        The URL of the underlying entity this device references.
        """
        return pulumi.get(self, "url")

    @url.setter
    def url(self, value: str):
        pulumi.set(self, "url", value)


if not MYPY:
    class GetFirewallsFirewallInboundArgsDict(TypedDict):
        action: str
        """
        Controls whether traffic is accepted or dropped by this rule (ACCEPT, DROP).
        """
        ipv4s: Sequence[str]
        """
        A list of IPv4 addresses or networks in IP/mask format.
        """
        ipv6s: Sequence[str]
        """
        A list of IPv6 addresses or networks in IP/mask format.
        """
        label: str
        """
        The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned.
        """
        ports: str
        """
        A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
        protocol: str
        """
        The network protocol this rule controls. (TCP, UDP, ICMP)
        """
elif False:
    GetFirewallsFirewallInboundArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetFirewallsFirewallInboundArgs:
    def __init__(__self__, *,
                 action: str,
                 ipv4s: Sequence[str],
                 ipv6s: Sequence[str],
                 label: str,
                 ports: str,
                 protocol: str):
        """
        :param str action: Controls whether traffic is accepted or dropped by this rule (ACCEPT, DROP).
        :param Sequence[str] ipv4s: A list of IPv4 addresses or networks in IP/mask format.
        :param Sequence[str] ipv6s: A list of IPv6 addresses or networks in IP/mask format.
        :param str label: The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned.
        :param str ports: A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        :param str protocol: The network protocol this rule controls. (TCP, UDP, ICMP)
        """
        pulumi.set(__self__, "action", action)
        pulumi.set(__self__, "ipv4s", ipv4s)
        pulumi.set(__self__, "ipv6s", ipv6s)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "ports", ports)
        pulumi.set(__self__, "protocol", protocol)

    @property
    @pulumi.getter
    def action(self) -> str:
        """
        Controls whether traffic is accepted or dropped by this rule (ACCEPT, DROP).
        """
        return pulumi.get(self, "action")

    @action.setter
    def action(self, value: str):
        pulumi.set(self, "action", value)

    @property
    @pulumi.getter
    def ipv4s(self) -> Sequence[str]:
        """
        A list of IPv4 addresses or networks in IP/mask format.
        """
        return pulumi.get(self, "ipv4s")

    @ipv4s.setter
    def ipv4s(self, value: Sequence[str]):
        pulumi.set(self, "ipv4s", value)

    @property
    @pulumi.getter
    def ipv6s(self) -> Sequence[str]:
        """
        A list of IPv6 addresses or networks in IP/mask format.
        """
        return pulumi.get(self, "ipv6s")

    @ipv6s.setter
    def ipv6s(self, value: Sequence[str]):
        pulumi.set(self, "ipv6s", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def ports(self) -> str:
        """
        A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
        return pulumi.get(self, "ports")

    @ports.setter
    def ports(self, value: str):
        pulumi.set(self, "ports", value)

    @property
    @pulumi.getter
    def protocol(self) -> str:
        """
        The network protocol this rule controls. (TCP, UDP, ICMP)
        """
        return pulumi.get(self, "protocol")

    @protocol.setter
    def protocol(self, value: str):
        pulumi.set(self, "protocol", value)


if not MYPY:
    class GetFirewallsFirewallOutboundArgsDict(TypedDict):
        action: str
        """
        Controls whether traffic is accepted or dropped by this rule (ACCEPT, DROP).
        """
        ipv4s: Sequence[str]
        """
        A list of IPv4 addresses or networks in IP/mask format.
        """
        ipv6s: Sequence[str]
        """
        A list of IPv6 addresses or networks in IP/mask format.
        """
        label: str
        """
        The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned.
        """
        ports: str
        """
        A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
        protocol: str
        """
        The network protocol this rule controls. (TCP, UDP, ICMP)
        """
elif False:
    GetFirewallsFirewallOutboundArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetFirewallsFirewallOutboundArgs:
    def __init__(__self__, *,
                 action: str,
                 ipv4s: Sequence[str],
                 ipv6s: Sequence[str],
                 label: str,
                 ports: str,
                 protocol: str):
        """
        :param str action: Controls whether traffic is accepted or dropped by this rule (ACCEPT, DROP).
        :param Sequence[str] ipv4s: A list of IPv4 addresses or networks in IP/mask format.
        :param Sequence[str] ipv6s: A list of IPv6 addresses or networks in IP/mask format.
        :param str label: The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned.
        :param str ports: A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        :param str protocol: The network protocol this rule controls. (TCP, UDP, ICMP)
        """
        pulumi.set(__self__, "action", action)
        pulumi.set(__self__, "ipv4s", ipv4s)
        pulumi.set(__self__, "ipv6s", ipv6s)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "ports", ports)
        pulumi.set(__self__, "protocol", protocol)

    @property
    @pulumi.getter
    def action(self) -> str:
        """
        Controls whether traffic is accepted or dropped by this rule (ACCEPT, DROP).
        """
        return pulumi.get(self, "action")

    @action.setter
    def action(self, value: str):
        pulumi.set(self, "action", value)

    @property
    @pulumi.getter
    def ipv4s(self) -> Sequence[str]:
        """
        A list of IPv4 addresses or networks in IP/mask format.
        """
        return pulumi.get(self, "ipv4s")

    @ipv4s.setter
    def ipv4s(self, value: Sequence[str]):
        pulumi.set(self, "ipv4s", value)

    @property
    @pulumi.getter
    def ipv6s(self) -> Sequence[str]:
        """
        A list of IPv6 addresses or networks in IP/mask format.
        """
        return pulumi.get(self, "ipv6s")

    @ipv6s.setter
    def ipv6s(self, value: Sequence[str]):
        pulumi.set(self, "ipv6s", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def ports(self) -> str:
        """
        A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
        return pulumi.get(self, "ports")

    @ports.setter
    def ports(self, value: str):
        pulumi.set(self, "ports", value)

    @property
    @pulumi.getter
    def protocol(self) -> str:
        """
        The network protocol this rule controls. (TCP, UDP, ICMP)
        """
        return pulumi.get(self, "protocol")

    @protocol.setter
    def protocol(self, value: str):
        pulumi.set(self, "protocol", value)


if not MYPY:
    class GetImageReplicationArgsDict(TypedDict):
        region: str
        """
        The region of an image replica.
        """
        status: str
        """
        The status of an image replica.
        """
elif False:
    GetImageReplicationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetImageReplicationArgs:
    def __init__(__self__, *,
                 region: str,
                 status: str):
        """
        :param str region: The region of an image replica.
        :param str status: The status of an image replica.
        """
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "status", status)

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The region of an image replica.
        """
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: str):
        pulumi.set(self, "region", value)

    @property
    @pulumi.getter
    def status(self) -> str:
        """
        The status of an image replica.
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: str):
        pulumi.set(self, "status", value)


if not MYPY:
    class GetImagesFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetImagesFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetImagesFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetImagesImageArgsDict(TypedDict):
        capabilities: Sequence[str]
        """
        The capabilities of this Image.
        """
        created: str
        """
        When this Image was created.
        """
        created_by: str
        """
        The name of the User who created this Image, or "linode" for official Images.
        """
        deprecated: bool
        """
        Whether or not this Image is deprecated. Will only be true for deprecated public Images.
        """
        description: str
        """
        A detailed description of this Image.
        """
        expiry: str
        """
        Only Images created automatically (from a deleted Linode; type=automatic) will expire.
        """
        id: str
        """
        The unique ID of this Image.  The ID of private images begin with `private/` followed by the numeric identifier of the private image, for example `private/12345`.
        """
        is_public: bool
        """
        True if the Image is public.
        """
        label: str
        """
        A short description of the Image.
        """
        size: int
        """
        The minimum size this Image needs to deploy. Size is in MB. example: 2500
        """
        status: str
        """
        The status of an image replica.
        """
        tags: Sequence[str]
        """
        A list of customized tags.
        """
        total_size: int
        """
        The total size of the image in all available regions.
        """
        type: str
        """
        How the Image was created. Manual Images can be created at any time. "Automatic" Images are created automatically from a deleted Linode. (`manual`, `automatic`)
        """
        vendor: str
        """
        The upstream distribution vendor. `None` for private Images.
        """
        replications: NotRequired[Sequence['GetImagesImageReplicationArgsDict']]
        """
        A list of image replication regions and corresponding status.
        """
elif False:
    GetImagesImageArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetImagesImageArgs:
    def __init__(__self__, *,
                 capabilities: Sequence[str],
                 created: str,
                 created_by: str,
                 deprecated: bool,
                 description: str,
                 expiry: str,
                 id: str,
                 is_public: bool,
                 label: str,
                 size: int,
                 status: str,
                 tags: Sequence[str],
                 total_size: int,
                 type: str,
                 vendor: str,
                 replications: Optional[Sequence['GetImagesImageReplicationArgs']] = None):
        """
        :param Sequence[str] capabilities: The capabilities of this Image.
        :param str created: When this Image was created.
        :param str created_by: The name of the User who created this Image, or "linode" for official Images.
        :param bool deprecated: Whether or not this Image is deprecated. Will only be true for deprecated public Images.
        :param str description: A detailed description of this Image.
        :param str expiry: Only Images created automatically (from a deleted Linode; type=automatic) will expire.
        :param str id: The unique ID of this Image.  The ID of private images begin with `private/` followed by the numeric identifier of the private image, for example `private/12345`.
        :param bool is_public: True if the Image is public.
        :param str label: A short description of the Image.
        :param int size: The minimum size this Image needs to deploy. Size is in MB. example: 2500
        :param str status: The status of an image replica.
        :param Sequence[str] tags: A list of customized tags.
        :param int total_size: The total size of the image in all available regions.
        :param str type: How the Image was created. Manual Images can be created at any time. "Automatic" Images are created automatically from a deleted Linode. (`manual`, `automatic`)
        :param str vendor: The upstream distribution vendor. `None` for private Images.
        :param Sequence['GetImagesImageReplicationArgs'] replications: A list of image replication regions and corresponding status.
        """
        pulumi.set(__self__, "capabilities", capabilities)
        pulumi.set(__self__, "created", created)
        pulumi.set(__self__, "created_by", created_by)
        pulumi.set(__self__, "deprecated", deprecated)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "expiry", expiry)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "is_public", is_public)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "size", size)
        pulumi.set(__self__, "status", status)
        pulumi.set(__self__, "tags", tags)
        pulumi.set(__self__, "total_size", total_size)
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "vendor", vendor)
        if replications is not None:
            pulumi.set(__self__, "replications", replications)

    @property
    @pulumi.getter
    def capabilities(self) -> Sequence[str]:
        """
        The capabilities of this Image.
        """
        return pulumi.get(self, "capabilities")

    @capabilities.setter
    def capabilities(self, value: Sequence[str]):
        pulumi.set(self, "capabilities", value)

    @property
    @pulumi.getter
    def created(self) -> str:
        """
        When this Image was created.
        """
        return pulumi.get(self, "created")

    @created.setter
    def created(self, value: str):
        pulumi.set(self, "created", value)

    @property
    @pulumi.getter(name="createdBy")
    def created_by(self) -> str:
        """
        The name of the User who created this Image, or "linode" for official Images.
        """
        return pulumi.get(self, "created_by")

    @created_by.setter
    def created_by(self, value: str):
        pulumi.set(self, "created_by", value)

    @property
    @pulumi.getter
    def deprecated(self) -> bool:
        """
        Whether or not this Image is deprecated. Will only be true for deprecated public Images.
        """
        return pulumi.get(self, "deprecated")

    @deprecated.setter
    def deprecated(self, value: bool):
        pulumi.set(self, "deprecated", value)

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        A detailed description of this Image.
        """
        return pulumi.get(self, "description")

    @description.setter
    def description(self, value: str):
        pulumi.set(self, "description", value)

    @property
    @pulumi.getter
    def expiry(self) -> str:
        """
        Only Images created automatically (from a deleted Linode; type=automatic) will expire.
        """
        return pulumi.get(self, "expiry")

    @expiry.setter
    def expiry(self, value: str):
        pulumi.set(self, "expiry", value)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The unique ID of this Image.  The ID of private images begin with `private/` followed by the numeric identifier of the private image, for example `private/12345`.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter(name="isPublic")
    def is_public(self) -> bool:
        """
        True if the Image is public.
        """
        return pulumi.get(self, "is_public")

    @is_public.setter
    def is_public(self, value: bool):
        pulumi.set(self, "is_public", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        A short description of the Image.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def size(self) -> int:
        """
        The minimum size this Image needs to deploy. Size is in MB. example: 2500
        """
        return pulumi.get(self, "size")

    @size.setter
    def size(self, value: int):
        pulumi.set(self, "size", value)

    @property
    @pulumi.getter
    def status(self) -> str:
        """
        The status of an image replica.
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: str):
        pulumi.set(self, "status", value)

    @property
    @pulumi.getter
    def tags(self) -> Sequence[str]:
        """
        A list of customized tags.
        """
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Sequence[str]):
        pulumi.set(self, "tags", value)

    @property
    @pulumi.getter(name="totalSize")
    def total_size(self) -> int:
        """
        The total size of the image in all available regions.
        """
        return pulumi.get(self, "total_size")

    @total_size.setter
    def total_size(self, value: int):
        pulumi.set(self, "total_size", value)

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        How the Image was created. Manual Images can be created at any time. "Automatic" Images are created automatically from a deleted Linode. (`manual`, `automatic`)
        """
        return pulumi.get(self, "type")

    @type.setter
    def type(self, value: str):
        pulumi.set(self, "type", value)

    @property
    @pulumi.getter
    def vendor(self) -> str:
        """
        The upstream distribution vendor. `None` for private Images.
        """
        return pulumi.get(self, "vendor")

    @vendor.setter
    def vendor(self, value: str):
        pulumi.set(self, "vendor", value)

    @property
    @pulumi.getter
    def replications(self) -> Optional[Sequence['GetImagesImageReplicationArgs']]:
        """
        A list of image replication regions and corresponding status.
        """
        return pulumi.get(self, "replications")

    @replications.setter
    def replications(self, value: Optional[Sequence['GetImagesImageReplicationArgs']]):
        pulumi.set(self, "replications", value)


if not MYPY:
    class GetImagesImageReplicationArgsDict(TypedDict):
        region: str
        """
        The region of an image replica.
        """
        status: str
        """
        The status of an image replica.
        """
elif False:
    GetImagesImageReplicationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetImagesImageReplicationArgs:
    def __init__(__self__, *,
                 region: str,
                 status: str):
        """
        :param str region: The region of an image replica.
        :param str status: The status of an image replica.
        """
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "status", status)

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The region of an image replica.
        """
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: str):
        pulumi.set(self, "region", value)

    @property
    @pulumi.getter
    def status(self) -> str:
        """
        The status of an image replica.
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: str):
        pulumi.set(self, "status", value)


if not MYPY:
    class GetInstanceTypesFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetInstanceTypesFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetInstanceTypesFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetInstanceTypesTypeArgsDict(TypedDict):
        accelerated_devices: int
        """
        The number of VPUs this Linode Type offers.
        """
        addons: Sequence['GetInstanceTypesTypeAddonArgsDict']
        """
        Information about the optional Backup service offered for Linodes.
        """
        class_: str
        """
        The class of the Linode Type. See all classes [here](https://techdocs.akamai.com/linode-api/reference/get-linode-types).
        """
        disk: int
        """
        The Disk size, in MB, of the Linode Type.
        """
        id: str
        """
        The ID representing the Linode Type.
        """
        label: str
        """
        The Linode Type's label is for display purposes only.
        """
        memory: int
        """
        The amount of RAM included in this Linode Type.
        """
        network_out: int
        """
        The Mbits outbound bandwidth allocation.
        """
        prices: Sequence['GetInstanceTypesTypePriceArgsDict']
        """
        Cost in US dollars, broken down into hourly and monthly charges.
        """
        region_prices: Sequence['GetInstanceTypesTypeRegionPriceArgsDict']
        """
        A list of region-specific prices for this plan.
        """
        transfer: int
        """
        The monthly outbound transfer amount, in MB.
        """
        vcpus: int
        """
        The number of VCPU cores this Linode Type offers.
        """
elif False:
    GetInstanceTypesTypeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetInstanceTypesTypeArgs:
    def __init__(__self__, *,
                 accelerated_devices: int,
                 addons: Sequence['GetInstanceTypesTypeAddonArgs'],
                 class_: str,
                 disk: int,
                 id: str,
                 label: str,
                 memory: int,
                 network_out: int,
                 prices: Sequence['GetInstanceTypesTypePriceArgs'],
                 region_prices: Sequence['GetInstanceTypesTypeRegionPriceArgs'],
                 transfer: int,
                 vcpus: int):
        """
        :param int accelerated_devices: The number of VPUs this Linode Type offers.
        :param Sequence['GetInstanceTypesTypeAddonArgs'] addons: Information about the optional Backup service offered for Linodes.
        :param str class_: The class of the Linode Type. See all classes [here](https://techdocs.akamai.com/linode-api/reference/get-linode-types).
        :param int disk: The Disk size, in MB, of the Linode Type.
        :param str id: The ID representing the Linode Type.
        :param str label: The Linode Type's label is for display purposes only.
        :param int memory: The amount of RAM included in this Linode Type.
        :param int network_out: The Mbits outbound bandwidth allocation.
        :param Sequence['GetInstanceTypesTypePriceArgs'] prices: Cost in US dollars, broken down into hourly and monthly charges.
        :param Sequence['GetInstanceTypesTypeRegionPriceArgs'] region_prices: A list of region-specific prices for this plan.
        :param int transfer: The monthly outbound transfer amount, in MB.
        :param int vcpus: The number of VCPU cores this Linode Type offers.
        """
        pulumi.set(__self__, "accelerated_devices", accelerated_devices)
        pulumi.set(__self__, "addons", addons)
        pulumi.set(__self__, "class_", class_)
        pulumi.set(__self__, "disk", disk)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "memory", memory)
        pulumi.set(__self__, "network_out", network_out)
        pulumi.set(__self__, "prices", prices)
        pulumi.set(__self__, "region_prices", region_prices)
        pulumi.set(__self__, "transfer", transfer)
        pulumi.set(__self__, "vcpus", vcpus)

    @property
    @pulumi.getter(name="acceleratedDevices")
    def accelerated_devices(self) -> int:
        """
        The number of VPUs this Linode Type offers.
        """
        return pulumi.get(self, "accelerated_devices")

    @accelerated_devices.setter
    def accelerated_devices(self, value: int):
        pulumi.set(self, "accelerated_devices", value)

    @property
    @pulumi.getter
    def addons(self) -> Sequence['GetInstanceTypesTypeAddonArgs']:
        """
        Information about the optional Backup service offered for Linodes.
        """
        return pulumi.get(self, "addons")

    @addons.setter
    def addons(self, value: Sequence['GetInstanceTypesTypeAddonArgs']):
        pulumi.set(self, "addons", value)

    @property
    @pulumi.getter(name="class")
    def class_(self) -> str:
        """
        The class of the Linode Type. See all classes [here](https://techdocs.akamai.com/linode-api/reference/get-linode-types).
        """
        return pulumi.get(self, "class_")

    @class_.setter
    def class_(self, value: str):
        pulumi.set(self, "class_", value)

    @property
    @pulumi.getter
    def disk(self) -> int:
        """
        The Disk size, in MB, of the Linode Type.
        """
        return pulumi.get(self, "disk")

    @disk.setter
    def disk(self, value: int):
        pulumi.set(self, "disk", value)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The ID representing the Linode Type.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The Linode Type's label is for display purposes only.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def memory(self) -> int:
        """
        The amount of RAM included in this Linode Type.
        """
        return pulumi.get(self, "memory")

    @memory.setter
    def memory(self, value: int):
        pulumi.set(self, "memory", value)

    @property
    @pulumi.getter(name="networkOut")
    def network_out(self) -> int:
        """
        The Mbits outbound bandwidth allocation.
        """
        return pulumi.get(self, "network_out")

    @network_out.setter
    def network_out(self, value: int):
        pulumi.set(self, "network_out", value)

    @property
    @pulumi.getter
    def prices(self) -> Sequence['GetInstanceTypesTypePriceArgs']:
        """
        Cost in US dollars, broken down into hourly and monthly charges.
        """
        return pulumi.get(self, "prices")

    @prices.setter
    def prices(self, value: Sequence['GetInstanceTypesTypePriceArgs']):
        pulumi.set(self, "prices", value)

    @property
    @pulumi.getter(name="regionPrices")
    def region_prices(self) -> Sequence['GetInstanceTypesTypeRegionPriceArgs']:
        """
        A list of region-specific prices for this plan.
        """
        return pulumi.get(self, "region_prices")

    @region_prices.setter
    def region_prices(self, value: Sequence['GetInstanceTypesTypeRegionPriceArgs']):
        pulumi.set(self, "region_prices", value)

    @property
    @pulumi.getter
    def transfer(self) -> int:
        """
        The monthly outbound transfer amount, in MB.
        """
        return pulumi.get(self, "transfer")

    @transfer.setter
    def transfer(self, value: int):
        pulumi.set(self, "transfer", value)

    @property
    @pulumi.getter
    def vcpus(self) -> int:
        """
        The number of VCPU cores this Linode Type offers.
        """
        return pulumi.get(self, "vcpus")

    @vcpus.setter
    def vcpus(self, value: int):
        pulumi.set(self, "vcpus", value)


if not MYPY:
    class GetInstanceTypesTypeAddonArgsDict(TypedDict):
        backups: Sequence['GetInstanceTypesTypeAddonBackupArgsDict']
elif False:
    GetInstanceTypesTypeAddonArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetInstanceTypesTypeAddonArgs:
    def __init__(__self__, *,
                 backups: Sequence['GetInstanceTypesTypeAddonBackupArgs']):
        pulumi.set(__self__, "backups", backups)

    @property
    @pulumi.getter
    def backups(self) -> Sequence['GetInstanceTypesTypeAddonBackupArgs']:
        return pulumi.get(self, "backups")

    @backups.setter
    def backups(self, value: Sequence['GetInstanceTypesTypeAddonBackupArgs']):
        pulumi.set(self, "backups", value)


if not MYPY:
    class GetInstanceTypesTypeAddonBackupArgsDict(TypedDict):
        prices: Sequence['GetInstanceTypesTypeAddonBackupPriceArgsDict']
        region_prices: Sequence['GetInstanceTypesTypeAddonBackupRegionPriceArgsDict']
elif False:
    GetInstanceTypesTypeAddonBackupArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetInstanceTypesTypeAddonBackupArgs:
    def __init__(__self__, *,
                 prices: Sequence['GetInstanceTypesTypeAddonBackupPriceArgs'],
                 region_prices: Sequence['GetInstanceTypesTypeAddonBackupRegionPriceArgs']):
        pulumi.set(__self__, "prices", prices)
        pulumi.set(__self__, "region_prices", region_prices)

    @property
    @pulumi.getter
    def prices(self) -> Sequence['GetInstanceTypesTypeAddonBackupPriceArgs']:
        return pulumi.get(self, "prices")

    @prices.setter
    def prices(self, value: Sequence['GetInstanceTypesTypeAddonBackupPriceArgs']):
        pulumi.set(self, "prices", value)

    @property
    @pulumi.getter(name="regionPrices")
    def region_prices(self) -> Sequence['GetInstanceTypesTypeAddonBackupRegionPriceArgs']:
        return pulumi.get(self, "region_prices")

    @region_prices.setter
    def region_prices(self, value: Sequence['GetInstanceTypesTypeAddonBackupRegionPriceArgs']):
        pulumi.set(self, "region_prices", value)


if not MYPY:
    class GetInstanceTypesTypeAddonBackupPriceArgsDict(TypedDict):
        hourly: float
        """
        The cost (in US dollars) per hour to add Backups service.
        """
        monthly: float
        """
        The cost (in US dollars) per month to add Backups service.
        """
elif False:
    GetInstanceTypesTypeAddonBackupPriceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetInstanceTypesTypeAddonBackupPriceArgs:
    def __init__(__self__, *,
                 hourly: float,
                 monthly: float):
        """
        :param float hourly: The cost (in US dollars) per hour to add Backups service.
        :param float monthly: The cost (in US dollars) per month to add Backups service.
        """
        pulumi.set(__self__, "hourly", hourly)
        pulumi.set(__self__, "monthly", monthly)

    @property
    @pulumi.getter
    def hourly(self) -> float:
        """
        The cost (in US dollars) per hour to add Backups service.
        """
        return pulumi.get(self, "hourly")

    @hourly.setter
    def hourly(self, value: float):
        pulumi.set(self, "hourly", value)

    @property
    @pulumi.getter
    def monthly(self) -> float:
        """
        The cost (in US dollars) per month to add Backups service.
        """
        return pulumi.get(self, "monthly")

    @monthly.setter
    def monthly(self, value: float):
        pulumi.set(self, "monthly", value)


if not MYPY:
    class GetInstanceTypesTypeAddonBackupRegionPriceArgsDict(TypedDict):
        hourly: float
        id: str
        """
        The ID representing the Linode Type.
        """
        monthly: float
elif False:
    GetInstanceTypesTypeAddonBackupRegionPriceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetInstanceTypesTypeAddonBackupRegionPriceArgs:
    def __init__(__self__, *,
                 hourly: float,
                 id: str,
                 monthly: float):
        """
        :param str id: The ID representing the Linode Type.
        """
        pulumi.set(__self__, "hourly", hourly)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "monthly", monthly)

    @property
    @pulumi.getter
    def hourly(self) -> float:
        return pulumi.get(self, "hourly")

    @hourly.setter
    def hourly(self, value: float):
        pulumi.set(self, "hourly", value)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The ID representing the Linode Type.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def monthly(self) -> float:
        return pulumi.get(self, "monthly")

    @monthly.setter
    def monthly(self, value: float):
        pulumi.set(self, "monthly", value)


if not MYPY:
    class GetInstanceTypesTypePriceArgsDict(TypedDict):
        hourly: float
        """
        Cost (in US dollars) per hour.
        """
        monthly: float
        """
        Cost (in US dollars) per month.
        """
elif False:
    GetInstanceTypesTypePriceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetInstanceTypesTypePriceArgs:
    def __init__(__self__, *,
                 hourly: float,
                 monthly: float):
        """
        :param float hourly: Cost (in US dollars) per hour.
        :param float monthly: Cost (in US dollars) per month.
        """
        pulumi.set(__self__, "hourly", hourly)
        pulumi.set(__self__, "monthly", monthly)

    @property
    @pulumi.getter
    def hourly(self) -> float:
        """
        Cost (in US dollars) per hour.
        """
        return pulumi.get(self, "hourly")

    @hourly.setter
    def hourly(self, value: float):
        pulumi.set(self, "hourly", value)

    @property
    @pulumi.getter
    def monthly(self) -> float:
        """
        Cost (in US dollars) per month.
        """
        return pulumi.get(self, "monthly")

    @monthly.setter
    def monthly(self, value: float):
        pulumi.set(self, "monthly", value)


if not MYPY:
    class GetInstanceTypesTypeRegionPriceArgsDict(TypedDict):
        hourly: float
        id: str
        """
        The ID representing the Linode Type.
        """
        monthly: float
elif False:
    GetInstanceTypesTypeRegionPriceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetInstanceTypesTypeRegionPriceArgs:
    def __init__(__self__, *,
                 hourly: float,
                 id: str,
                 monthly: float):
        """
        :param str id: The ID representing the Linode Type.
        """
        pulumi.set(__self__, "hourly", hourly)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "monthly", monthly)

    @property
    @pulumi.getter
    def hourly(self) -> float:
        return pulumi.get(self, "hourly")

    @hourly.setter
    def hourly(self, value: float):
        pulumi.set(self, "hourly", value)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The ID representing the Linode Type.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def monthly(self) -> float:
        return pulumi.get(self, "monthly")

    @monthly.setter
    def monthly(self, value: float):
        pulumi.set(self, "monthly", value)


if not MYPY:
    class GetInstancesFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetInstancesFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetInstancesFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetIpv6RangesFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetIpv6RangesFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetIpv6RangesFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetIpv6RangesRangeArgsDict(TypedDict):
        prefix: int
        """
        The prefix length of the address, denoting how many addresses can be assigned from this range.
        """
        range: str
        """
        The IPv6 address of this range.
        """
        region: str
        """
        The region for this range of IPv6 addresses.
        """
        route_target: str
        """
        The IPv6 SLAAC address.
        """
elif False:
    GetIpv6RangesRangeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetIpv6RangesRangeArgs:
    def __init__(__self__, *,
                 prefix: int,
                 range: str,
                 region: str,
                 route_target: str):
        """
        :param int prefix: The prefix length of the address, denoting how many addresses can be assigned from this range.
        :param str range: The IPv6 address of this range.
        :param str region: The region for this range of IPv6 addresses.
        :param str route_target: The IPv6 SLAAC address.
        """
        pulumi.set(__self__, "prefix", prefix)
        pulumi.set(__self__, "range", range)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "route_target", route_target)

    @property
    @pulumi.getter
    def prefix(self) -> int:
        """
        The prefix length of the address, denoting how many addresses can be assigned from this range.
        """
        return pulumi.get(self, "prefix")

    @prefix.setter
    def prefix(self, value: int):
        pulumi.set(self, "prefix", value)

    @property
    @pulumi.getter
    def range(self) -> str:
        """
        The IPv6 address of this range.
        """
        return pulumi.get(self, "range")

    @range.setter
    def range(self, value: str):
        pulumi.set(self, "range", value)

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The region for this range of IPv6 addresses.
        """
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: str):
        pulumi.set(self, "region", value)

    @property
    @pulumi.getter(name="routeTarget")
    def route_target(self) -> str:
        """
        The IPv6 SLAAC address.
        """
        return pulumi.get(self, "route_target")

    @route_target.setter
    def route_target(self, value: str):
        pulumi.set(self, "route_target", value)


if not MYPY:
    class GetKernelsFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetKernelsFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetKernelsFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetKernelsKernelArgsDict(TypedDict):
        architecture: str
        """
        The architecture of this Kernel.
        """
        built: str
        """
        The date on which this Kernel was built.
        """
        deprecated: bool
        """
        Whether or not this Kernel is deprecated.
        """
        id: str
        """
        The unique ID of this Kernel.
        """
        kvm: bool
        """
        If this Kernel is suitable for KVM Linodes.
        """
        label: str
        """
        The friendly name of this Kernel.
        """
        pvops: bool
        """
        If this Kernel is suitable for paravirtualized operations.
        """
        version: str
        """
        Linux Kernel version
        """
        xen: bool
        """
        If this Kernel is suitable for Xen Linodes.
        """
elif False:
    GetKernelsKernelArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetKernelsKernelArgs:
    def __init__(__self__, *,
                 architecture: str,
                 built: str,
                 deprecated: bool,
                 id: str,
                 kvm: bool,
                 label: str,
                 pvops: bool,
                 version: str,
                 xen: bool):
        """
        :param str architecture: The architecture of this Kernel.
        :param str built: The date on which this Kernel was built.
        :param bool deprecated: Whether or not this Kernel is deprecated.
        :param str id: The unique ID of this Kernel.
        :param bool kvm: If this Kernel is suitable for KVM Linodes.
        :param str label: The friendly name of this Kernel.
        :param bool pvops: If this Kernel is suitable for paravirtualized operations.
        :param str version: Linux Kernel version
        :param bool xen: If this Kernel is suitable for Xen Linodes.
        """
        pulumi.set(__self__, "architecture", architecture)
        pulumi.set(__self__, "built", built)
        pulumi.set(__self__, "deprecated", deprecated)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "kvm", kvm)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "pvops", pvops)
        pulumi.set(__self__, "version", version)
        pulumi.set(__self__, "xen", xen)

    @property
    @pulumi.getter
    def architecture(self) -> str:
        """
        The architecture of this Kernel.
        """
        return pulumi.get(self, "architecture")

    @architecture.setter
    def architecture(self, value: str):
        pulumi.set(self, "architecture", value)

    @property
    @pulumi.getter
    def built(self) -> str:
        """
        The date on which this Kernel was built.
        """
        return pulumi.get(self, "built")

    @built.setter
    def built(self, value: str):
        pulumi.set(self, "built", value)

    @property
    @pulumi.getter
    def deprecated(self) -> bool:
        """
        Whether or not this Kernel is deprecated.
        """
        return pulumi.get(self, "deprecated")

    @deprecated.setter
    def deprecated(self, value: bool):
        pulumi.set(self, "deprecated", value)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The unique ID of this Kernel.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def kvm(self) -> bool:
        """
        If this Kernel is suitable for KVM Linodes.
        """
        return pulumi.get(self, "kvm")

    @kvm.setter
    def kvm(self, value: bool):
        pulumi.set(self, "kvm", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The friendly name of this Kernel.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def pvops(self) -> bool:
        """
        If this Kernel is suitable for paravirtualized operations.
        """
        return pulumi.get(self, "pvops")

    @pvops.setter
    def pvops(self, value: bool):
        pulumi.set(self, "pvops", value)

    @property
    @pulumi.getter
    def version(self) -> str:
        """
        Linux Kernel version
        """
        return pulumi.get(self, "version")

    @version.setter
    def version(self, value: str):
        pulumi.set(self, "version", value)

    @property
    @pulumi.getter
    def xen(self) -> bool:
        """
        If this Kernel is suitable for Xen Linodes.
        """
        return pulumi.get(self, "xen")

    @xen.setter
    def xen(self, value: bool):
        pulumi.set(self, "xen", value)


if not MYPY:
    class GetLkeClusterControlPlaneArgsDict(TypedDict):
        high_availability: bool
        """
        Whether High Availability is enabled for the cluster Control Plane.
        """
        acls: NotRequired[Sequence['GetLkeClusterControlPlaneAclArgsDict']]
        """
        The ACL configuration for an LKE cluster's control plane. **NOTE: Control Plane ACLs may not currently be available to all users.**
        """
elif False:
    GetLkeClusterControlPlaneArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetLkeClusterControlPlaneArgs:
    def __init__(__self__, *,
                 high_availability: bool,
                 acls: Optional[Sequence['GetLkeClusterControlPlaneAclArgs']] = None):
        """
        :param bool high_availability: Whether High Availability is enabled for the cluster Control Plane.
        :param Sequence['GetLkeClusterControlPlaneAclArgs'] acls: The ACL configuration for an LKE cluster's control plane. **NOTE: Control Plane ACLs may not currently be available to all users.**
        """
        pulumi.set(__self__, "high_availability", high_availability)
        if acls is not None:
            pulumi.set(__self__, "acls", acls)

    @property
    @pulumi.getter(name="highAvailability")
    def high_availability(self) -> bool:
        """
        Whether High Availability is enabled for the cluster Control Plane.
        """
        return pulumi.get(self, "high_availability")

    @high_availability.setter
    def high_availability(self, value: bool):
        pulumi.set(self, "high_availability", value)

    @property
    @pulumi.getter
    def acls(self) -> Optional[Sequence['GetLkeClusterControlPlaneAclArgs']]:
        """
        The ACL configuration for an LKE cluster's control plane. **NOTE: Control Plane ACLs may not currently be available to all users.**
        """
        return pulumi.get(self, "acls")

    @acls.setter
    def acls(self, value: Optional[Sequence['GetLkeClusterControlPlaneAclArgs']]):
        pulumi.set(self, "acls", value)


if not MYPY:
    class GetLkeClusterControlPlaneAclArgsDict(TypedDict):
        enabled: bool
        """
        The default policy. A value of true means a default policy of DENY. A value of false means a default policy of ALLOW.
        """
        addresses: NotRequired[Sequence['GetLkeClusterControlPlaneAclAddressArgsDict']]
        """
        A list of ip addresses to allow.
        """
elif False:
    GetLkeClusterControlPlaneAclArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetLkeClusterControlPlaneAclArgs:
    def __init__(__self__, *,
                 enabled: bool,
                 addresses: Optional[Sequence['GetLkeClusterControlPlaneAclAddressArgs']] = None):
        """
        :param bool enabled: The default policy. A value of true means a default policy of DENY. A value of false means a default policy of ALLOW.
        :param Sequence['GetLkeClusterControlPlaneAclAddressArgs'] addresses: A list of ip addresses to allow.
        """
        pulumi.set(__self__, "enabled", enabled)
        if addresses is not None:
            pulumi.set(__self__, "addresses", addresses)

    @property
    @pulumi.getter
    def enabled(self) -> bool:
        """
        The default policy. A value of true means a default policy of DENY. A value of false means a default policy of ALLOW.
        """
        return pulumi.get(self, "enabled")

    @enabled.setter
    def enabled(self, value: bool):
        pulumi.set(self, "enabled", value)

    @property
    @pulumi.getter
    def addresses(self) -> Optional[Sequence['GetLkeClusterControlPlaneAclAddressArgs']]:
        """
        A list of ip addresses to allow.
        """
        return pulumi.get(self, "addresses")

    @addresses.setter
    def addresses(self, value: Optional[Sequence['GetLkeClusterControlPlaneAclAddressArgs']]):
        pulumi.set(self, "addresses", value)


if not MYPY:
    class GetLkeClusterControlPlaneAclAddressArgsDict(TypedDict):
        ipv4s: Sequence[str]
        """
        A set of individual ipv4 addresses or CIDRs to ALLOW.
        """
        ipv6s: Sequence[str]
        """
        A set of individual ipv6 addresses or CIDRs to ALLOW.
        """
elif False:
    GetLkeClusterControlPlaneAclAddressArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetLkeClusterControlPlaneAclAddressArgs:
    def __init__(__self__, *,
                 ipv4s: Sequence[str],
                 ipv6s: Sequence[str]):
        """
        :param Sequence[str] ipv4s: A set of individual ipv4 addresses or CIDRs to ALLOW.
        :param Sequence[str] ipv6s: A set of individual ipv6 addresses or CIDRs to ALLOW.
        """
        pulumi.set(__self__, "ipv4s", ipv4s)
        pulumi.set(__self__, "ipv6s", ipv6s)

    @property
    @pulumi.getter
    def ipv4s(self) -> Sequence[str]:
        """
        A set of individual ipv4 addresses or CIDRs to ALLOW.
        """
        return pulumi.get(self, "ipv4s")

    @ipv4s.setter
    def ipv4s(self, value: Sequence[str]):
        pulumi.set(self, "ipv4s", value)

    @property
    @pulumi.getter
    def ipv6s(self) -> Sequence[str]:
        """
        A set of individual ipv6 addresses or CIDRs to ALLOW.
        """
        return pulumi.get(self, "ipv6s")

    @ipv6s.setter
    def ipv6s(self, value: Sequence[str]):
        pulumi.set(self, "ipv6s", value)


if not MYPY:
    class GetLkeClusterPoolArgsDict(TypedDict):
        count: int
        """
        The number of nodes in the Node Pool.
        """
        disk_encryption: str
        """
        The disk encryption policy for nodes in this pool.
        """
        id: int
        """
        The LKE Cluster's ID.
        """
        labels: Mapping[str, str]
        """
        Key-value pairs added as labels to nodes in the node pool. Labels help classify your nodes and to easily select subsets of objects.
        """
        tags: Sequence[str]
        """
        An array of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        """
        taints: Sequence['GetLkeClusterPoolTaintArgsDict']
        """
        Kubernetes taints to add to node pool nodes. Taints help control how pods are scheduled onto nodes, specifically allowing them to repel certain pods.
        """
        type: str
        """
        The linode type for all of the nodes in the Node Pool. See all node types [here](https://api.linode.com/v4/linode/types).
        """
        autoscalers: NotRequired[Sequence['GetLkeClusterPoolAutoscalerArgsDict']]
        """
        The configuration options for the autoscaler. This field only contains an autoscaler configuration if autoscaling is enabled on this cluster.
        """
        disks: NotRequired[Sequence['GetLkeClusterPoolDiskArgsDict']]
        """
        This Node Pool’s custom disk layout.
        """
        nodes: NotRequired[Sequence['GetLkeClusterPoolNodeArgsDict']]
        """
        The nodes in the Node Pool.
        """
elif False:
    GetLkeClusterPoolArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetLkeClusterPoolArgs:
    def __init__(__self__, *,
                 count: int,
                 disk_encryption: str,
                 id: int,
                 labels: Mapping[str, str],
                 tags: Sequence[str],
                 taints: Sequence['GetLkeClusterPoolTaintArgs'],
                 type: str,
                 autoscalers: Optional[Sequence['GetLkeClusterPoolAutoscalerArgs']] = None,
                 disks: Optional[Sequence['GetLkeClusterPoolDiskArgs']] = None,
                 nodes: Optional[Sequence['GetLkeClusterPoolNodeArgs']] = None):
        """
        :param int count: The number of nodes in the Node Pool.
        :param str disk_encryption: The disk encryption policy for nodes in this pool.
        :param int id: The LKE Cluster's ID.
        :param Mapping[str, str] labels: Key-value pairs added as labels to nodes in the node pool. Labels help classify your nodes and to easily select subsets of objects.
        :param Sequence[str] tags: An array of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        :param Sequence['GetLkeClusterPoolTaintArgs'] taints: Kubernetes taints to add to node pool nodes. Taints help control how pods are scheduled onto nodes, specifically allowing them to repel certain pods.
        :param str type: The linode type for all of the nodes in the Node Pool. See all node types [here](https://api.linode.com/v4/linode/types).
        :param Sequence['GetLkeClusterPoolAutoscalerArgs'] autoscalers: The configuration options for the autoscaler. This field only contains an autoscaler configuration if autoscaling is enabled on this cluster.
        :param Sequence['GetLkeClusterPoolDiskArgs'] disks: This Node Pool’s custom disk layout.
        :param Sequence['GetLkeClusterPoolNodeArgs'] nodes: The nodes in the Node Pool.
        """
        pulumi.set(__self__, "count", count)
        pulumi.set(__self__, "disk_encryption", disk_encryption)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "labels", labels)
        pulumi.set(__self__, "tags", tags)
        pulumi.set(__self__, "taints", taints)
        pulumi.set(__self__, "type", type)
        if autoscalers is not None:
            pulumi.set(__self__, "autoscalers", autoscalers)
        if disks is not None:
            pulumi.set(__self__, "disks", disks)
        if nodes is not None:
            pulumi.set(__self__, "nodes", nodes)

    @property
    @pulumi.getter
    def count(self) -> int:
        """
        The number of nodes in the Node Pool.
        """
        return pulumi.get(self, "count")

    @count.setter
    def count(self, value: int):
        pulumi.set(self, "count", value)

    @property
    @pulumi.getter(name="diskEncryption")
    def disk_encryption(self) -> str:
        """
        The disk encryption policy for nodes in this pool.
        """
        return pulumi.get(self, "disk_encryption")

    @disk_encryption.setter
    def disk_encryption(self, value: str):
        pulumi.set(self, "disk_encryption", value)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The LKE Cluster's ID.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def labels(self) -> Mapping[str, str]:
        """
        Key-value pairs added as labels to nodes in the node pool. Labels help classify your nodes and to easily select subsets of objects.
        """
        return pulumi.get(self, "labels")

    @labels.setter
    def labels(self, value: Mapping[str, str]):
        pulumi.set(self, "labels", value)

    @property
    @pulumi.getter
    def tags(self) -> Sequence[str]:
        """
        An array of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        """
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Sequence[str]):
        pulumi.set(self, "tags", value)

    @property
    @pulumi.getter
    def taints(self) -> Sequence['GetLkeClusterPoolTaintArgs']:
        """
        Kubernetes taints to add to node pool nodes. Taints help control how pods are scheduled onto nodes, specifically allowing them to repel certain pods.
        """
        return pulumi.get(self, "taints")

    @taints.setter
    def taints(self, value: Sequence['GetLkeClusterPoolTaintArgs']):
        pulumi.set(self, "taints", value)

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The linode type for all of the nodes in the Node Pool. See all node types [here](https://api.linode.com/v4/linode/types).
        """
        return pulumi.get(self, "type")

    @type.setter
    def type(self, value: str):
        pulumi.set(self, "type", value)

    @property
    @pulumi.getter
    def autoscalers(self) -> Optional[Sequence['GetLkeClusterPoolAutoscalerArgs']]:
        """
        The configuration options for the autoscaler. This field only contains an autoscaler configuration if autoscaling is enabled on this cluster.
        """
        return pulumi.get(self, "autoscalers")

    @autoscalers.setter
    def autoscalers(self, value: Optional[Sequence['GetLkeClusterPoolAutoscalerArgs']]):
        pulumi.set(self, "autoscalers", value)

    @property
    @pulumi.getter
    def disks(self) -> Optional[Sequence['GetLkeClusterPoolDiskArgs']]:
        """
        This Node Pool’s custom disk layout.
        """
        return pulumi.get(self, "disks")

    @disks.setter
    def disks(self, value: Optional[Sequence['GetLkeClusterPoolDiskArgs']]):
        pulumi.set(self, "disks", value)

    @property
    @pulumi.getter
    def nodes(self) -> Optional[Sequence['GetLkeClusterPoolNodeArgs']]:
        """
        The nodes in the Node Pool.
        """
        return pulumi.get(self, "nodes")

    @nodes.setter
    def nodes(self, value: Optional[Sequence['GetLkeClusterPoolNodeArgs']]):
        pulumi.set(self, "nodes", value)


if not MYPY:
    class GetLkeClusterPoolAutoscalerArgsDict(TypedDict):
        enabled: bool
        """
        The default policy. A value of true means a default policy of DENY. A value of false means a default policy of ALLOW.
        """
        max: int
        """
        The maximum number of nodes to autoscale to.
        """
        min: int
        """
        The minimum number of nodes to autoscale to.
        """
elif False:
    GetLkeClusterPoolAutoscalerArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetLkeClusterPoolAutoscalerArgs:
    def __init__(__self__, *,
                 enabled: bool,
                 max: int,
                 min: int):
        """
        :param bool enabled: The default policy. A value of true means a default policy of DENY. A value of false means a default policy of ALLOW.
        :param int max: The maximum number of nodes to autoscale to.
        :param int min: The minimum number of nodes to autoscale to.
        """
        pulumi.set(__self__, "enabled", enabled)
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def enabled(self) -> bool:
        """
        The default policy. A value of true means a default policy of DENY. A value of false means a default policy of ALLOW.
        """
        return pulumi.get(self, "enabled")

    @enabled.setter
    def enabled(self, value: bool):
        pulumi.set(self, "enabled", value)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum number of nodes to autoscale to.
        """
        return pulumi.get(self, "max")

    @max.setter
    def max(self, value: int):
        pulumi.set(self, "max", value)

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum number of nodes to autoscale to.
        """
        return pulumi.get(self, "min")

    @min.setter
    def min(self, value: int):
        pulumi.set(self, "min", value)


if not MYPY:
    class GetLkeClusterPoolDiskArgsDict(TypedDict):
        size: int
        """
        The size of this custom disk partition in MB.
        """
        type: str
        """
        The linode type for all of the nodes in the Node Pool. See all node types [here](https://api.linode.com/v4/linode/types).
        """
elif False:
    GetLkeClusterPoolDiskArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetLkeClusterPoolDiskArgs:
    def __init__(__self__, *,
                 size: int,
                 type: str):
        """
        :param int size: The size of this custom disk partition in MB.
        :param str type: The linode type for all of the nodes in the Node Pool. See all node types [here](https://api.linode.com/v4/linode/types).
        """
        pulumi.set(__self__, "size", size)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def size(self) -> int:
        """
        The size of this custom disk partition in MB.
        """
        return pulumi.get(self, "size")

    @size.setter
    def size(self, value: int):
        pulumi.set(self, "size", value)

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The linode type for all of the nodes in the Node Pool. See all node types [here](https://api.linode.com/v4/linode/types).
        """
        return pulumi.get(self, "type")

    @type.setter
    def type(self, value: str):
        pulumi.set(self, "type", value)


if not MYPY:
    class GetLkeClusterPoolNodeArgsDict(TypedDict):
        id: str
        """
        The LKE Cluster's ID.
        """
        instance_id: int
        """
        The ID of the underlying Linode instance.
        """
        status: str
        """
        The status of the node. (`ready`, `not_ready`)
        """
elif False:
    GetLkeClusterPoolNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetLkeClusterPoolNodeArgs:
    def __init__(__self__, *,
                 id: str,
                 instance_id: int,
                 status: str):
        """
        :param str id: The LKE Cluster's ID.
        :param int instance_id: The ID of the underlying Linode instance.
        :param str status: The status of the node. (`ready`, `not_ready`)
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_id", instance_id)
        pulumi.set(__self__, "status", status)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The LKE Cluster's ID.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> int:
        """
        The ID of the underlying Linode instance.
        """
        return pulumi.get(self, "instance_id")

    @instance_id.setter
    def instance_id(self, value: int):
        pulumi.set(self, "instance_id", value)

    @property
    @pulumi.getter
    def status(self) -> str:
        """
        The status of the node. (`ready`, `not_ready`)
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: str):
        pulumi.set(self, "status", value)


if not MYPY:
    class GetLkeClusterPoolTaintArgsDict(TypedDict):
        effect: str
        """
        The Kubernetes taint effect. The accepted values are `NoSchedule`, `PreferNoSchedule` and `NoExecute`. For the descriptions of these values, see [Kubernetes Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/).
        """
        key: str
        """
        The Kubernetes taint key.
        """
        value: str
        """
        The Kubernetes taint value.
        """
elif False:
    GetLkeClusterPoolTaintArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetLkeClusterPoolTaintArgs:
    def __init__(__self__, *,
                 effect: str,
                 key: str,
                 value: str):
        """
        :param str effect: The Kubernetes taint effect. The accepted values are `NoSchedule`, `PreferNoSchedule` and `NoExecute`. For the descriptions of these values, see [Kubernetes Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/).
        :param str key: The Kubernetes taint key.
        :param str value: The Kubernetes taint value.
        """
        pulumi.set(__self__, "effect", effect)
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def effect(self) -> str:
        """
        The Kubernetes taint effect. The accepted values are `NoSchedule`, `PreferNoSchedule` and `NoExecute`. For the descriptions of these values, see [Kubernetes Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/).
        """
        return pulumi.get(self, "effect")

    @effect.setter
    def effect(self, value: str):
        pulumi.set(self, "effect", value)

    @property
    @pulumi.getter
    def key(self) -> str:
        """
        The Kubernetes taint key.
        """
        return pulumi.get(self, "key")

    @key.setter
    def key(self, value: str):
        pulumi.set(self, "key", value)

    @property
    @pulumi.getter
    def value(self) -> str:
        """
        The Kubernetes taint value.
        """
        return pulumi.get(self, "value")

    @value.setter
    def value(self, value: str):
        pulumi.set(self, "value", value)


if not MYPY:
    class GetLkeClustersFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetLkeClustersFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetLkeClustersFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetLkeClustersLkeClusterArgsDict(TypedDict):
        created: str
        """
        When this Kubernetes cluster was created.
        """
        id: int
        """
        The LKE Cluster's ID.
        """
        k8s_version: str
        """
        The Kubernetes version for this Kubernetes cluster in the format of `major.minor` (e.g. `1.17`).
        """
        label: str
        """
        The unique label for the cluster.
        """
        region: str
        """
        This Kubernetes cluster's location.
        """
        status: str
        """
        The status of the cluster.
        """
        tags: Sequence[str]
        """
        An array of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        """
        updated: str
        """
        When this Kubernetes cluster was updated.
        """
        control_plane: NotRequired['GetLkeClustersLkeClusterControlPlaneArgsDict']
        """
        Defines settings for the Kubernetes Control Plane.
        """
elif False:
    GetLkeClustersLkeClusterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetLkeClustersLkeClusterArgs:
    def __init__(__self__, *,
                 created: str,
                 id: int,
                 k8s_version: str,
                 label: str,
                 region: str,
                 status: str,
                 tags: Sequence[str],
                 updated: str,
                 control_plane: Optional['GetLkeClustersLkeClusterControlPlaneArgs'] = None):
        """
        :param str created: When this Kubernetes cluster was created.
        :param int id: The LKE Cluster's ID.
        :param str k8s_version: The Kubernetes version for this Kubernetes cluster in the format of `major.minor` (e.g. `1.17`).
        :param str label: The unique label for the cluster.
        :param str region: This Kubernetes cluster's location.
        :param str status: The status of the cluster.
        :param Sequence[str] tags: An array of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        :param str updated: When this Kubernetes cluster was updated.
        :param 'GetLkeClustersLkeClusterControlPlaneArgs' control_plane: Defines settings for the Kubernetes Control Plane.
        """
        pulumi.set(__self__, "created", created)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "k8s_version", k8s_version)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "status", status)
        pulumi.set(__self__, "tags", tags)
        pulumi.set(__self__, "updated", updated)
        if control_plane is not None:
            pulumi.set(__self__, "control_plane", control_plane)

    @property
    @pulumi.getter
    def created(self) -> str:
        """
        When this Kubernetes cluster was created.
        """
        return pulumi.get(self, "created")

    @created.setter
    def created(self, value: str):
        pulumi.set(self, "created", value)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The LKE Cluster's ID.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter(name="k8sVersion")
    def k8s_version(self) -> str:
        """
        The Kubernetes version for this Kubernetes cluster in the format of `major.minor` (e.g. `1.17`).
        """
        return pulumi.get(self, "k8s_version")

    @k8s_version.setter
    def k8s_version(self, value: str):
        pulumi.set(self, "k8s_version", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The unique label for the cluster.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        This Kubernetes cluster's location.
        """
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: str):
        pulumi.set(self, "region", value)

    @property
    @pulumi.getter
    def status(self) -> str:
        """
        The status of the cluster.
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: str):
        pulumi.set(self, "status", value)

    @property
    @pulumi.getter
    def tags(self) -> Sequence[str]:
        """
        An array of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        """
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Sequence[str]):
        pulumi.set(self, "tags", value)

    @property
    @pulumi.getter
    def updated(self) -> str:
        """
        When this Kubernetes cluster was updated.
        """
        return pulumi.get(self, "updated")

    @updated.setter
    def updated(self, value: str):
        pulumi.set(self, "updated", value)

    @property
    @pulumi.getter(name="controlPlane")
    def control_plane(self) -> Optional['GetLkeClustersLkeClusterControlPlaneArgs']:
        """
        Defines settings for the Kubernetes Control Plane.
        """
        return pulumi.get(self, "control_plane")

    @control_plane.setter
    def control_plane(self, value: Optional['GetLkeClustersLkeClusterControlPlaneArgs']):
        pulumi.set(self, "control_plane", value)


if not MYPY:
    class GetLkeClustersLkeClusterControlPlaneArgsDict(TypedDict):
        high_availability: bool
        """
        Whether High Availability is enabled for the cluster Control Plane.
        """
elif False:
    GetLkeClustersLkeClusterControlPlaneArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetLkeClustersLkeClusterControlPlaneArgs:
    def __init__(__self__, *,
                 high_availability: bool):
        """
        :param bool high_availability: Whether High Availability is enabled for the cluster Control Plane.
        """
        pulumi.set(__self__, "high_availability", high_availability)

    @property
    @pulumi.getter(name="highAvailability")
    def high_availability(self) -> bool:
        """
        Whether High Availability is enabled for the cluster Control Plane.
        """
        return pulumi.get(self, "high_availability")

    @high_availability.setter
    def high_availability(self, value: bool):
        pulumi.set(self, "high_availability", value)


if not MYPY:
    class GetLkeTypesFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetLkeTypesFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetLkeTypesFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetLkeTypesTypeArgsDict(TypedDict):
        id: str
        """
        The ID representing the Kubernetes type.
        """
        label: str
        """
        The Kubernetes type label is for display purposes only.
        """
        prices: Sequence['GetLkeTypesTypePriceArgsDict']
        """
        Cost in US dollars, broken down into hourly and monthly charges.
        """
        region_prices: Sequence['GetLkeTypesTypeRegionPriceArgsDict']
        """
        A list of region-specific prices for this LKE Type.
        """
        transfer: int
        """
        The monthly outbound transfer amount, in MB.
        """
elif False:
    GetLkeTypesTypeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetLkeTypesTypeArgs:
    def __init__(__self__, *,
                 id: str,
                 label: str,
                 prices: Sequence['GetLkeTypesTypePriceArgs'],
                 region_prices: Sequence['GetLkeTypesTypeRegionPriceArgs'],
                 transfer: int):
        """
        :param str id: The ID representing the Kubernetes type.
        :param str label: The Kubernetes type label is for display purposes only.
        :param Sequence['GetLkeTypesTypePriceArgs'] prices: Cost in US dollars, broken down into hourly and monthly charges.
        :param Sequence['GetLkeTypesTypeRegionPriceArgs'] region_prices: A list of region-specific prices for this LKE Type.
        :param int transfer: The monthly outbound transfer amount, in MB.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "prices", prices)
        pulumi.set(__self__, "region_prices", region_prices)
        pulumi.set(__self__, "transfer", transfer)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The ID representing the Kubernetes type.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The Kubernetes type label is for display purposes only.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def prices(self) -> Sequence['GetLkeTypesTypePriceArgs']:
        """
        Cost in US dollars, broken down into hourly and monthly charges.
        """
        return pulumi.get(self, "prices")

    @prices.setter
    def prices(self, value: Sequence['GetLkeTypesTypePriceArgs']):
        pulumi.set(self, "prices", value)

    @property
    @pulumi.getter(name="regionPrices")
    def region_prices(self) -> Sequence['GetLkeTypesTypeRegionPriceArgs']:
        """
        A list of region-specific prices for this LKE Type.
        """
        return pulumi.get(self, "region_prices")

    @region_prices.setter
    def region_prices(self, value: Sequence['GetLkeTypesTypeRegionPriceArgs']):
        pulumi.set(self, "region_prices", value)

    @property
    @pulumi.getter
    def transfer(self) -> int:
        """
        The monthly outbound transfer amount, in MB.
        """
        return pulumi.get(self, "transfer")

    @transfer.setter
    def transfer(self, value: int):
        pulumi.set(self, "transfer", value)


if not MYPY:
    class GetLkeTypesTypePriceArgsDict(TypedDict):
        hourly: float
        """
        Cost (in US dollars) per hour.
        """
        monthly: float
        """
        Cost (in US dollars) per month.
        """
elif False:
    GetLkeTypesTypePriceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetLkeTypesTypePriceArgs:
    def __init__(__self__, *,
                 hourly: float,
                 monthly: float):
        """
        :param float hourly: Cost (in US dollars) per hour.
        :param float monthly: Cost (in US dollars) per month.
        """
        pulumi.set(__self__, "hourly", hourly)
        pulumi.set(__self__, "monthly", monthly)

    @property
    @pulumi.getter
    def hourly(self) -> float:
        """
        Cost (in US dollars) per hour.
        """
        return pulumi.get(self, "hourly")

    @hourly.setter
    def hourly(self, value: float):
        pulumi.set(self, "hourly", value)

    @property
    @pulumi.getter
    def monthly(self) -> float:
        """
        Cost (in US dollars) per month.
        """
        return pulumi.get(self, "monthly")

    @monthly.setter
    def monthly(self, value: float):
        pulumi.set(self, "monthly", value)


if not MYPY:
    class GetLkeTypesTypeRegionPriceArgsDict(TypedDict):
        hourly: float
        id: str
        """
        The ID representing the Kubernetes type.
        """
        monthly: float
elif False:
    GetLkeTypesTypeRegionPriceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetLkeTypesTypeRegionPriceArgs:
    def __init__(__self__, *,
                 hourly: float,
                 id: str,
                 monthly: float):
        """
        :param str id: The ID representing the Kubernetes type.
        """
        pulumi.set(__self__, "hourly", hourly)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "monthly", monthly)

    @property
    @pulumi.getter
    def hourly(self) -> float:
        return pulumi.get(self, "hourly")

    @hourly.setter
    def hourly(self, value: float):
        pulumi.set(self, "hourly", value)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The ID representing the Kubernetes type.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def monthly(self) -> float:
        return pulumi.get(self, "monthly")

    @monthly.setter
    def monthly(self, value: float):
        pulumi.set(self, "monthly", value)


if not MYPY:
    class GetNbTypesFilterArgsDict(TypedDict):
        name: str
        """
        The name of the attribute to filter on.
        """
        values: Sequence[str]
        """
        The value(s) to be used in the filter.
        """
        match_by: NotRequired[str]
        """
        The type of comparison to use for this filter.
        """
elif False:
    GetNbTypesFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNbTypesFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the attribute to filter on.
        :param Sequence[str] values: The value(s) to be used in the filter.
        :param str match_by: The type of comparison to use for this filter.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the attribute to filter on.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        The value(s) to be used in the filter.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The type of comparison to use for this filter.
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetNbTypesTypeArgsDict(TypedDict):
        id: str
        """
        The unique ID assigned to this Node Balancer Type.
        """
        label: str
        """
        The Node Balancer Type's label.
        """
        prices: Sequence['GetNbTypesTypePriceArgsDict']
        """
        Cost in US dollars, broken down into hourly and monthly charges.
        """
        region_prices: Sequence['GetNbTypesTypeRegionPriceArgsDict']
        """
        A list of region-specific prices for this Node Balancer Type.
        """
        transfer: int
        """
        The monthly outbound transfer amount, in MB.
        """
elif False:
    GetNbTypesTypeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNbTypesTypeArgs:
    def __init__(__self__, *,
                 id: str,
                 label: str,
                 prices: Sequence['GetNbTypesTypePriceArgs'],
                 region_prices: Sequence['GetNbTypesTypeRegionPriceArgs'],
                 transfer: int):
        """
        :param str id: The unique ID assigned to this Node Balancer Type.
        :param str label: The Node Balancer Type's label.
        :param Sequence['GetNbTypesTypePriceArgs'] prices: Cost in US dollars, broken down into hourly and monthly charges.
        :param Sequence['GetNbTypesTypeRegionPriceArgs'] region_prices: A list of region-specific prices for this Node Balancer Type.
        :param int transfer: The monthly outbound transfer amount, in MB.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "prices", prices)
        pulumi.set(__self__, "region_prices", region_prices)
        pulumi.set(__self__, "transfer", transfer)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The unique ID assigned to this Node Balancer Type.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The Node Balancer Type's label.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def prices(self) -> Sequence['GetNbTypesTypePriceArgs']:
        """
        Cost in US dollars, broken down into hourly and monthly charges.
        """
        return pulumi.get(self, "prices")

    @prices.setter
    def prices(self, value: Sequence['GetNbTypesTypePriceArgs']):
        pulumi.set(self, "prices", value)

    @property
    @pulumi.getter(name="regionPrices")
    def region_prices(self) -> Sequence['GetNbTypesTypeRegionPriceArgs']:
        """
        A list of region-specific prices for this Node Balancer Type.
        """
        return pulumi.get(self, "region_prices")

    @region_prices.setter
    def region_prices(self, value: Sequence['GetNbTypesTypeRegionPriceArgs']):
        pulumi.set(self, "region_prices", value)

    @property
    @pulumi.getter
    def transfer(self) -> int:
        """
        The monthly outbound transfer amount, in MB.
        """
        return pulumi.get(self, "transfer")

    @transfer.setter
    def transfer(self, value: int):
        pulumi.set(self, "transfer", value)


if not MYPY:
    class GetNbTypesTypePriceArgsDict(TypedDict):
        hourly: float
        monthly: float
elif False:
    GetNbTypesTypePriceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNbTypesTypePriceArgs:
    def __init__(__self__, *,
                 hourly: float,
                 monthly: float):
        pulumi.set(__self__, "hourly", hourly)
        pulumi.set(__self__, "monthly", monthly)

    @property
    @pulumi.getter
    def hourly(self) -> float:
        return pulumi.get(self, "hourly")

    @hourly.setter
    def hourly(self, value: float):
        pulumi.set(self, "hourly", value)

    @property
    @pulumi.getter
    def monthly(self) -> float:
        return pulumi.get(self, "monthly")

    @monthly.setter
    def monthly(self, value: float):
        pulumi.set(self, "monthly", value)


if not MYPY:
    class GetNbTypesTypeRegionPriceArgsDict(TypedDict):
        hourly: float
        id: str
        monthly: float
elif False:
    GetNbTypesTypeRegionPriceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNbTypesTypeRegionPriceArgs:
    def __init__(__self__, *,
                 hourly: float,
                 id: str,
                 monthly: float):
        pulumi.set(__self__, "hourly", hourly)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "monthly", monthly)

    @property
    @pulumi.getter
    def hourly(self) -> float:
        return pulumi.get(self, "hourly")

    @hourly.setter
    def hourly(self, value: float):
        pulumi.set(self, "hourly", value)

    @property
    @pulumi.getter
    def id(self) -> str:
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def monthly(self) -> float:
        return pulumi.get(self, "monthly")

    @monthly.setter
    def monthly(self, value: float):
        pulumi.set(self, "monthly", value)


if not MYPY:
    class GetNetworkTransferPricesFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetNetworkTransferPricesFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNetworkTransferPricesFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetNetworkTransferPricesTypeArgsDict(TypedDict):
        id: str
        """
        The ID representing the Network Transfer Price.
        """
        label: str
        """
        The Network Transfer Price label is for display purposes only.
        """
        prices: Sequence['GetNetworkTransferPricesTypePriceArgsDict']
        """
        Cost in US dollars, broken down into hourly and monthly charges.
        """
        region_prices: Sequence['GetNetworkTransferPricesTypeRegionPriceArgsDict']
        """
        A list of region-specific prices for this Network Transfer Price.
        """
        transfer: int
        """
        The monthly outbound transfer amount, in MB.
        """
elif False:
    GetNetworkTransferPricesTypeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNetworkTransferPricesTypeArgs:
    def __init__(__self__, *,
                 id: str,
                 label: str,
                 prices: Sequence['GetNetworkTransferPricesTypePriceArgs'],
                 region_prices: Sequence['GetNetworkTransferPricesTypeRegionPriceArgs'],
                 transfer: int):
        """
        :param str id: The ID representing the Network Transfer Price.
        :param str label: The Network Transfer Price label is for display purposes only.
        :param Sequence['GetNetworkTransferPricesTypePriceArgs'] prices: Cost in US dollars, broken down into hourly and monthly charges.
        :param Sequence['GetNetworkTransferPricesTypeRegionPriceArgs'] region_prices: A list of region-specific prices for this Network Transfer Price.
        :param int transfer: The monthly outbound transfer amount, in MB.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "prices", prices)
        pulumi.set(__self__, "region_prices", region_prices)
        pulumi.set(__self__, "transfer", transfer)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The ID representing the Network Transfer Price.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The Network Transfer Price label is for display purposes only.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def prices(self) -> Sequence['GetNetworkTransferPricesTypePriceArgs']:
        """
        Cost in US dollars, broken down into hourly and monthly charges.
        """
        return pulumi.get(self, "prices")

    @prices.setter
    def prices(self, value: Sequence['GetNetworkTransferPricesTypePriceArgs']):
        pulumi.set(self, "prices", value)

    @property
    @pulumi.getter(name="regionPrices")
    def region_prices(self) -> Sequence['GetNetworkTransferPricesTypeRegionPriceArgs']:
        """
        A list of region-specific prices for this Network Transfer Price.
        """
        return pulumi.get(self, "region_prices")

    @region_prices.setter
    def region_prices(self, value: Sequence['GetNetworkTransferPricesTypeRegionPriceArgs']):
        pulumi.set(self, "region_prices", value)

    @property
    @pulumi.getter
    def transfer(self) -> int:
        """
        The monthly outbound transfer amount, in MB.
        """
        return pulumi.get(self, "transfer")

    @transfer.setter
    def transfer(self, value: int):
        pulumi.set(self, "transfer", value)


if not MYPY:
    class GetNetworkTransferPricesTypePriceArgsDict(TypedDict):
        hourly: float
        """
        Cost (in US dollars) per hour.
        """
        monthly: float
        """
        Cost (in US dollars) per month.
        """
elif False:
    GetNetworkTransferPricesTypePriceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNetworkTransferPricesTypePriceArgs:
    def __init__(__self__, *,
                 hourly: float,
                 monthly: float):
        """
        :param float hourly: Cost (in US dollars) per hour.
        :param float monthly: Cost (in US dollars) per month.
        """
        pulumi.set(__self__, "hourly", hourly)
        pulumi.set(__self__, "monthly", monthly)

    @property
    @pulumi.getter
    def hourly(self) -> float:
        """
        Cost (in US dollars) per hour.
        """
        return pulumi.get(self, "hourly")

    @hourly.setter
    def hourly(self, value: float):
        pulumi.set(self, "hourly", value)

    @property
    @pulumi.getter
    def monthly(self) -> float:
        """
        Cost (in US dollars) per month.
        """
        return pulumi.get(self, "monthly")

    @monthly.setter
    def monthly(self, value: float):
        pulumi.set(self, "monthly", value)


if not MYPY:
    class GetNetworkTransferPricesTypeRegionPriceArgsDict(TypedDict):
        hourly: float
        id: str
        """
        The ID representing the Network Transfer Price.
        """
        monthly: float
elif False:
    GetNetworkTransferPricesTypeRegionPriceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNetworkTransferPricesTypeRegionPriceArgs:
    def __init__(__self__, *,
                 hourly: float,
                 id: str,
                 monthly: float):
        """
        :param str id: The ID representing the Network Transfer Price.
        """
        pulumi.set(__self__, "hourly", hourly)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "monthly", monthly)

    @property
    @pulumi.getter
    def hourly(self) -> float:
        return pulumi.get(self, "hourly")

    @hourly.setter
    def hourly(self, value: float):
        pulumi.set(self, "hourly", value)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The ID representing the Network Transfer Price.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def monthly(self) -> float:
        return pulumi.get(self, "monthly")

    @monthly.setter
    def monthly(self, value: float):
        pulumi.set(self, "monthly", value)


if not MYPY:
    class GetNetworkingIpsFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetNetworkingIpsFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNetworkingIpsFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetNetworkingIpsIpAddressArgsDict(TypedDict):
        address: str
        """
        The IP address.
        """
        gateway: str
        """
        The default gateway for this address.
        """
        linode_id: int
        """
        The ID of the Linode this address currently belongs to.
        """
        prefix: int
        """
        The number of bits set in the subnet mask.
        """
        public: bool
        """
        Whether this is a public or private IP address.
        """
        rdns: str
        """
        The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.
        """
        region: str
        """
        The Region this IP address resides in. See all regions [here](https://api.linode.com/v4/regions).
        """
        reserved: bool
        """
        Whether this IP address is a reserved IP.
        """
        subnet_mask: str
        """
        The mask that separates host bits from network bits for this address.
        """
        type: str
        """
        The type of address this is (ipv4, ipv6, ipv6/pool, ipv6/range).
        """
elif False:
    GetNetworkingIpsIpAddressArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNetworkingIpsIpAddressArgs:
    def __init__(__self__, *,
                 address: str,
                 gateway: str,
                 linode_id: int,
                 prefix: int,
                 public: bool,
                 rdns: str,
                 region: str,
                 reserved: bool,
                 subnet_mask: str,
                 type: str):
        """
        :param str address: The IP address.
        :param str gateway: The default gateway for this address.
        :param int linode_id: The ID of the Linode this address currently belongs to.
        :param int prefix: The number of bits set in the subnet mask.
        :param bool public: Whether this is a public or private IP address.
        :param str rdns: The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.
        :param str region: The Region this IP address resides in. See all regions [here](https://api.linode.com/v4/regions).
        :param bool reserved: Whether this IP address is a reserved IP.
        :param str subnet_mask: The mask that separates host bits from network bits for this address.
        :param str type: The type of address this is (ipv4, ipv6, ipv6/pool, ipv6/range).
        """
        pulumi.set(__self__, "address", address)
        pulumi.set(__self__, "gateway", gateway)
        pulumi.set(__self__, "linode_id", linode_id)
        pulumi.set(__self__, "prefix", prefix)
        pulumi.set(__self__, "public", public)
        pulumi.set(__self__, "rdns", rdns)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "reserved", reserved)
        pulumi.set(__self__, "subnet_mask", subnet_mask)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def address(self) -> str:
        """
        The IP address.
        """
        return pulumi.get(self, "address")

    @address.setter
    def address(self, value: str):
        pulumi.set(self, "address", value)

    @property
    @pulumi.getter
    def gateway(self) -> str:
        """
        The default gateway for this address.
        """
        return pulumi.get(self, "gateway")

    @gateway.setter
    def gateway(self, value: str):
        pulumi.set(self, "gateway", value)

    @property
    @pulumi.getter(name="linodeId")
    def linode_id(self) -> int:
        """
        The ID of the Linode this address currently belongs to.
        """
        return pulumi.get(self, "linode_id")

    @linode_id.setter
    def linode_id(self, value: int):
        pulumi.set(self, "linode_id", value)

    @property
    @pulumi.getter
    def prefix(self) -> int:
        """
        The number of bits set in the subnet mask.
        """
        return pulumi.get(self, "prefix")

    @prefix.setter
    def prefix(self, value: int):
        pulumi.set(self, "prefix", value)

    @property
    @pulumi.getter
    def public(self) -> bool:
        """
        Whether this is a public or private IP address.
        """
        return pulumi.get(self, "public")

    @public.setter
    def public(self, value: bool):
        pulumi.set(self, "public", value)

    @property
    @pulumi.getter
    def rdns(self) -> str:
        """
        The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.
        """
        return pulumi.get(self, "rdns")

    @rdns.setter
    def rdns(self, value: str):
        pulumi.set(self, "rdns", value)

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The Region this IP address resides in. See all regions [here](https://api.linode.com/v4/regions).
        """
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: str):
        pulumi.set(self, "region", value)

    @property
    @pulumi.getter
    def reserved(self) -> bool:
        """
        Whether this IP address is a reserved IP.
        """
        return pulumi.get(self, "reserved")

    @reserved.setter
    def reserved(self, value: bool):
        pulumi.set(self, "reserved", value)

    @property
    @pulumi.getter(name="subnetMask")
    def subnet_mask(self) -> str:
        """
        The mask that separates host bits from network bits for this address.
        """
        return pulumi.get(self, "subnet_mask")

    @subnet_mask.setter
    def subnet_mask(self, value: str):
        pulumi.set(self, "subnet_mask", value)

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of address this is (ipv4, ipv6, ipv6/pool, ipv6/range).
        """
        return pulumi.get(self, "type")

    @type.setter
    def type(self, value: str):
        pulumi.set(self, "type", value)


if not MYPY:
    class GetNodeBalancerFirewallArgsDict(TypedDict):
        created: str
        """
        When this firewall was created.
        """
        id: int
        """
        The NodeBalancer's ID.
        """
        inbound_policy: str
        """
        The default behavior for inbound traffic. (`ACCEPT`, `DROP`)
        """
        label: str
        """
        Used to identify this rule. For display purposes only.
        """
        outbound_policy: str
        """
        The default behavior for outbound traffic. (`ACCEPT`, `DROP`)
        """
        status: str
        """
        The status of the firewall. (`enabled`, `disabled`, `deleted`)
        """
        tags: Sequence[str]
        """
        The tags applied to the firewall. Tags are case-insensitive and are for organizational purposes only.
        """
        updated: str
        """
        When this firewall was last updated.
        """
        inbounds: NotRequired[Sequence['GetNodeBalancerFirewallInboundArgsDict']]
        """
        A set of firewall rules that specify what inbound network traffic is allowed.
        """
        outbounds: NotRequired[Sequence['GetNodeBalancerFirewallOutboundArgsDict']]
        """
        A set of firewall rules that specify what outbound network traffic is allowed.
        """
elif False:
    GetNodeBalancerFirewallArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNodeBalancerFirewallArgs:
    def __init__(__self__, *,
                 created: str,
                 id: int,
                 inbound_policy: str,
                 label: str,
                 outbound_policy: str,
                 status: str,
                 tags: Sequence[str],
                 updated: str,
                 inbounds: Optional[Sequence['GetNodeBalancerFirewallInboundArgs']] = None,
                 outbounds: Optional[Sequence['GetNodeBalancerFirewallOutboundArgs']] = None):
        """
        :param str created: When this firewall was created.
        :param int id: The NodeBalancer's ID.
        :param str inbound_policy: The default behavior for inbound traffic. (`ACCEPT`, `DROP`)
        :param str label: Used to identify this rule. For display purposes only.
        :param str outbound_policy: The default behavior for outbound traffic. (`ACCEPT`, `DROP`)
        :param str status: The status of the firewall. (`enabled`, `disabled`, `deleted`)
        :param Sequence[str] tags: The tags applied to the firewall. Tags are case-insensitive and are for organizational purposes only.
        :param str updated: When this firewall was last updated.
        :param Sequence['GetNodeBalancerFirewallInboundArgs'] inbounds: A set of firewall rules that specify what inbound network traffic is allowed.
        :param Sequence['GetNodeBalancerFirewallOutboundArgs'] outbounds: A set of firewall rules that specify what outbound network traffic is allowed.
        """
        pulumi.set(__self__, "created", created)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "inbound_policy", inbound_policy)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "outbound_policy", outbound_policy)
        pulumi.set(__self__, "status", status)
        pulumi.set(__self__, "tags", tags)
        pulumi.set(__self__, "updated", updated)
        if inbounds is not None:
            pulumi.set(__self__, "inbounds", inbounds)
        if outbounds is not None:
            pulumi.set(__self__, "outbounds", outbounds)

    @property
    @pulumi.getter
    def created(self) -> str:
        """
        When this firewall was created.
        """
        return pulumi.get(self, "created")

    @created.setter
    def created(self, value: str):
        pulumi.set(self, "created", value)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The NodeBalancer's ID.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter(name="inboundPolicy")
    def inbound_policy(self) -> str:
        """
        The default behavior for inbound traffic. (`ACCEPT`, `DROP`)
        """
        return pulumi.get(self, "inbound_policy")

    @inbound_policy.setter
    def inbound_policy(self, value: str):
        pulumi.set(self, "inbound_policy", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        Used to identify this rule. For display purposes only.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter(name="outboundPolicy")
    def outbound_policy(self) -> str:
        """
        The default behavior for outbound traffic. (`ACCEPT`, `DROP`)
        """
        return pulumi.get(self, "outbound_policy")

    @outbound_policy.setter
    def outbound_policy(self, value: str):
        pulumi.set(self, "outbound_policy", value)

    @property
    @pulumi.getter
    def status(self) -> str:
        """
        The status of the firewall. (`enabled`, `disabled`, `deleted`)
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: str):
        pulumi.set(self, "status", value)

    @property
    @pulumi.getter
    def tags(self) -> Sequence[str]:
        """
        The tags applied to the firewall. Tags are case-insensitive and are for organizational purposes only.
        """
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Sequence[str]):
        pulumi.set(self, "tags", value)

    @property
    @pulumi.getter
    def updated(self) -> str:
        """
        When this firewall was last updated.
        """
        return pulumi.get(self, "updated")

    @updated.setter
    def updated(self, value: str):
        pulumi.set(self, "updated", value)

    @property
    @pulumi.getter
    def inbounds(self) -> Optional[Sequence['GetNodeBalancerFirewallInboundArgs']]:
        """
        A set of firewall rules that specify what inbound network traffic is allowed.
        """
        return pulumi.get(self, "inbounds")

    @inbounds.setter
    def inbounds(self, value: Optional[Sequence['GetNodeBalancerFirewallInboundArgs']]):
        pulumi.set(self, "inbounds", value)

    @property
    @pulumi.getter
    def outbounds(self) -> Optional[Sequence['GetNodeBalancerFirewallOutboundArgs']]:
        """
        A set of firewall rules that specify what outbound network traffic is allowed.
        """
        return pulumi.get(self, "outbounds")

    @outbounds.setter
    def outbounds(self, value: Optional[Sequence['GetNodeBalancerFirewallOutboundArgs']]):
        pulumi.set(self, "outbounds", value)


if not MYPY:
    class GetNodeBalancerFirewallInboundArgsDict(TypedDict):
        action: str
        """
        Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        """
        ipv4s: Sequence[str]
        """
        A list of IPv4 addresses or networks. Must be in IP/mask format.
        """
        ipv6s: Sequence[str]
        """
        A list of IPv6 addresses or networks. Must be in IP/mask format.
        """
        label: str
        """
        Used to identify this rule. For display purposes only.
        """
        ports: str
        """
        A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
        protocol: str
        """
        The network protocol this rule controls. (`TCP`, `UDP`, `ICMP`)
        """
elif False:
    GetNodeBalancerFirewallInboundArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNodeBalancerFirewallInboundArgs:
    def __init__(__self__, *,
                 action: str,
                 ipv4s: Sequence[str],
                 ipv6s: Sequence[str],
                 label: str,
                 ports: str,
                 protocol: str):
        """
        :param str action: Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        :param Sequence[str] ipv4s: A list of IPv4 addresses or networks. Must be in IP/mask format.
        :param Sequence[str] ipv6s: A list of IPv6 addresses or networks. Must be in IP/mask format.
        :param str label: Used to identify this rule. For display purposes only.
        :param str ports: A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        :param str protocol: The network protocol this rule controls. (`TCP`, `UDP`, `ICMP`)
        """
        pulumi.set(__self__, "action", action)
        pulumi.set(__self__, "ipv4s", ipv4s)
        pulumi.set(__self__, "ipv6s", ipv6s)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "ports", ports)
        pulumi.set(__self__, "protocol", protocol)

    @property
    @pulumi.getter
    def action(self) -> str:
        """
        Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        """
        return pulumi.get(self, "action")

    @action.setter
    def action(self, value: str):
        pulumi.set(self, "action", value)

    @property
    @pulumi.getter
    def ipv4s(self) -> Sequence[str]:
        """
        A list of IPv4 addresses or networks. Must be in IP/mask format.
        """
        return pulumi.get(self, "ipv4s")

    @ipv4s.setter
    def ipv4s(self, value: Sequence[str]):
        pulumi.set(self, "ipv4s", value)

    @property
    @pulumi.getter
    def ipv6s(self) -> Sequence[str]:
        """
        A list of IPv6 addresses or networks. Must be in IP/mask format.
        """
        return pulumi.get(self, "ipv6s")

    @ipv6s.setter
    def ipv6s(self, value: Sequence[str]):
        pulumi.set(self, "ipv6s", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        Used to identify this rule. For display purposes only.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def ports(self) -> str:
        """
        A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
        return pulumi.get(self, "ports")

    @ports.setter
    def ports(self, value: str):
        pulumi.set(self, "ports", value)

    @property
    @pulumi.getter
    def protocol(self) -> str:
        """
        The network protocol this rule controls. (`TCP`, `UDP`, `ICMP`)
        """
        return pulumi.get(self, "protocol")

    @protocol.setter
    def protocol(self, value: str):
        pulumi.set(self, "protocol", value)


if not MYPY:
    class GetNodeBalancerFirewallOutboundArgsDict(TypedDict):
        action: str
        """
        Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        """
        ipv4s: Sequence[str]
        """
        A list of IPv4 addresses or networks. Must be in IP/mask format.
        """
        ipv6s: Sequence[str]
        """
        A list of IPv6 addresses or networks. Must be in IP/mask format.
        """
        label: str
        """
        Used to identify this rule. For display purposes only.
        """
        ports: str
        """
        A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
        protocol: str
        """
        The network protocol this rule controls. (`TCP`, `UDP`, `ICMP`)
        """
elif False:
    GetNodeBalancerFirewallOutboundArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNodeBalancerFirewallOutboundArgs:
    def __init__(__self__, *,
                 action: str,
                 ipv4s: Sequence[str],
                 ipv6s: Sequence[str],
                 label: str,
                 ports: str,
                 protocol: str):
        """
        :param str action: Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        :param Sequence[str] ipv4s: A list of IPv4 addresses or networks. Must be in IP/mask format.
        :param Sequence[str] ipv6s: A list of IPv6 addresses or networks. Must be in IP/mask format.
        :param str label: Used to identify this rule. For display purposes only.
        :param str ports: A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        :param str protocol: The network protocol this rule controls. (`TCP`, `UDP`, `ICMP`)
        """
        pulumi.set(__self__, "action", action)
        pulumi.set(__self__, "ipv4s", ipv4s)
        pulumi.set(__self__, "ipv6s", ipv6s)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "ports", ports)
        pulumi.set(__self__, "protocol", protocol)

    @property
    @pulumi.getter
    def action(self) -> str:
        """
        Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.
        """
        return pulumi.get(self, "action")

    @action.setter
    def action(self, value: str):
        pulumi.set(self, "action", value)

    @property
    @pulumi.getter
    def ipv4s(self) -> Sequence[str]:
        """
        A list of IPv4 addresses or networks. Must be in IP/mask format.
        """
        return pulumi.get(self, "ipv4s")

    @ipv4s.setter
    def ipv4s(self, value: Sequence[str]):
        pulumi.set(self, "ipv4s", value)

    @property
    @pulumi.getter
    def ipv6s(self) -> Sequence[str]:
        """
        A list of IPv6 addresses or networks. Must be in IP/mask format.
        """
        return pulumi.get(self, "ipv6s")

    @ipv6s.setter
    def ipv6s(self, value: Sequence[str]):
        pulumi.set(self, "ipv6s", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        Used to identify this rule. For display purposes only.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def ports(self) -> str:
        """
        A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").
        """
        return pulumi.get(self, "ports")

    @ports.setter
    def ports(self, value: str):
        pulumi.set(self, "ports", value)

    @property
    @pulumi.getter
    def protocol(self) -> str:
        """
        The network protocol this rule controls. (`TCP`, `UDP`, `ICMP`)
        """
        return pulumi.get(self, "protocol")

    @protocol.setter
    def protocol(self, value: str):
        pulumi.set(self, "protocol", value)


if not MYPY:
    class GetNodebalancerConfigsFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetNodebalancerConfigsFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNodebalancerConfigsFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetNodebalancerConfigsNodebalancerConfigArgsDict(TypedDict):
        algorithm: str
        """
        What algorithm this NodeBalancer should use for routing traffic to backends (`roundrobin`, `leastconn`, `source`)
        """
        check: str
        """
        The type of check to perform against backends to ensure they are serving requests. This is used to determine if backends are up or down. If none no check is performed. connection requires only a connection to the backend to succeed. http and http_body rely on the backend serving HTTP, and that the response returned matches what is expected. (`none`, `connection`, `http`, `http_body`)
        """
        check_attempts: int
        """
        How many times to attempt a check before considering a backend to be down. (1-30)
        """
        check_body: str
        """
        This value must be present in the response body of the check in order for it to pass. If this value is not present in the response body of a check request, the backend is considered to be down
        """
        check_interval: int
        """
        How often, in seconds, to check that backends are up and serving requests.
        """
        check_passive: bool
        """
        If true, any response from this backend with a 5xx status code will be enough for it to be considered unhealthy and taken out of rotation.
        """
        check_path: str
        """
        The URL path to check on each backend. If the backend does not respond to this request it is considered to be down.
        """
        check_timeout: int
        """
        How long, in seconds, to wait for a check attempt before considering it failed. (1-30)
        """
        cipher_suite: str
        """
        What ciphers to use for SSL connections served by this NodeBalancer. `legacy` is considered insecure and should only be used if necessary. (`recommended`, `legacy`)
        """
        id: int
        """
        The config's ID.
        """
        node_statuses: Sequence['GetNodebalancerConfigsNodebalancerConfigNodeStatusArgsDict']
        """
        A structure containing information about the health of the backends for this port. This information is updated periodically as checks are performed against backends.
        """
        nodebalancer_id: int
        """
        The ID of the NodeBalancer to access.

        * `filter` - (Optional) A set of filters used to select Linode NodeBalancers that meet certain requirements.
        """
        port: int
        """
        The TCP port this Config is for.
        """
        protocol: str
        """
        The protocol this port is configured to serve. If this is set to https you must include an ssl_cert and an ssl_key. (`http`, `https`, `tcp`) (Defaults to `http`)
        """
        proxy_protocol: str
        """
        The version of ProxyProtocol to use for the underlying NodeBalancer. This requires protocol to be `tcp`. (`none`, `v1`, and `v2`) (Defaults to `none`)
        """
        ssl_commonname: str
        """
        The read-only common name automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.
        """
        ssl_fingerprint: str
        """
        The read-only fingerprint automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.
        """
        stickiness: str
        """
        Controls how session stickiness is handled on this port. (`none`, `table`, `http_cookie`)
        """
elif False:
    GetNodebalancerConfigsNodebalancerConfigArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNodebalancerConfigsNodebalancerConfigArgs:
    def __init__(__self__, *,
                 algorithm: str,
                 check: str,
                 check_attempts: int,
                 check_body: str,
                 check_interval: int,
                 check_passive: bool,
                 check_path: str,
                 check_timeout: int,
                 cipher_suite: str,
                 id: int,
                 node_statuses: Sequence['GetNodebalancerConfigsNodebalancerConfigNodeStatusArgs'],
                 nodebalancer_id: int,
                 port: int,
                 protocol: str,
                 proxy_protocol: str,
                 ssl_commonname: str,
                 ssl_fingerprint: str,
                 stickiness: str):
        """
        :param str algorithm: What algorithm this NodeBalancer should use for routing traffic to backends (`roundrobin`, `leastconn`, `source`)
        :param str check: The type of check to perform against backends to ensure they are serving requests. This is used to determine if backends are up or down. If none no check is performed. connection requires only a connection to the backend to succeed. http and http_body rely on the backend serving HTTP, and that the response returned matches what is expected. (`none`, `connection`, `http`, `http_body`)
        :param int check_attempts: How many times to attempt a check before considering a backend to be down. (1-30)
        :param str check_body: This value must be present in the response body of the check in order for it to pass. If this value is not present in the response body of a check request, the backend is considered to be down
        :param int check_interval: How often, in seconds, to check that backends are up and serving requests.
        :param bool check_passive: If true, any response from this backend with a 5xx status code will be enough for it to be considered unhealthy and taken out of rotation.
        :param str check_path: The URL path to check on each backend. If the backend does not respond to this request it is considered to be down.
        :param int check_timeout: How long, in seconds, to wait for a check attempt before considering it failed. (1-30)
        :param str cipher_suite: What ciphers to use for SSL connections served by this NodeBalancer. `legacy` is considered insecure and should only be used if necessary. (`recommended`, `legacy`)
        :param int id: The config's ID.
        :param Sequence['GetNodebalancerConfigsNodebalancerConfigNodeStatusArgs'] node_statuses: A structure containing information about the health of the backends for this port. This information is updated periodically as checks are performed against backends.
        :param int nodebalancer_id: The ID of the NodeBalancer to access.
               
               * `filter` - (Optional) A set of filters used to select Linode NodeBalancers that meet certain requirements.
        :param int port: The TCP port this Config is for.
        :param str protocol: The protocol this port is configured to serve. If this is set to https you must include an ssl_cert and an ssl_key. (`http`, `https`, `tcp`) (Defaults to `http`)
        :param str proxy_protocol: The version of ProxyProtocol to use for the underlying NodeBalancer. This requires protocol to be `tcp`. (`none`, `v1`, and `v2`) (Defaults to `none`)
        :param str ssl_commonname: The read-only common name automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.
        :param str ssl_fingerprint: The read-only fingerprint automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.
        :param str stickiness: Controls how session stickiness is handled on this port. (`none`, `table`, `http_cookie`)
        """
        pulumi.set(__self__, "algorithm", algorithm)
        pulumi.set(__self__, "check", check)
        pulumi.set(__self__, "check_attempts", check_attempts)
        pulumi.set(__self__, "check_body", check_body)
        pulumi.set(__self__, "check_interval", check_interval)
        pulumi.set(__self__, "check_passive", check_passive)
        pulumi.set(__self__, "check_path", check_path)
        pulumi.set(__self__, "check_timeout", check_timeout)
        pulumi.set(__self__, "cipher_suite", cipher_suite)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "node_statuses", node_statuses)
        pulumi.set(__self__, "nodebalancer_id", nodebalancer_id)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "protocol", protocol)
        pulumi.set(__self__, "proxy_protocol", proxy_protocol)
        pulumi.set(__self__, "ssl_commonname", ssl_commonname)
        pulumi.set(__self__, "ssl_fingerprint", ssl_fingerprint)
        pulumi.set(__self__, "stickiness", stickiness)

    @property
    @pulumi.getter
    def algorithm(self) -> str:
        """
        What algorithm this NodeBalancer should use for routing traffic to backends (`roundrobin`, `leastconn`, `source`)
        """
        return pulumi.get(self, "algorithm")

    @algorithm.setter
    def algorithm(self, value: str):
        pulumi.set(self, "algorithm", value)

    @property
    @pulumi.getter
    def check(self) -> str:
        """
        The type of check to perform against backends to ensure they are serving requests. This is used to determine if backends are up or down. If none no check is performed. connection requires only a connection to the backend to succeed. http and http_body rely on the backend serving HTTP, and that the response returned matches what is expected. (`none`, `connection`, `http`, `http_body`)
        """
        return pulumi.get(self, "check")

    @check.setter
    def check(self, value: str):
        pulumi.set(self, "check", value)

    @property
    @pulumi.getter(name="checkAttempts")
    def check_attempts(self) -> int:
        """
        How many times to attempt a check before considering a backend to be down. (1-30)
        """
        return pulumi.get(self, "check_attempts")

    @check_attempts.setter
    def check_attempts(self, value: int):
        pulumi.set(self, "check_attempts", value)

    @property
    @pulumi.getter(name="checkBody")
    def check_body(self) -> str:
        """
        This value must be present in the response body of the check in order for it to pass. If this value is not present in the response body of a check request, the backend is considered to be down
        """
        return pulumi.get(self, "check_body")

    @check_body.setter
    def check_body(self, value: str):
        pulumi.set(self, "check_body", value)

    @property
    @pulumi.getter(name="checkInterval")
    def check_interval(self) -> int:
        """
        How often, in seconds, to check that backends are up and serving requests.
        """
        return pulumi.get(self, "check_interval")

    @check_interval.setter
    def check_interval(self, value: int):
        pulumi.set(self, "check_interval", value)

    @property
    @pulumi.getter(name="checkPassive")
    def check_passive(self) -> bool:
        """
        If true, any response from this backend with a 5xx status code will be enough for it to be considered unhealthy and taken out of rotation.
        """
        return pulumi.get(self, "check_passive")

    @check_passive.setter
    def check_passive(self, value: bool):
        pulumi.set(self, "check_passive", value)

    @property
    @pulumi.getter(name="checkPath")
    def check_path(self) -> str:
        """
        The URL path to check on each backend. If the backend does not respond to this request it is considered to be down.
        """
        return pulumi.get(self, "check_path")

    @check_path.setter
    def check_path(self, value: str):
        pulumi.set(self, "check_path", value)

    @property
    @pulumi.getter(name="checkTimeout")
    def check_timeout(self) -> int:
        """
        How long, in seconds, to wait for a check attempt before considering it failed. (1-30)
        """
        return pulumi.get(self, "check_timeout")

    @check_timeout.setter
    def check_timeout(self, value: int):
        pulumi.set(self, "check_timeout", value)

    @property
    @pulumi.getter(name="cipherSuite")
    def cipher_suite(self) -> str:
        """
        What ciphers to use for SSL connections served by this NodeBalancer. `legacy` is considered insecure and should only be used if necessary. (`recommended`, `legacy`)
        """
        return pulumi.get(self, "cipher_suite")

    @cipher_suite.setter
    def cipher_suite(self, value: str):
        pulumi.set(self, "cipher_suite", value)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The config's ID.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter(name="nodeStatuses")
    def node_statuses(self) -> Sequence['GetNodebalancerConfigsNodebalancerConfigNodeStatusArgs']:
        """
        A structure containing information about the health of the backends for this port. This information is updated periodically as checks are performed against backends.
        """
        return pulumi.get(self, "node_statuses")

    @node_statuses.setter
    def node_statuses(self, value: Sequence['GetNodebalancerConfigsNodebalancerConfigNodeStatusArgs']):
        pulumi.set(self, "node_statuses", value)

    @property
    @pulumi.getter(name="nodebalancerId")
    def nodebalancer_id(self) -> int:
        """
        The ID of the NodeBalancer to access.

        * `filter` - (Optional) A set of filters used to select Linode NodeBalancers that meet certain requirements.
        """
        return pulumi.get(self, "nodebalancer_id")

    @nodebalancer_id.setter
    def nodebalancer_id(self, value: int):
        pulumi.set(self, "nodebalancer_id", value)

    @property
    @pulumi.getter
    def port(self) -> int:
        """
        The TCP port this Config is for.
        """
        return pulumi.get(self, "port")

    @port.setter
    def port(self, value: int):
        pulumi.set(self, "port", value)

    @property
    @pulumi.getter
    def protocol(self) -> str:
        """
        The protocol this port is configured to serve. If this is set to https you must include an ssl_cert and an ssl_key. (`http`, `https`, `tcp`) (Defaults to `http`)
        """
        return pulumi.get(self, "protocol")

    @protocol.setter
    def protocol(self, value: str):
        pulumi.set(self, "protocol", value)

    @property
    @pulumi.getter(name="proxyProtocol")
    def proxy_protocol(self) -> str:
        """
        The version of ProxyProtocol to use for the underlying NodeBalancer. This requires protocol to be `tcp`. (`none`, `v1`, and `v2`) (Defaults to `none`)
        """
        return pulumi.get(self, "proxy_protocol")

    @proxy_protocol.setter
    def proxy_protocol(self, value: str):
        pulumi.set(self, "proxy_protocol", value)

    @property
    @pulumi.getter(name="sslCommonname")
    def ssl_commonname(self) -> str:
        """
        The read-only common name automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.
        """
        return pulumi.get(self, "ssl_commonname")

    @ssl_commonname.setter
    def ssl_commonname(self, value: str):
        pulumi.set(self, "ssl_commonname", value)

    @property
    @pulumi.getter(name="sslFingerprint")
    def ssl_fingerprint(self) -> str:
        """
        The read-only fingerprint automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.
        """
        return pulumi.get(self, "ssl_fingerprint")

    @ssl_fingerprint.setter
    def ssl_fingerprint(self, value: str):
        pulumi.set(self, "ssl_fingerprint", value)

    @property
    @pulumi.getter
    def stickiness(self) -> str:
        """
        Controls how session stickiness is handled on this port. (`none`, `table`, `http_cookie`)
        """
        return pulumi.get(self, "stickiness")

    @stickiness.setter
    def stickiness(self, value: str):
        pulumi.set(self, "stickiness", value)


if not MYPY:
    class GetNodebalancerConfigsNodebalancerConfigNodeStatusArgsDict(TypedDict):
        down: int
        """
        The number of backends considered to be 'DOWN' and unhealthy. These are not in rotation, and not serving requests.
        """
        up: int
        """
        The number of backends considered to be 'UP' and healthy, and that are serving requests.
        """
elif False:
    GetNodebalancerConfigsNodebalancerConfigNodeStatusArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNodebalancerConfigsNodebalancerConfigNodeStatusArgs:
    def __init__(__self__, *,
                 down: int,
                 up: int):
        """
        :param int down: The number of backends considered to be 'DOWN' and unhealthy. These are not in rotation, and not serving requests.
        :param int up: The number of backends considered to be 'UP' and healthy, and that are serving requests.
        """
        pulumi.set(__self__, "down", down)
        pulumi.set(__self__, "up", up)

    @property
    @pulumi.getter
    def down(self) -> int:
        """
        The number of backends considered to be 'DOWN' and unhealthy. These are not in rotation, and not serving requests.
        """
        return pulumi.get(self, "down")

    @down.setter
    def down(self, value: int):
        pulumi.set(self, "down", value)

    @property
    @pulumi.getter
    def up(self) -> int:
        """
        The number of backends considered to be 'UP' and healthy, and that are serving requests.
        """
        return pulumi.get(self, "up")

    @up.setter
    def up(self, value: int):
        pulumi.set(self, "up", value)


if not MYPY:
    class GetNodebalancersFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetNodebalancersFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNodebalancersFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetNodebalancersNodebalancerArgsDict(TypedDict):
        client_conn_throttle: int
        """
        Throttle connections per second (0-20)
        """
        created: str
        """
        When this Linode NodeBalancer was created
        """
        hostname: str
        """
        This NodeBalancer's hostname, ending with .ip.linodeusercontent.com
        """
        id: int
        """
        The Linode NodeBalancer's unique ID
        """
        ipv4: str
        """
        The Public IPv4 Address of this NodeBalancer
        """
        ipv6: str
        """
        The Public IPv6 Address of this NodeBalancer
        """
        label: str
        """
        The label of the Linode NodeBalancer
        """
        region: str
        """
        The Region where this Linode NodeBalancer is located. NodeBalancers only support backends in the same Region.
        """
        tags: Sequence[str]
        """
        A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        """
        transfers: Sequence['GetNodebalancersNodebalancerTransferArgsDict']
        """
        Information about the amount of transfer this NodeBalancer has had so far this month.
        """
        updated: str
        """
        When this Linode NodeBalancer was last updated
        """
elif False:
    GetNodebalancersNodebalancerArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNodebalancersNodebalancerArgs:
    def __init__(__self__, *,
                 client_conn_throttle: int,
                 created: str,
                 hostname: str,
                 id: int,
                 ipv4: str,
                 ipv6: str,
                 label: str,
                 region: str,
                 tags: Sequence[str],
                 transfers: Sequence['GetNodebalancersNodebalancerTransferArgs'],
                 updated: str):
        """
        :param int client_conn_throttle: Throttle connections per second (0-20)
        :param str created: When this Linode NodeBalancer was created
        :param str hostname: This NodeBalancer's hostname, ending with .ip.linodeusercontent.com
        :param int id: The Linode NodeBalancer's unique ID
        :param str ipv4: The Public IPv4 Address of this NodeBalancer
        :param str ipv6: The Public IPv6 Address of this NodeBalancer
        :param str label: The label of the Linode NodeBalancer
        :param str region: The Region where this Linode NodeBalancer is located. NodeBalancers only support backends in the same Region.
        :param Sequence[str] tags: A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        :param Sequence['GetNodebalancersNodebalancerTransferArgs'] transfers: Information about the amount of transfer this NodeBalancer has had so far this month.
        :param str updated: When this Linode NodeBalancer was last updated
        """
        pulumi.set(__self__, "client_conn_throttle", client_conn_throttle)
        pulumi.set(__self__, "created", created)
        pulumi.set(__self__, "hostname", hostname)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ipv4", ipv4)
        pulumi.set(__self__, "ipv6", ipv6)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "tags", tags)
        pulumi.set(__self__, "transfers", transfers)
        pulumi.set(__self__, "updated", updated)

    @property
    @pulumi.getter(name="clientConnThrottle")
    def client_conn_throttle(self) -> int:
        """
        Throttle connections per second (0-20)
        """
        return pulumi.get(self, "client_conn_throttle")

    @client_conn_throttle.setter
    def client_conn_throttle(self, value: int):
        pulumi.set(self, "client_conn_throttle", value)

    @property
    @pulumi.getter
    def created(self) -> str:
        """
        When this Linode NodeBalancer was created
        """
        return pulumi.get(self, "created")

    @created.setter
    def created(self, value: str):
        pulumi.set(self, "created", value)

    @property
    @pulumi.getter
    def hostname(self) -> str:
        """
        This NodeBalancer's hostname, ending with .ip.linodeusercontent.com
        """
        return pulumi.get(self, "hostname")

    @hostname.setter
    def hostname(self, value: str):
        pulumi.set(self, "hostname", value)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The Linode NodeBalancer's unique ID
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def ipv4(self) -> str:
        """
        The Public IPv4 Address of this NodeBalancer
        """
        return pulumi.get(self, "ipv4")

    @ipv4.setter
    def ipv4(self, value: str):
        pulumi.set(self, "ipv4", value)

    @property
    @pulumi.getter
    def ipv6(self) -> str:
        """
        The Public IPv6 Address of this NodeBalancer
        """
        return pulumi.get(self, "ipv6")

    @ipv6.setter
    def ipv6(self, value: str):
        pulumi.set(self, "ipv6", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The label of the Linode NodeBalancer
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The Region where this Linode NodeBalancer is located. NodeBalancers only support backends in the same Region.
        """
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: str):
        pulumi.set(self, "region", value)

    @property
    @pulumi.getter
    def tags(self) -> Sequence[str]:
        """
        A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        """
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Sequence[str]):
        pulumi.set(self, "tags", value)

    @property
    @pulumi.getter
    def transfers(self) -> Sequence['GetNodebalancersNodebalancerTransferArgs']:
        """
        Information about the amount of transfer this NodeBalancer has had so far this month.
        """
        return pulumi.get(self, "transfers")

    @transfers.setter
    def transfers(self, value: Sequence['GetNodebalancersNodebalancerTransferArgs']):
        pulumi.set(self, "transfers", value)

    @property
    @pulumi.getter
    def updated(self) -> str:
        """
        When this Linode NodeBalancer was last updated
        """
        return pulumi.get(self, "updated")

    @updated.setter
    def updated(self, value: str):
        pulumi.set(self, "updated", value)


if not MYPY:
    class GetNodebalancersNodebalancerTransferArgsDict(TypedDict):
        in_: float
        """
        The total transfer, in MB, used by this NodeBalancer for the current month
        """
        out: float
        """
        The total inbound transfer, in MB, used for this NodeBalancer for the current month
        """
        total: float
        """
        The total outbound transfer, in MB, used for this NodeBalancer for the current month
        """
elif False:
    GetNodebalancersNodebalancerTransferArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetNodebalancersNodebalancerTransferArgs:
    def __init__(__self__, *,
                 in_: float,
                 out: float,
                 total: float):
        """
        :param float in_: The total transfer, in MB, used by this NodeBalancer for the current month
        :param float out: The total inbound transfer, in MB, used for this NodeBalancer for the current month
        :param float total: The total outbound transfer, in MB, used for this NodeBalancer for the current month
        """
        pulumi.set(__self__, "in_", in_)
        pulumi.set(__self__, "out", out)
        pulumi.set(__self__, "total", total)

    @property
    @pulumi.getter(name="in")
    def in_(self) -> float:
        """
        The total transfer, in MB, used by this NodeBalancer for the current month
        """
        return pulumi.get(self, "in_")

    @in_.setter
    def in_(self, value: float):
        pulumi.set(self, "in_", value)

    @property
    @pulumi.getter
    def out(self) -> float:
        """
        The total inbound transfer, in MB, used for this NodeBalancer for the current month
        """
        return pulumi.get(self, "out")

    @out.setter
    def out(self, value: float):
        pulumi.set(self, "out", value)

    @property
    @pulumi.getter
    def total(self) -> float:
        """
        The total outbound transfer, in MB, used for this NodeBalancer for the current month
        """
        return pulumi.get(self, "total")

    @total.setter
    def total(self, value: float):
        pulumi.set(self, "total", value)


if not MYPY:
    class GetPlacementGroupMemberArgsDict(TypedDict):
        is_compliant: bool
        """
        Whether this Linode is currently compliant with the group's placement group type.
        """
        linode_id: int
        """
        The ID of the Linode.
        """
elif False:
    GetPlacementGroupMemberArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetPlacementGroupMemberArgs:
    def __init__(__self__, *,
                 is_compliant: bool,
                 linode_id: int):
        """
        :param bool is_compliant: Whether this Linode is currently compliant with the group's placement group type.
        :param int linode_id: The ID of the Linode.
        """
        pulumi.set(__self__, "is_compliant", is_compliant)
        pulumi.set(__self__, "linode_id", linode_id)

    @property
    @pulumi.getter(name="isCompliant")
    def is_compliant(self) -> bool:
        """
        Whether this Linode is currently compliant with the group's placement group type.
        """
        return pulumi.get(self, "is_compliant")

    @is_compliant.setter
    def is_compliant(self, value: bool):
        pulumi.set(self, "is_compliant", value)

    @property
    @pulumi.getter(name="linodeId")
    def linode_id(self) -> int:
        """
        The ID of the Linode.
        """
        return pulumi.get(self, "linode_id")

    @linode_id.setter
    def linode_id(self, value: int):
        pulumi.set(self, "linode_id", value)


if not MYPY:
    class GetPlacementGroupMigrationsArgsDict(TypedDict):
        inbounds: Sequence['GetPlacementGroupMigrationsInboundArgsDict']
        """
        A list of the Linodes the system is migrating into the placement group.
        """
        outbounds: Sequence['GetPlacementGroupMigrationsOutboundArgsDict']
        """
        A list of the Linodes the system is migrating out of the placement group.
        """
elif False:
    GetPlacementGroupMigrationsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetPlacementGroupMigrationsArgs:
    def __init__(__self__, *,
                 inbounds: Sequence['GetPlacementGroupMigrationsInboundArgs'],
                 outbounds: Sequence['GetPlacementGroupMigrationsOutboundArgs']):
        """
        :param Sequence['GetPlacementGroupMigrationsInboundArgs'] inbounds: A list of the Linodes the system is migrating into the placement group.
        :param Sequence['GetPlacementGroupMigrationsOutboundArgs'] outbounds: A list of the Linodes the system is migrating out of the placement group.
        """
        pulumi.set(__self__, "inbounds", inbounds)
        pulumi.set(__self__, "outbounds", outbounds)

    @property
    @pulumi.getter
    def inbounds(self) -> Sequence['GetPlacementGroupMigrationsInboundArgs']:
        """
        A list of the Linodes the system is migrating into the placement group.
        """
        return pulumi.get(self, "inbounds")

    @inbounds.setter
    def inbounds(self, value: Sequence['GetPlacementGroupMigrationsInboundArgs']):
        pulumi.set(self, "inbounds", value)

    @property
    @pulumi.getter
    def outbounds(self) -> Sequence['GetPlacementGroupMigrationsOutboundArgs']:
        """
        A list of the Linodes the system is migrating out of the placement group.
        """
        return pulumi.get(self, "outbounds")

    @outbounds.setter
    def outbounds(self, value: Sequence['GetPlacementGroupMigrationsOutboundArgs']):
        pulumi.set(self, "outbounds", value)


if not MYPY:
    class GetPlacementGroupMigrationsInboundArgsDict(TypedDict):
        linode_id: int
        """
        The ID of the Linode.
        """
elif False:
    GetPlacementGroupMigrationsInboundArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetPlacementGroupMigrationsInboundArgs:
    def __init__(__self__, *,
                 linode_id: int):
        """
        :param int linode_id: The ID of the Linode.
        """
        pulumi.set(__self__, "linode_id", linode_id)

    @property
    @pulumi.getter(name="linodeId")
    def linode_id(self) -> int:
        """
        The ID of the Linode.
        """
        return pulumi.get(self, "linode_id")

    @linode_id.setter
    def linode_id(self, value: int):
        pulumi.set(self, "linode_id", value)


if not MYPY:
    class GetPlacementGroupMigrationsOutboundArgsDict(TypedDict):
        linode_id: int
        """
        The ID of the Linode.
        """
elif False:
    GetPlacementGroupMigrationsOutboundArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetPlacementGroupMigrationsOutboundArgs:
    def __init__(__self__, *,
                 linode_id: int):
        """
        :param int linode_id: The ID of the Linode.
        """
        pulumi.set(__self__, "linode_id", linode_id)

    @property
    @pulumi.getter(name="linodeId")
    def linode_id(self) -> int:
        """
        The ID of the Linode.
        """
        return pulumi.get(self, "linode_id")

    @linode_id.setter
    def linode_id(self, value: int):
        pulumi.set(self, "linode_id", value)


if not MYPY:
    class GetPlacementGroupsFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetPlacementGroupsFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetPlacementGroupsFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetPlacementGroupsPlacementGroupArgsDict(TypedDict):
        id: int
        """
        The ID of the placement group.
        """
        is_compliant: bool
        """
        Whether this Linode is currently compliant with the group's placement group type.
        """
        label: str
        """
        The label of the Placement Group. This field can only contain ASCII letters, digits and dashes.
        """
        placement_group_policy: str
        """
        Whether Linodes must be able to become compliant during assignment. (Default `strict`)
        """
        placement_group_type: str
        """
        The placement group type to use when placing Linodes in this group.
        """
        region: str
        """
        The region of the Placement Group.
        """
        members: NotRequired[Sequence['GetPlacementGroupsPlacementGroupMemberArgsDict']]
        """
        A set of Linodes currently assigned to this Placement Group.
        """
        migrations: NotRequired['GetPlacementGroupsPlacementGroupMigrationsArgsDict']
        """
        Any Linodes that are being migrated to or from the placement group.
        """
elif False:
    GetPlacementGroupsPlacementGroupArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetPlacementGroupsPlacementGroupArgs:
    def __init__(__self__, *,
                 id: int,
                 is_compliant: bool,
                 label: str,
                 placement_group_policy: str,
                 placement_group_type: str,
                 region: str,
                 members: Optional[Sequence['GetPlacementGroupsPlacementGroupMemberArgs']] = None,
                 migrations: Optional['GetPlacementGroupsPlacementGroupMigrationsArgs'] = None):
        """
        :param int id: The ID of the placement group.
        :param bool is_compliant: Whether this Linode is currently compliant with the group's placement group type.
        :param str label: The label of the Placement Group. This field can only contain ASCII letters, digits and dashes.
        :param str placement_group_policy: Whether Linodes must be able to become compliant during assignment. (Default `strict`)
        :param str placement_group_type: The placement group type to use when placing Linodes in this group.
        :param str region: The region of the Placement Group.
        :param Sequence['GetPlacementGroupsPlacementGroupMemberArgs'] members: A set of Linodes currently assigned to this Placement Group.
        :param 'GetPlacementGroupsPlacementGroupMigrationsArgs' migrations: Any Linodes that are being migrated to or from the placement group.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "is_compliant", is_compliant)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "placement_group_policy", placement_group_policy)
        pulumi.set(__self__, "placement_group_type", placement_group_type)
        pulumi.set(__self__, "region", region)
        if members is not None:
            pulumi.set(__self__, "members", members)
        if migrations is not None:
            pulumi.set(__self__, "migrations", migrations)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of the placement group.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter(name="isCompliant")
    def is_compliant(self) -> bool:
        """
        Whether this Linode is currently compliant with the group's placement group type.
        """
        return pulumi.get(self, "is_compliant")

    @is_compliant.setter
    def is_compliant(self, value: bool):
        pulumi.set(self, "is_compliant", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The label of the Placement Group. This field can only contain ASCII letters, digits and dashes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter(name="placementGroupPolicy")
    def placement_group_policy(self) -> str:
        """
        Whether Linodes must be able to become compliant during assignment. (Default `strict`)
        """
        return pulumi.get(self, "placement_group_policy")

    @placement_group_policy.setter
    def placement_group_policy(self, value: str):
        pulumi.set(self, "placement_group_policy", value)

    @property
    @pulumi.getter(name="placementGroupType")
    def placement_group_type(self) -> str:
        """
        The placement group type to use when placing Linodes in this group.
        """
        return pulumi.get(self, "placement_group_type")

    @placement_group_type.setter
    def placement_group_type(self, value: str):
        pulumi.set(self, "placement_group_type", value)

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The region of the Placement Group.
        """
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: str):
        pulumi.set(self, "region", value)

    @property
    @pulumi.getter
    def members(self) -> Optional[Sequence['GetPlacementGroupsPlacementGroupMemberArgs']]:
        """
        A set of Linodes currently assigned to this Placement Group.
        """
        return pulumi.get(self, "members")

    @members.setter
    def members(self, value: Optional[Sequence['GetPlacementGroupsPlacementGroupMemberArgs']]):
        pulumi.set(self, "members", value)

    @property
    @pulumi.getter
    def migrations(self) -> Optional['GetPlacementGroupsPlacementGroupMigrationsArgs']:
        """
        Any Linodes that are being migrated to or from the placement group.
        """
        return pulumi.get(self, "migrations")

    @migrations.setter
    def migrations(self, value: Optional['GetPlacementGroupsPlacementGroupMigrationsArgs']):
        pulumi.set(self, "migrations", value)


if not MYPY:
    class GetPlacementGroupsPlacementGroupMemberArgsDict(TypedDict):
        is_compliant: bool
        """
        Whether this Linode is currently compliant with the group's placement group type.
        """
        linode_id: int
        """
        The unique identifier for the Linode being migrated out of the placement group.
        """
elif False:
    GetPlacementGroupsPlacementGroupMemberArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetPlacementGroupsPlacementGroupMemberArgs:
    def __init__(__self__, *,
                 is_compliant: bool,
                 linode_id: int):
        """
        :param bool is_compliant: Whether this Linode is currently compliant with the group's placement group type.
        :param int linode_id: The unique identifier for the Linode being migrated out of the placement group.
        """
        pulumi.set(__self__, "is_compliant", is_compliant)
        pulumi.set(__self__, "linode_id", linode_id)

    @property
    @pulumi.getter(name="isCompliant")
    def is_compliant(self) -> bool:
        """
        Whether this Linode is currently compliant with the group's placement group type.
        """
        return pulumi.get(self, "is_compliant")

    @is_compliant.setter
    def is_compliant(self, value: bool):
        pulumi.set(self, "is_compliant", value)

    @property
    @pulumi.getter(name="linodeId")
    def linode_id(self) -> int:
        """
        The unique identifier for the Linode being migrated out of the placement group.
        """
        return pulumi.get(self, "linode_id")

    @linode_id.setter
    def linode_id(self, value: int):
        pulumi.set(self, "linode_id", value)


if not MYPY:
    class GetPlacementGroupsPlacementGroupMigrationsArgsDict(TypedDict):
        inbounds: Sequence['GetPlacementGroupsPlacementGroupMigrationsInboundArgsDict']
        """
        A list of the Linodes the system is migrating into the placement group.
        """
        outbounds: Sequence['GetPlacementGroupsPlacementGroupMigrationsOutboundArgsDict']
        """
        A list of the Linodes the system is migrating out of the placement group.
        """
elif False:
    GetPlacementGroupsPlacementGroupMigrationsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetPlacementGroupsPlacementGroupMigrationsArgs:
    def __init__(__self__, *,
                 inbounds: Sequence['GetPlacementGroupsPlacementGroupMigrationsInboundArgs'],
                 outbounds: Sequence['GetPlacementGroupsPlacementGroupMigrationsOutboundArgs']):
        """
        :param Sequence['GetPlacementGroupsPlacementGroupMigrationsInboundArgs'] inbounds: A list of the Linodes the system is migrating into the placement group.
        :param Sequence['GetPlacementGroupsPlacementGroupMigrationsOutboundArgs'] outbounds: A list of the Linodes the system is migrating out of the placement group.
        """
        pulumi.set(__self__, "inbounds", inbounds)
        pulumi.set(__self__, "outbounds", outbounds)

    @property
    @pulumi.getter
    def inbounds(self) -> Sequence['GetPlacementGroupsPlacementGroupMigrationsInboundArgs']:
        """
        A list of the Linodes the system is migrating into the placement group.
        """
        return pulumi.get(self, "inbounds")

    @inbounds.setter
    def inbounds(self, value: Sequence['GetPlacementGroupsPlacementGroupMigrationsInboundArgs']):
        pulumi.set(self, "inbounds", value)

    @property
    @pulumi.getter
    def outbounds(self) -> Sequence['GetPlacementGroupsPlacementGroupMigrationsOutboundArgs']:
        """
        A list of the Linodes the system is migrating out of the placement group.
        """
        return pulumi.get(self, "outbounds")

    @outbounds.setter
    def outbounds(self, value: Sequence['GetPlacementGroupsPlacementGroupMigrationsOutboundArgs']):
        pulumi.set(self, "outbounds", value)


if not MYPY:
    class GetPlacementGroupsPlacementGroupMigrationsInboundArgsDict(TypedDict):
        linode_id: int
        """
        The unique identifier for the Linode being migrated out of the placement group.
        """
elif False:
    GetPlacementGroupsPlacementGroupMigrationsInboundArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetPlacementGroupsPlacementGroupMigrationsInboundArgs:
    def __init__(__self__, *,
                 linode_id: int):
        """
        :param int linode_id: The unique identifier for the Linode being migrated out of the placement group.
        """
        pulumi.set(__self__, "linode_id", linode_id)

    @property
    @pulumi.getter(name="linodeId")
    def linode_id(self) -> int:
        """
        The unique identifier for the Linode being migrated out of the placement group.
        """
        return pulumi.get(self, "linode_id")

    @linode_id.setter
    def linode_id(self, value: int):
        pulumi.set(self, "linode_id", value)


if not MYPY:
    class GetPlacementGroupsPlacementGroupMigrationsOutboundArgsDict(TypedDict):
        linode_id: int
        """
        The unique identifier for the Linode being migrated out of the placement group.
        """
elif False:
    GetPlacementGroupsPlacementGroupMigrationsOutboundArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetPlacementGroupsPlacementGroupMigrationsOutboundArgs:
    def __init__(__self__, *,
                 linode_id: int):
        """
        :param int linode_id: The unique identifier for the Linode being migrated out of the placement group.
        """
        pulumi.set(__self__, "linode_id", linode_id)

    @property
    @pulumi.getter(name="linodeId")
    def linode_id(self) -> int:
        """
        The unique identifier for the Linode being migrated out of the placement group.
        """
        return pulumi.get(self, "linode_id")

    @linode_id.setter
    def linode_id(self, value: int):
        pulumi.set(self, "linode_id", value)


if not MYPY:
    class GetRegionResolverArgsDict(TypedDict):
        ipv4: str
        """
        The IPv4 addresses for this region’s DNS resolvers, separated by commas.
        """
        ipv6: str
        """
        The IPv6 addresses for this region’s DNS resolvers, separated by commas.
        """
elif False:
    GetRegionResolverArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetRegionResolverArgs:
    def __init__(__self__, *,
                 ipv4: str,
                 ipv6: str):
        """
        :param str ipv4: The IPv4 addresses for this region’s DNS resolvers, separated by commas.
        :param str ipv6: The IPv6 addresses for this region’s DNS resolvers, separated by commas.
        """
        pulumi.set(__self__, "ipv4", ipv4)
        pulumi.set(__self__, "ipv6", ipv6)

    @property
    @pulumi.getter
    def ipv4(self) -> str:
        """
        The IPv4 addresses for this region’s DNS resolvers, separated by commas.
        """
        return pulumi.get(self, "ipv4")

    @ipv4.setter
    def ipv4(self, value: str):
        pulumi.set(self, "ipv4", value)

    @property
    @pulumi.getter
    def ipv6(self) -> str:
        """
        The IPv6 addresses for this region’s DNS resolvers, separated by commas.
        """
        return pulumi.get(self, "ipv6")

    @ipv6.setter
    def ipv6(self, value: str):
        pulumi.set(self, "ipv6", value)


if not MYPY:
    class GetRegionsFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetRegionsFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetRegionsFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetRegionsRegionArgsDict(TypedDict):
        capabilities: Sequence[str]
        """
        A list of capabilities of this region.
        """
        country: str
        """
        The country the region resides in.
        """
        id: str
        """
        The unique ID of this Region.
        """
        label: str
        """
        Detailed location information for this Region, including city, state or region, and country.
        """
        placement_group_limits: Sequence['GetRegionsRegionPlacementGroupLimitArgsDict']
        """
        Information about placement groups limits for this region.
        """
        site_type: str
        """
        The type of this region.
        """
        status: str
        """
        This region’s current operational status (ok or outage).
        """
        resolvers: NotRequired[Sequence['GetRegionsRegionResolverArgsDict']]
elif False:
    GetRegionsRegionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetRegionsRegionArgs:
    def __init__(__self__, *,
                 capabilities: Sequence[str],
                 country: str,
                 id: str,
                 label: str,
                 placement_group_limits: Sequence['GetRegionsRegionPlacementGroupLimitArgs'],
                 site_type: str,
                 status: str,
                 resolvers: Optional[Sequence['GetRegionsRegionResolverArgs']] = None):
        """
        :param Sequence[str] capabilities: A list of capabilities of this region.
        :param str country: The country the region resides in.
        :param str id: The unique ID of this Region.
        :param str label: Detailed location information for this Region, including city, state or region, and country.
        :param Sequence['GetRegionsRegionPlacementGroupLimitArgs'] placement_group_limits: Information about placement groups limits for this region.
        :param str site_type: The type of this region.
        :param str status: This region’s current operational status (ok or outage).
        """
        pulumi.set(__self__, "capabilities", capabilities)
        pulumi.set(__self__, "country", country)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "placement_group_limits", placement_group_limits)
        pulumi.set(__self__, "site_type", site_type)
        pulumi.set(__self__, "status", status)
        if resolvers is not None:
            pulumi.set(__self__, "resolvers", resolvers)

    @property
    @pulumi.getter
    def capabilities(self) -> Sequence[str]:
        """
        A list of capabilities of this region.
        """
        return pulumi.get(self, "capabilities")

    @capabilities.setter
    def capabilities(self, value: Sequence[str]):
        pulumi.set(self, "capabilities", value)

    @property
    @pulumi.getter
    def country(self) -> str:
        """
        The country the region resides in.
        """
        return pulumi.get(self, "country")

    @country.setter
    def country(self, value: str):
        pulumi.set(self, "country", value)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The unique ID of this Region.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        Detailed location information for this Region, including city, state or region, and country.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter(name="placementGroupLimits")
    def placement_group_limits(self) -> Sequence['GetRegionsRegionPlacementGroupLimitArgs']:
        """
        Information about placement groups limits for this region.
        """
        return pulumi.get(self, "placement_group_limits")

    @placement_group_limits.setter
    def placement_group_limits(self, value: Sequence['GetRegionsRegionPlacementGroupLimitArgs']):
        pulumi.set(self, "placement_group_limits", value)

    @property
    @pulumi.getter(name="siteType")
    def site_type(self) -> str:
        """
        The type of this region.
        """
        return pulumi.get(self, "site_type")

    @site_type.setter
    def site_type(self, value: str):
        pulumi.set(self, "site_type", value)

    @property
    @pulumi.getter
    def status(self) -> str:
        """
        This region’s current operational status (ok or outage).
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: str):
        pulumi.set(self, "status", value)

    @property
    @pulumi.getter
    def resolvers(self) -> Optional[Sequence['GetRegionsRegionResolverArgs']]:
        return pulumi.get(self, "resolvers")

    @resolvers.setter
    def resolvers(self, value: Optional[Sequence['GetRegionsRegionResolverArgs']]):
        pulumi.set(self, "resolvers", value)


if not MYPY:
    class GetRegionsRegionPlacementGroupLimitArgsDict(TypedDict):
        maximum_linodes_per_pg: int
        """
        The maximum number of Linodes allowed to be assigned to a placement group in this region.
        """
        maximum_pgs_per_customer: int
        """
        The maximum number of placement groups allowed for the current user in this region.
        """
elif False:
    GetRegionsRegionPlacementGroupLimitArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetRegionsRegionPlacementGroupLimitArgs:
    def __init__(__self__, *,
                 maximum_linodes_per_pg: int,
                 maximum_pgs_per_customer: int):
        """
        :param int maximum_linodes_per_pg: The maximum number of Linodes allowed to be assigned to a placement group in this region.
        :param int maximum_pgs_per_customer: The maximum number of placement groups allowed for the current user in this region.
        """
        pulumi.set(__self__, "maximum_linodes_per_pg", maximum_linodes_per_pg)
        pulumi.set(__self__, "maximum_pgs_per_customer", maximum_pgs_per_customer)

    @property
    @pulumi.getter(name="maximumLinodesPerPg")
    def maximum_linodes_per_pg(self) -> int:
        """
        The maximum number of Linodes allowed to be assigned to a placement group in this region.
        """
        return pulumi.get(self, "maximum_linodes_per_pg")

    @maximum_linodes_per_pg.setter
    def maximum_linodes_per_pg(self, value: int):
        pulumi.set(self, "maximum_linodes_per_pg", value)

    @property
    @pulumi.getter(name="maximumPgsPerCustomer")
    def maximum_pgs_per_customer(self) -> int:
        """
        The maximum number of placement groups allowed for the current user in this region.
        """
        return pulumi.get(self, "maximum_pgs_per_customer")

    @maximum_pgs_per_customer.setter
    def maximum_pgs_per_customer(self, value: int):
        pulumi.set(self, "maximum_pgs_per_customer", value)


if not MYPY:
    class GetRegionsRegionResolverArgsDict(TypedDict):
        ipv4: str
        """
        The IPv4 addresses for this region’s DNS resolvers, separated by commas.
        """
        ipv6: str
        """
        The IPv6 addresses for this region’s DNS resolvers, separated by commas.
        """
elif False:
    GetRegionsRegionResolverArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetRegionsRegionResolverArgs:
    def __init__(__self__, *,
                 ipv4: str,
                 ipv6: str):
        """
        :param str ipv4: The IPv4 addresses for this region’s DNS resolvers, separated by commas.
        :param str ipv6: The IPv6 addresses for this region’s DNS resolvers, separated by commas.
        """
        pulumi.set(__self__, "ipv4", ipv4)
        pulumi.set(__self__, "ipv6", ipv6)

    @property
    @pulumi.getter
    def ipv4(self) -> str:
        """
        The IPv4 addresses for this region’s DNS resolvers, separated by commas.
        """
        return pulumi.get(self, "ipv4")

    @ipv4.setter
    def ipv4(self, value: str):
        pulumi.set(self, "ipv4", value)

    @property
    @pulumi.getter
    def ipv6(self) -> str:
        """
        The IPv6 addresses for this region’s DNS resolvers, separated by commas.
        """
        return pulumi.get(self, "ipv6")

    @ipv6.setter
    def ipv6(self, value: str):
        pulumi.set(self, "ipv6", value)


if not MYPY:
    class GetSshkeysFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetSshkeysFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetSshkeysFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetSshkeysSshkeyArgsDict(TypedDict):
        created: str
        """
        The date this key was added.
        """
        label: str
        """
        The label of the SSH Key.
        """
        ssh_key: str
        """
        The public SSH Key, which is used to authenticate to the root user of the Linodes you deploy.
        """
        id: NotRequired[str]
        """
        The ID of the SSH Key.
        """
elif False:
    GetSshkeysSshkeyArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetSshkeysSshkeyArgs:
    def __init__(__self__, *,
                 created: str,
                 label: str,
                 ssh_key: str,
                 id: Optional[str] = None):
        """
        :param str created: The date this key was added.
        :param str label: The label of the SSH Key.
        :param str ssh_key: The public SSH Key, which is used to authenticate to the root user of the Linodes you deploy.
        :param str id: The ID of the SSH Key.
        """
        pulumi.set(__self__, "created", created)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "ssh_key", ssh_key)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def created(self) -> str:
        """
        The date this key was added.
        """
        return pulumi.get(self, "created")

    @created.setter
    def created(self, value: str):
        pulumi.set(self, "created", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The label of the SSH Key.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter(name="sshKey")
    def ssh_key(self) -> str:
        """
        The public SSH Key, which is used to authenticate to the root user of the Linodes you deploy.
        """
        return pulumi.get(self, "ssh_key")

    @ssh_key.setter
    def ssh_key(self, value: str):
        pulumi.set(self, "ssh_key", value)

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        """
        The ID of the SSH Key.
        """
        return pulumi.get(self, "id")

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


if not MYPY:
    class GetStackScriptsFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetStackScriptsFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetStackScriptsFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetStackScriptsStackscriptArgsDict(TypedDict):
        created: str
        """
        The date this StackScript was created.
        """
        deployments_active: int
        """
        Count of currently active, deployed Linodes created from this StackScript.
        """
        deployments_total: int
        """
        The total number of times this StackScript has been deployed.
        """
        description: str
        """
        A description for the StackScript.
        """
        id: str
        """
        The unique ID of the StackScript.
        """
        images: Sequence[str]
        """
        An array of Image IDs representing the Images that this StackScript is compatible for deploying with.
        """
        is_public: bool
        """
        This determines whether other users can use your StackScript. Once a StackScript is made public, it cannot be made private.
        """
        label: str
        """
        A human-readable label for the field that will serve as the input prompt for entering the value during deployment.
        """
        rev_note: str
        """
        This field allows you to add notes for the set of revisions made to this StackScript.
        """
        script: str
        """
        The script to execute when provisioning a new Linode with this StackScript.
        """
        updated: str
        """
        The date this StackScript was updated.
        """
        user_defined_fields: Sequence['GetStackScriptsStackscriptUserDefinedFieldArgsDict']
        """
        This is a list of fields defined with a special syntax inside this StackScript that allow for supplying customized parameters during deployment.
        """
        user_gravatar_id: str
        """
        The Gravatar ID for the User who created the StackScript.
        """
        username: str
        """
        The User who created the StackScript.
        """
elif False:
    GetStackScriptsStackscriptArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetStackScriptsStackscriptArgs:
    def __init__(__self__, *,
                 created: str,
                 deployments_active: int,
                 deployments_total: int,
                 description: str,
                 id: str,
                 images: Sequence[str],
                 is_public: bool,
                 label: str,
                 rev_note: str,
                 script: str,
                 updated: str,
                 user_defined_fields: Sequence['GetStackScriptsStackscriptUserDefinedFieldArgs'],
                 user_gravatar_id: str,
                 username: str):
        """
        :param str created: The date this StackScript was created.
        :param int deployments_active: Count of currently active, deployed Linodes created from this StackScript.
        :param int deployments_total: The total number of times this StackScript has been deployed.
        :param str description: A description for the StackScript.
        :param str id: The unique ID of the StackScript.
        :param Sequence[str] images: An array of Image IDs representing the Images that this StackScript is compatible for deploying with.
        :param bool is_public: This determines whether other users can use your StackScript. Once a StackScript is made public, it cannot be made private.
        :param str label: A human-readable label for the field that will serve as the input prompt for entering the value during deployment.
        :param str rev_note: This field allows you to add notes for the set of revisions made to this StackScript.
        :param str script: The script to execute when provisioning a new Linode with this StackScript.
        :param str updated: The date this StackScript was updated.
        :param Sequence['GetStackScriptsStackscriptUserDefinedFieldArgs'] user_defined_fields: This is a list of fields defined with a special syntax inside this StackScript that allow for supplying customized parameters during deployment.
        :param str user_gravatar_id: The Gravatar ID for the User who created the StackScript.
        :param str username: The User who created the StackScript.
        """
        pulumi.set(__self__, "created", created)
        pulumi.set(__self__, "deployments_active", deployments_active)
        pulumi.set(__self__, "deployments_total", deployments_total)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "images", images)
        pulumi.set(__self__, "is_public", is_public)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "rev_note", rev_note)
        pulumi.set(__self__, "script", script)
        pulumi.set(__self__, "updated", updated)
        pulumi.set(__self__, "user_defined_fields", user_defined_fields)
        pulumi.set(__self__, "user_gravatar_id", user_gravatar_id)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def created(self) -> str:
        """
        The date this StackScript was created.
        """
        return pulumi.get(self, "created")

    @created.setter
    def created(self, value: str):
        pulumi.set(self, "created", value)

    @property
    @pulumi.getter(name="deploymentsActive")
    def deployments_active(self) -> int:
        """
        Count of currently active, deployed Linodes created from this StackScript.
        """
        return pulumi.get(self, "deployments_active")

    @deployments_active.setter
    def deployments_active(self, value: int):
        pulumi.set(self, "deployments_active", value)

    @property
    @pulumi.getter(name="deploymentsTotal")
    def deployments_total(self) -> int:
        """
        The total number of times this StackScript has been deployed.
        """
        return pulumi.get(self, "deployments_total")

    @deployments_total.setter
    def deployments_total(self, value: int):
        pulumi.set(self, "deployments_total", value)

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        A description for the StackScript.
        """
        return pulumi.get(self, "description")

    @description.setter
    def description(self, value: str):
        pulumi.set(self, "description", value)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The unique ID of the StackScript.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def images(self) -> Sequence[str]:
        """
        An array of Image IDs representing the Images that this StackScript is compatible for deploying with.
        """
        return pulumi.get(self, "images")

    @images.setter
    def images(self, value: Sequence[str]):
        pulumi.set(self, "images", value)

    @property
    @pulumi.getter(name="isPublic")
    def is_public(self) -> bool:
        """
        This determines whether other users can use your StackScript. Once a StackScript is made public, it cannot be made private.
        """
        return pulumi.get(self, "is_public")

    @is_public.setter
    def is_public(self, value: bool):
        pulumi.set(self, "is_public", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        A human-readable label for the field that will serve as the input prompt for entering the value during deployment.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter(name="revNote")
    def rev_note(self) -> str:
        """
        This field allows you to add notes for the set of revisions made to this StackScript.
        """
        return pulumi.get(self, "rev_note")

    @rev_note.setter
    def rev_note(self, value: str):
        pulumi.set(self, "rev_note", value)

    @property
    @pulumi.getter
    def script(self) -> str:
        """
        The script to execute when provisioning a new Linode with this StackScript.
        """
        return pulumi.get(self, "script")

    @script.setter
    def script(self, value: str):
        pulumi.set(self, "script", value)

    @property
    @pulumi.getter
    def updated(self) -> str:
        """
        The date this StackScript was updated.
        """
        return pulumi.get(self, "updated")

    @updated.setter
    def updated(self, value: str):
        pulumi.set(self, "updated", value)

    @property
    @pulumi.getter(name="userDefinedFields")
    def user_defined_fields(self) -> Sequence['GetStackScriptsStackscriptUserDefinedFieldArgs']:
        """
        This is a list of fields defined with a special syntax inside this StackScript that allow for supplying customized parameters during deployment.
        """
        return pulumi.get(self, "user_defined_fields")

    @user_defined_fields.setter
    def user_defined_fields(self, value: Sequence['GetStackScriptsStackscriptUserDefinedFieldArgs']):
        pulumi.set(self, "user_defined_fields", value)

    @property
    @pulumi.getter(name="userGravatarId")
    def user_gravatar_id(self) -> str:
        """
        The Gravatar ID for the User who created the StackScript.
        """
        return pulumi.get(self, "user_gravatar_id")

    @user_gravatar_id.setter
    def user_gravatar_id(self, value: str):
        pulumi.set(self, "user_gravatar_id", value)

    @property
    @pulumi.getter
    def username(self) -> str:
        """
        The User who created the StackScript.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: str):
        pulumi.set(self, "username", value)


if not MYPY:
    class GetStackScriptsStackscriptUserDefinedFieldArgsDict(TypedDict):
        default: str
        """
        The default value. If not specified, this value will be used.
        """
        example: str
        """
        An example value for the field.
        """
        label: str
        """
        A human-readable label for the field that will serve as the input prompt for entering the value during deployment.
        """
        many_of: str
        """
        A list of acceptable values for the field in any quantity, combination or order.
        """
        name: str
        """
        The name of the field.
        """
        one_of: str
        """
        A list of acceptable single values for the field.
        """
elif False:
    GetStackScriptsStackscriptUserDefinedFieldArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetStackScriptsStackscriptUserDefinedFieldArgs:
    def __init__(__self__, *,
                 default: str,
                 example: str,
                 label: str,
                 many_of: str,
                 name: str,
                 one_of: str):
        """
        :param str default: The default value. If not specified, this value will be used.
        :param str example: An example value for the field.
        :param str label: A human-readable label for the field that will serve as the input prompt for entering the value during deployment.
        :param str many_of: A list of acceptable values for the field in any quantity, combination or order.
        :param str name: The name of the field.
        :param str one_of: A list of acceptable single values for the field.
        """
        pulumi.set(__self__, "default", default)
        pulumi.set(__self__, "example", example)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "many_of", many_of)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "one_of", one_of)

    @property
    @pulumi.getter
    def default(self) -> str:
        """
        The default value. If not specified, this value will be used.
        """
        return pulumi.get(self, "default")

    @default.setter
    def default(self, value: str):
        pulumi.set(self, "default", value)

    @property
    @pulumi.getter
    def example(self) -> str:
        """
        An example value for the field.
        """
        return pulumi.get(self, "example")

    @example.setter
    def example(self, value: str):
        pulumi.set(self, "example", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        A human-readable label for the field that will serve as the input prompt for entering the value during deployment.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter(name="manyOf")
    def many_of(self) -> str:
        """
        A list of acceptable values for the field in any quantity, combination or order.
        """
        return pulumi.get(self, "many_of")

    @many_of.setter
    def many_of(self, value: str):
        pulumi.set(self, "many_of", value)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter(name="oneOf")
    def one_of(self) -> str:
        """
        A list of acceptable single values for the field.
        """
        return pulumi.get(self, "one_of")

    @one_of.setter
    def one_of(self, value: str):
        pulumi.set(self, "one_of", value)


if not MYPY:
    class GetUserDatabaseGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
elif False:
    GetUserDatabaseGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUserDatabaseGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetUserDomainGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
elif False:
    GetUserDomainGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUserDomainGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetUserFirewallGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
elif False:
    GetUserFirewallGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUserFirewallGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetUserImageGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
elif False:
    GetUserImageGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUserImageGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetUserLinodeGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
elif False:
    GetUserLinodeGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUserLinodeGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetUserLongviewGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
elif False:
    GetUserLongviewGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUserLongviewGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetUserNodebalancerGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
elif False:
    GetUserNodebalancerGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUserNodebalancerGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetUserStackscriptGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
elif False:
    GetUserStackscriptGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUserStackscriptGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetUserVolumeGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
elif False:
    GetUserVolumeGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUserVolumeGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access. (`read_only`, `read_write`)
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetUsersFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetUsersFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUsersFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetUsersUserArgsDict(TypedDict):
        database_grants: Sequence['GetUsersUserDatabaseGrantArgsDict']
        """
        A set containing all of the user's active grants.
        """
        domain_grants: Sequence['GetUsersUserDomainGrantArgsDict']
        """
        A set containing all of the user's active grants.
        """
        email: str
        """
        The email address for this User, for account management communications, and may be used for other communications as configured.
        """
        firewall_grants: Sequence['GetUsersUserFirewallGrantArgsDict']
        """
        A set containing all of the user's active grants.
        """
        global_grants: Sequence['GetUsersUserGlobalGrantArgsDict']
        """
        A structure containing the Account-level grants a User has.
        """
        id: str
        """
        The ID of entity this grant applies to.
        """
        image_grants: Sequence['GetUsersUserImageGrantArgsDict']
        """
        A set containing all of the user's active grants.
        """
        linode_grants: Sequence['GetUsersUserLinodeGrantArgsDict']
        """
        A set containing all of the user's active grants.
        """
        longview_grants: Sequence['GetUsersUserLongviewGrantArgsDict']
        """
        A set containing all of the user's active grants.
        """
        nodebalancer_grants: Sequence['GetUsersUserNodebalancerGrantArgsDict']
        """
        A set containing all of the user's active grants.
        """
        password_created: str
        """
        The date and time when this User’s current password was created. User passwords are first created during the Account sign-up process, and updated using the Reset Password webpage. null if this User has not created a password yet.
        """
        restricted: bool
        """
        If true, this User must be granted access to perform actions or access entities on this Account.
        """
        ssh_keys: Sequence[str]
        """
        A list of SSH Key labels added by this User. These are the keys that will be deployed if this User is included in the authorized_users field of a create Linode, rebuild Linode, or create Disk request.
        """
        stackscript_grants: Sequence['GetUsersUserStackscriptGrantArgsDict']
        """
        A set containing all of the user's active grants.
        """
        tfa_enabled: bool
        """
        A boolean value indicating if the User has Two Factor Authentication (TFA) enabled.
        """
        user_type: str
        """
        The type of this user.
        """
        username: str
        """
        This User's username. This is used for logging in, and may also be displayed alongside actions the User performs (for example, in Events or public StackScripts).
        """
        verified_phone_number: str
        """
        The phone number verified for this User Profile with the Phone Number Verify command. null if this User Profile has no verified phone number.
        """
        volume_grants: Sequence['GetUsersUserVolumeGrantArgsDict']
        """
        A set containing all of the user's active grants.
        """
elif False:
    GetUsersUserArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUsersUserArgs:
    def __init__(__self__, *,
                 database_grants: Sequence['GetUsersUserDatabaseGrantArgs'],
                 domain_grants: Sequence['GetUsersUserDomainGrantArgs'],
                 email: str,
                 firewall_grants: Sequence['GetUsersUserFirewallGrantArgs'],
                 global_grants: Sequence['GetUsersUserGlobalGrantArgs'],
                 id: str,
                 image_grants: Sequence['GetUsersUserImageGrantArgs'],
                 linode_grants: Sequence['GetUsersUserLinodeGrantArgs'],
                 longview_grants: Sequence['GetUsersUserLongviewGrantArgs'],
                 nodebalancer_grants: Sequence['GetUsersUserNodebalancerGrantArgs'],
                 password_created: str,
                 restricted: bool,
                 ssh_keys: Sequence[str],
                 stackscript_grants: Sequence['GetUsersUserStackscriptGrantArgs'],
                 tfa_enabled: bool,
                 user_type: str,
                 username: str,
                 verified_phone_number: str,
                 volume_grants: Sequence['GetUsersUserVolumeGrantArgs']):
        """
        :param Sequence['GetUsersUserDatabaseGrantArgs'] database_grants: A set containing all of the user's active grants.
        :param Sequence['GetUsersUserDomainGrantArgs'] domain_grants: A set containing all of the user's active grants.
        :param str email: The email address for this User, for account management communications, and may be used for other communications as configured.
        :param Sequence['GetUsersUserFirewallGrantArgs'] firewall_grants: A set containing all of the user's active grants.
        :param Sequence['GetUsersUserGlobalGrantArgs'] global_grants: A structure containing the Account-level grants a User has.
        :param str id: The ID of entity this grant applies to.
        :param Sequence['GetUsersUserImageGrantArgs'] image_grants: A set containing all of the user's active grants.
        :param Sequence['GetUsersUserLinodeGrantArgs'] linode_grants: A set containing all of the user's active grants.
        :param Sequence['GetUsersUserLongviewGrantArgs'] longview_grants: A set containing all of the user's active grants.
        :param Sequence['GetUsersUserNodebalancerGrantArgs'] nodebalancer_grants: A set containing all of the user's active grants.
        :param str password_created: The date and time when this User’s current password was created. User passwords are first created during the Account sign-up process, and updated using the Reset Password webpage. null if this User has not created a password yet.
        :param bool restricted: If true, this User must be granted access to perform actions or access entities on this Account.
        :param Sequence[str] ssh_keys: A list of SSH Key labels added by this User. These are the keys that will be deployed if this User is included in the authorized_users field of a create Linode, rebuild Linode, or create Disk request.
        :param Sequence['GetUsersUserStackscriptGrantArgs'] stackscript_grants: A set containing all of the user's active grants.
        :param bool tfa_enabled: A boolean value indicating if the User has Two Factor Authentication (TFA) enabled.
        :param str user_type: The type of this user.
        :param str username: This User's username. This is used for logging in, and may also be displayed alongside actions the User performs (for example, in Events or public StackScripts).
        :param str verified_phone_number: The phone number verified for this User Profile with the Phone Number Verify command. null if this User Profile has no verified phone number.
        :param Sequence['GetUsersUserVolumeGrantArgs'] volume_grants: A set containing all of the user's active grants.
        """
        pulumi.set(__self__, "database_grants", database_grants)
        pulumi.set(__self__, "domain_grants", domain_grants)
        pulumi.set(__self__, "email", email)
        pulumi.set(__self__, "firewall_grants", firewall_grants)
        pulumi.set(__self__, "global_grants", global_grants)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "image_grants", image_grants)
        pulumi.set(__self__, "linode_grants", linode_grants)
        pulumi.set(__self__, "longview_grants", longview_grants)
        pulumi.set(__self__, "nodebalancer_grants", nodebalancer_grants)
        pulumi.set(__self__, "password_created", password_created)
        pulumi.set(__self__, "restricted", restricted)
        pulumi.set(__self__, "ssh_keys", ssh_keys)
        pulumi.set(__self__, "stackscript_grants", stackscript_grants)
        pulumi.set(__self__, "tfa_enabled", tfa_enabled)
        pulumi.set(__self__, "user_type", user_type)
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "verified_phone_number", verified_phone_number)
        pulumi.set(__self__, "volume_grants", volume_grants)

    @property
    @pulumi.getter(name="databaseGrants")
    def database_grants(self) -> Sequence['GetUsersUserDatabaseGrantArgs']:
        """
        A set containing all of the user's active grants.
        """
        return pulumi.get(self, "database_grants")

    @database_grants.setter
    def database_grants(self, value: Sequence['GetUsersUserDatabaseGrantArgs']):
        pulumi.set(self, "database_grants", value)

    @property
    @pulumi.getter(name="domainGrants")
    def domain_grants(self) -> Sequence['GetUsersUserDomainGrantArgs']:
        """
        A set containing all of the user's active grants.
        """
        return pulumi.get(self, "domain_grants")

    @domain_grants.setter
    def domain_grants(self, value: Sequence['GetUsersUserDomainGrantArgs']):
        pulumi.set(self, "domain_grants", value)

    @property
    @pulumi.getter
    def email(self) -> str:
        """
        The email address for this User, for account management communications, and may be used for other communications as configured.
        """
        return pulumi.get(self, "email")

    @email.setter
    def email(self, value: str):
        pulumi.set(self, "email", value)

    @property
    @pulumi.getter(name="firewallGrants")
    def firewall_grants(self) -> Sequence['GetUsersUserFirewallGrantArgs']:
        """
        A set containing all of the user's active grants.
        """
        return pulumi.get(self, "firewall_grants")

    @firewall_grants.setter
    def firewall_grants(self, value: Sequence['GetUsersUserFirewallGrantArgs']):
        pulumi.set(self, "firewall_grants", value)

    @property
    @pulumi.getter(name="globalGrants")
    def global_grants(self) -> Sequence['GetUsersUserGlobalGrantArgs']:
        """
        A structure containing the Account-level grants a User has.
        """
        return pulumi.get(self, "global_grants")

    @global_grants.setter
    def global_grants(self, value: Sequence['GetUsersUserGlobalGrantArgs']):
        pulumi.set(self, "global_grants", value)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter(name="imageGrants")
    def image_grants(self) -> Sequence['GetUsersUserImageGrantArgs']:
        """
        A set containing all of the user's active grants.
        """
        return pulumi.get(self, "image_grants")

    @image_grants.setter
    def image_grants(self, value: Sequence['GetUsersUserImageGrantArgs']):
        pulumi.set(self, "image_grants", value)

    @property
    @pulumi.getter(name="linodeGrants")
    def linode_grants(self) -> Sequence['GetUsersUserLinodeGrantArgs']:
        """
        A set containing all of the user's active grants.
        """
        return pulumi.get(self, "linode_grants")

    @linode_grants.setter
    def linode_grants(self, value: Sequence['GetUsersUserLinodeGrantArgs']):
        pulumi.set(self, "linode_grants", value)

    @property
    @pulumi.getter(name="longviewGrants")
    def longview_grants(self) -> Sequence['GetUsersUserLongviewGrantArgs']:
        """
        A set containing all of the user's active grants.
        """
        return pulumi.get(self, "longview_grants")

    @longview_grants.setter
    def longview_grants(self, value: Sequence['GetUsersUserLongviewGrantArgs']):
        pulumi.set(self, "longview_grants", value)

    @property
    @pulumi.getter(name="nodebalancerGrants")
    def nodebalancer_grants(self) -> Sequence['GetUsersUserNodebalancerGrantArgs']:
        """
        A set containing all of the user's active grants.
        """
        return pulumi.get(self, "nodebalancer_grants")

    @nodebalancer_grants.setter
    def nodebalancer_grants(self, value: Sequence['GetUsersUserNodebalancerGrantArgs']):
        pulumi.set(self, "nodebalancer_grants", value)

    @property
    @pulumi.getter(name="passwordCreated")
    def password_created(self) -> str:
        """
        The date and time when this User’s current password was created. User passwords are first created during the Account sign-up process, and updated using the Reset Password webpage. null if this User has not created a password yet.
        """
        return pulumi.get(self, "password_created")

    @password_created.setter
    def password_created(self, value: str):
        pulumi.set(self, "password_created", value)

    @property
    @pulumi.getter
    def restricted(self) -> bool:
        """
        If true, this User must be granted access to perform actions or access entities on this Account.
        """
        return pulumi.get(self, "restricted")

    @restricted.setter
    def restricted(self, value: bool):
        pulumi.set(self, "restricted", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Sequence[str]:
        """
        A list of SSH Key labels added by this User. These are the keys that will be deployed if this User is included in the authorized_users field of a create Linode, rebuild Linode, or create Disk request.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Sequence[str]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="stackscriptGrants")
    def stackscript_grants(self) -> Sequence['GetUsersUserStackscriptGrantArgs']:
        """
        A set containing all of the user's active grants.
        """
        return pulumi.get(self, "stackscript_grants")

    @stackscript_grants.setter
    def stackscript_grants(self, value: Sequence['GetUsersUserStackscriptGrantArgs']):
        pulumi.set(self, "stackscript_grants", value)

    @property
    @pulumi.getter(name="tfaEnabled")
    def tfa_enabled(self) -> bool:
        """
        A boolean value indicating if the User has Two Factor Authentication (TFA) enabled.
        """
        return pulumi.get(self, "tfa_enabled")

    @tfa_enabled.setter
    def tfa_enabled(self, value: bool):
        pulumi.set(self, "tfa_enabled", value)

    @property
    @pulumi.getter(name="userType")
    def user_type(self) -> str:
        """
        The type of this user.
        """
        return pulumi.get(self, "user_type")

    @user_type.setter
    def user_type(self, value: str):
        pulumi.set(self, "user_type", value)

    @property
    @pulumi.getter
    def username(self) -> str:
        """
        This User's username. This is used for logging in, and may also be displayed alongside actions the User performs (for example, in Events or public StackScripts).
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: str):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="verifiedPhoneNumber")
    def verified_phone_number(self) -> str:
        """
        The phone number verified for this User Profile with the Phone Number Verify command. null if this User Profile has no verified phone number.
        """
        return pulumi.get(self, "verified_phone_number")

    @verified_phone_number.setter
    def verified_phone_number(self, value: str):
        pulumi.set(self, "verified_phone_number", value)

    @property
    @pulumi.getter(name="volumeGrants")
    def volume_grants(self) -> Sequence['GetUsersUserVolumeGrantArgs']:
        """
        A set containing all of the user's active grants.
        """
        return pulumi.get(self, "volume_grants")

    @volume_grants.setter
    def volume_grants(self, value: Sequence['GetUsersUserVolumeGrantArgs']):
        pulumi.set(self, "volume_grants", value)


if not MYPY:
    class GetUsersUserDatabaseGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
elif False:
    GetUsersUserDatabaseGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUsersUserDatabaseGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetUsersUserDomainGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
elif False:
    GetUsersUserDomainGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUsersUserDomainGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetUsersUserFirewallGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
elif False:
    GetUsersUserFirewallGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUsersUserFirewallGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetUsersUserGlobalGrantArgsDict(TypedDict):
        account_access: str
        """
        The level of access this User has to Account-level actions, like billing information. A restricted User will never be able to manage users. (`read_only`, `read_write`)
        """
        add_databases: bool
        """
        If true, this User may add Managed Databases.
        """
        add_domains: bool
        """
        If true, this User may add Domains.
        """
        add_firewalls: bool
        """
        If true, this User may add Firewalls.
        """
        add_images: bool
        """
        If true, this User may add Images.
        """
        add_linodes: bool
        """
        If true, this User may create Linodes.
        """
        add_longview: bool
        """
        If true, this User may create Longview clients and view the current plan.
        """
        add_nodebalancers: bool
        """
        If true, this User may add NodeBalancers.
        """
        add_stackscripts: bool
        add_volumes: bool
        """
        If true, this User may add Volumes.
        """
        cancel_account: bool
        """
        If true, this User may cancel the entire Account.
        """
        longview_subscription: bool
        """
        If true, this User may manage the Account’s Longview subscription.
        """
elif False:
    GetUsersUserGlobalGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUsersUserGlobalGrantArgs:
    def __init__(__self__, *,
                 account_access: str,
                 add_databases: bool,
                 add_domains: bool,
                 add_firewalls: bool,
                 add_images: bool,
                 add_linodes: bool,
                 add_longview: bool,
                 add_nodebalancers: bool,
                 add_stackscripts: bool,
                 add_volumes: bool,
                 cancel_account: bool,
                 longview_subscription: bool):
        """
        :param str account_access: The level of access this User has to Account-level actions, like billing information. A restricted User will never be able to manage users. (`read_only`, `read_write`)
        :param bool add_databases: If true, this User may add Managed Databases.
        :param bool add_domains: If true, this User may add Domains.
        :param bool add_firewalls: If true, this User may add Firewalls.
        :param bool add_images: If true, this User may add Images.
        :param bool add_linodes: If true, this User may create Linodes.
        :param bool add_longview: If true, this User may create Longview clients and view the current plan.
        :param bool add_nodebalancers: If true, this User may add NodeBalancers.
        :param bool add_volumes: If true, this User may add Volumes.
        :param bool cancel_account: If true, this User may cancel the entire Account.
        :param bool longview_subscription: If true, this User may manage the Account’s Longview subscription.
        """
        pulumi.set(__self__, "account_access", account_access)
        pulumi.set(__self__, "add_databases", add_databases)
        pulumi.set(__self__, "add_domains", add_domains)
        pulumi.set(__self__, "add_firewalls", add_firewalls)
        pulumi.set(__self__, "add_images", add_images)
        pulumi.set(__self__, "add_linodes", add_linodes)
        pulumi.set(__self__, "add_longview", add_longview)
        pulumi.set(__self__, "add_nodebalancers", add_nodebalancers)
        pulumi.set(__self__, "add_stackscripts", add_stackscripts)
        pulumi.set(__self__, "add_volumes", add_volumes)
        pulumi.set(__self__, "cancel_account", cancel_account)
        pulumi.set(__self__, "longview_subscription", longview_subscription)

    @property
    @pulumi.getter(name="accountAccess")
    def account_access(self) -> str:
        """
        The level of access this User has to Account-level actions, like billing information. A restricted User will never be able to manage users. (`read_only`, `read_write`)
        """
        return pulumi.get(self, "account_access")

    @account_access.setter
    def account_access(self, value: str):
        pulumi.set(self, "account_access", value)

    @property
    @pulumi.getter(name="addDatabases")
    def add_databases(self) -> bool:
        """
        If true, this User may add Managed Databases.
        """
        return pulumi.get(self, "add_databases")

    @add_databases.setter
    def add_databases(self, value: bool):
        pulumi.set(self, "add_databases", value)

    @property
    @pulumi.getter(name="addDomains")
    def add_domains(self) -> bool:
        """
        If true, this User may add Domains.
        """
        return pulumi.get(self, "add_domains")

    @add_domains.setter
    def add_domains(self, value: bool):
        pulumi.set(self, "add_domains", value)

    @property
    @pulumi.getter(name="addFirewalls")
    def add_firewalls(self) -> bool:
        """
        If true, this User may add Firewalls.
        """
        return pulumi.get(self, "add_firewalls")

    @add_firewalls.setter
    def add_firewalls(self, value: bool):
        pulumi.set(self, "add_firewalls", value)

    @property
    @pulumi.getter(name="addImages")
    def add_images(self) -> bool:
        """
        If true, this User may add Images.
        """
        return pulumi.get(self, "add_images")

    @add_images.setter
    def add_images(self, value: bool):
        pulumi.set(self, "add_images", value)

    @property
    @pulumi.getter(name="addLinodes")
    def add_linodes(self) -> bool:
        """
        If true, this User may create Linodes.
        """
        return pulumi.get(self, "add_linodes")

    @add_linodes.setter
    def add_linodes(self, value: bool):
        pulumi.set(self, "add_linodes", value)

    @property
    @pulumi.getter(name="addLongview")
    def add_longview(self) -> bool:
        """
        If true, this User may create Longview clients and view the current plan.
        """
        return pulumi.get(self, "add_longview")

    @add_longview.setter
    def add_longview(self, value: bool):
        pulumi.set(self, "add_longview", value)

    @property
    @pulumi.getter(name="addNodebalancers")
    def add_nodebalancers(self) -> bool:
        """
        If true, this User may add NodeBalancers.
        """
        return pulumi.get(self, "add_nodebalancers")

    @add_nodebalancers.setter
    def add_nodebalancers(self, value: bool):
        pulumi.set(self, "add_nodebalancers", value)

    @property
    @pulumi.getter(name="addStackscripts")
    def add_stackscripts(self) -> bool:
        return pulumi.get(self, "add_stackscripts")

    @add_stackscripts.setter
    def add_stackscripts(self, value: bool):
        pulumi.set(self, "add_stackscripts", value)

    @property
    @pulumi.getter(name="addVolumes")
    def add_volumes(self) -> bool:
        """
        If true, this User may add Volumes.
        """
        return pulumi.get(self, "add_volumes")

    @add_volumes.setter
    def add_volumes(self, value: bool):
        pulumi.set(self, "add_volumes", value)

    @property
    @pulumi.getter(name="cancelAccount")
    def cancel_account(self) -> bool:
        """
        If true, this User may cancel the entire Account.
        """
        return pulumi.get(self, "cancel_account")

    @cancel_account.setter
    def cancel_account(self, value: bool):
        pulumi.set(self, "cancel_account", value)

    @property
    @pulumi.getter(name="longviewSubscription")
    def longview_subscription(self) -> bool:
        """
        If true, this User may manage the Account’s Longview subscription.
        """
        return pulumi.get(self, "longview_subscription")

    @longview_subscription.setter
    def longview_subscription(self, value: bool):
        pulumi.set(self, "longview_subscription", value)


if not MYPY:
    class GetUsersUserImageGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
elif False:
    GetUsersUserImageGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUsersUserImageGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetUsersUserLinodeGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
elif False:
    GetUsersUserLinodeGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUsersUserLinodeGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetUsersUserLongviewGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
elif False:
    GetUsersUserLongviewGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUsersUserLongviewGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetUsersUserNodebalancerGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
elif False:
    GetUsersUserNodebalancerGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUsersUserNodebalancerGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetUsersUserStackscriptGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
elif False:
    GetUsersUserStackscriptGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUsersUserStackscriptGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetUsersUserVolumeGrantArgsDict(TypedDict):
        id: int
        """
        The ID of entity this grant applies to.
        """
        label: str
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        permissions: str
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
elif False:
    GetUsersUserVolumeGrantArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetUsersUserVolumeGrantArgs:
    def __init__(__self__, *,
                 id: int,
                 label: str,
                 permissions: str):
        """
        :param int id: The ID of entity this grant applies to.
        :param str label: The current label of the entity this grant applies to, for display purposes.
        :param str permissions: The level of access this User has to this entity. If null, this User has no access.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The ID of entity this grant applies to.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The current label of the entity this grant applies to, for display purposes.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The level of access this User has to this entity. If null, this User has no access.
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: str):
        pulumi.set(self, "permissions", value)


if not MYPY:
    class GetVlansFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetVlansFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetVlansFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetVlansVlanArgsDict(TypedDict):
        created: str
        """
        When the VLAN was created.
        """
        label: str
        """
        The unique label of the VLAN.
        """
        linodes: Sequence[int]
        """
        The running Linodes currently attached to the VLAN.
        """
        region: str
        """
        The region the VLAN is located in. See all regions [here](https://api.linode.com/v4/regions).
        """
elif False:
    GetVlansVlanArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetVlansVlanArgs:
    def __init__(__self__, *,
                 created: str,
                 label: str,
                 linodes: Sequence[int],
                 region: str):
        """
        :param str created: When the VLAN was created.
        :param str label: The unique label of the VLAN.
        :param Sequence[int] linodes: The running Linodes currently attached to the VLAN.
        :param str region: The region the VLAN is located in. See all regions [here](https://api.linode.com/v4/regions).
        """
        pulumi.set(__self__, "created", created)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "linodes", linodes)
        pulumi.set(__self__, "region", region)

    @property
    @pulumi.getter
    def created(self) -> str:
        """
        When the VLAN was created.
        """
        return pulumi.get(self, "created")

    @created.setter
    def created(self, value: str):
        pulumi.set(self, "created", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The unique label of the VLAN.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def linodes(self) -> Sequence[int]:
        """
        The running Linodes currently attached to the VLAN.
        """
        return pulumi.get(self, "linodes")

    @linodes.setter
    def linodes(self, value: Sequence[int]):
        pulumi.set(self, "linodes", value)

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The region the VLAN is located in. See all regions [here](https://api.linode.com/v4/regions).
        """
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: str):
        pulumi.set(self, "region", value)


if not MYPY:
    class GetVolumeTypesFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetVolumeTypesFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetVolumeTypesFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetVolumeTypesTypeArgsDict(TypedDict):
        id: str
        """
        The ID representing the Volume type.
        """
        label: str
        """
        The Volume type label is for display purposes only.
        """
        prices: Sequence['GetVolumeTypesTypePriceArgsDict']
        """
        Cost in US dollars, broken down into hourly and monthly charges.
        """
        region_prices: Sequence['GetVolumeTypesTypeRegionPriceArgsDict']
        """
        A list of region-specific prices for this Volume Type.
        """
        transfer: int
        """
        The monthly outbound transfer amount, in MB.
        """
elif False:
    GetVolumeTypesTypeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetVolumeTypesTypeArgs:
    def __init__(__self__, *,
                 id: str,
                 label: str,
                 prices: Sequence['GetVolumeTypesTypePriceArgs'],
                 region_prices: Sequence['GetVolumeTypesTypeRegionPriceArgs'],
                 transfer: int):
        """
        :param str id: The ID representing the Volume type.
        :param str label: The Volume type label is for display purposes only.
        :param Sequence['GetVolumeTypesTypePriceArgs'] prices: Cost in US dollars, broken down into hourly and monthly charges.
        :param Sequence['GetVolumeTypesTypeRegionPriceArgs'] region_prices: A list of region-specific prices for this Volume Type.
        :param int transfer: The monthly outbound transfer amount, in MB.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "prices", prices)
        pulumi.set(__self__, "region_prices", region_prices)
        pulumi.set(__self__, "transfer", transfer)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The ID representing the Volume type.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The Volume type label is for display purposes only.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def prices(self) -> Sequence['GetVolumeTypesTypePriceArgs']:
        """
        Cost in US dollars, broken down into hourly and monthly charges.
        """
        return pulumi.get(self, "prices")

    @prices.setter
    def prices(self, value: Sequence['GetVolumeTypesTypePriceArgs']):
        pulumi.set(self, "prices", value)

    @property
    @pulumi.getter(name="regionPrices")
    def region_prices(self) -> Sequence['GetVolumeTypesTypeRegionPriceArgs']:
        """
        A list of region-specific prices for this Volume Type.
        """
        return pulumi.get(self, "region_prices")

    @region_prices.setter
    def region_prices(self, value: Sequence['GetVolumeTypesTypeRegionPriceArgs']):
        pulumi.set(self, "region_prices", value)

    @property
    @pulumi.getter
    def transfer(self) -> int:
        """
        The monthly outbound transfer amount, in MB.
        """
        return pulumi.get(self, "transfer")

    @transfer.setter
    def transfer(self, value: int):
        pulumi.set(self, "transfer", value)


if not MYPY:
    class GetVolumeTypesTypePriceArgsDict(TypedDict):
        hourly: float
        """
        Cost (in US dollars) per hour.
        """
        monthly: float
        """
        Cost (in US dollars) per month.
        """
elif False:
    GetVolumeTypesTypePriceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetVolumeTypesTypePriceArgs:
    def __init__(__self__, *,
                 hourly: float,
                 monthly: float):
        """
        :param float hourly: Cost (in US dollars) per hour.
        :param float monthly: Cost (in US dollars) per month.
        """
        pulumi.set(__self__, "hourly", hourly)
        pulumi.set(__self__, "monthly", monthly)

    @property
    @pulumi.getter
    def hourly(self) -> float:
        """
        Cost (in US dollars) per hour.
        """
        return pulumi.get(self, "hourly")

    @hourly.setter
    def hourly(self, value: float):
        pulumi.set(self, "hourly", value)

    @property
    @pulumi.getter
    def monthly(self) -> float:
        """
        Cost (in US dollars) per month.
        """
        return pulumi.get(self, "monthly")

    @monthly.setter
    def monthly(self, value: float):
        pulumi.set(self, "monthly", value)


if not MYPY:
    class GetVolumeTypesTypeRegionPriceArgsDict(TypedDict):
        hourly: float
        id: str
        """
        The ID representing the Volume type.
        """
        monthly: float
elif False:
    GetVolumeTypesTypeRegionPriceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetVolumeTypesTypeRegionPriceArgs:
    def __init__(__self__, *,
                 hourly: float,
                 id: str,
                 monthly: float):
        """
        :param str id: The ID representing the Volume type.
        """
        pulumi.set(__self__, "hourly", hourly)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "monthly", monthly)

    @property
    @pulumi.getter
    def hourly(self) -> float:
        return pulumi.get(self, "hourly")

    @hourly.setter
    def hourly(self, value: float):
        pulumi.set(self, "hourly", value)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The ID representing the Volume type.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def monthly(self) -> float:
        return pulumi.get(self, "monthly")

    @monthly.setter
    def monthly(self, value: float):
        pulumi.set(self, "monthly", value)


if not MYPY:
    class GetVolumesFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetVolumesFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetVolumesFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetVolumesVolumeArgsDict(TypedDict):
        created: str
        """
        When this Volume was created.
        """
        encryption: str
        """
        Whether Block Storage Disk Encryption is enabled or disabled on this Volume. Note: Block Storage Disk Encryption is not currently available to all users.
        """
        filesystem_path: str
        """
        The full filesystem path for the Volume based on the Volume's label. Path is /dev/disk/by-id/scsi-0LinodeVolume + Volume label.
        """
        id: int
        """
        The unique ID of this Volume.
        """
        label: str
        """
        This Volume's label is for display purposes only.
        """
        linode_id: int
        """
        If a Volume is attached to a specific Linode, the ID of that Linode will be displayed here. If the Volume is unattached, this value will be null.
        """
        region: str
        """
        The datacenter in which this Volume is located. See all regions [here](https://api.linode.com/v4/regions).
        """
        size: int
        """
        The Volume's size, in GiB.
        """
        status: str
        """
        The current status of the Volume. (`creating`, `active`, `resizing`, `contact_support`)
        """
        tags: Sequence[str]
        """
        An array of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        """
        updated: str
        """
        When this Volume was last updated.
        """
elif False:
    GetVolumesVolumeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetVolumesVolumeArgs:
    def __init__(__self__, *,
                 created: str,
                 encryption: str,
                 filesystem_path: str,
                 id: int,
                 label: str,
                 linode_id: int,
                 region: str,
                 size: int,
                 status: str,
                 tags: Sequence[str],
                 updated: str):
        """
        :param str created: When this Volume was created.
        :param str encryption: Whether Block Storage Disk Encryption is enabled or disabled on this Volume. Note: Block Storage Disk Encryption is not currently available to all users.
        :param str filesystem_path: The full filesystem path for the Volume based on the Volume's label. Path is /dev/disk/by-id/scsi-0LinodeVolume + Volume label.
        :param int id: The unique ID of this Volume.
        :param str label: This Volume's label is for display purposes only.
        :param int linode_id: If a Volume is attached to a specific Linode, the ID of that Linode will be displayed here. If the Volume is unattached, this value will be null.
        :param str region: The datacenter in which this Volume is located. See all regions [here](https://api.linode.com/v4/regions).
        :param int size: The Volume's size, in GiB.
        :param str status: The current status of the Volume. (`creating`, `active`, `resizing`, `contact_support`)
        :param Sequence[str] tags: An array of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        :param str updated: When this Volume was last updated.
        """
        pulumi.set(__self__, "created", created)
        pulumi.set(__self__, "encryption", encryption)
        pulumi.set(__self__, "filesystem_path", filesystem_path)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "linode_id", linode_id)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "size", size)
        pulumi.set(__self__, "status", status)
        pulumi.set(__self__, "tags", tags)
        pulumi.set(__self__, "updated", updated)

    @property
    @pulumi.getter
    def created(self) -> str:
        """
        When this Volume was created.
        """
        return pulumi.get(self, "created")

    @created.setter
    def created(self, value: str):
        pulumi.set(self, "created", value)

    @property
    @pulumi.getter
    def encryption(self) -> str:
        """
        Whether Block Storage Disk Encryption is enabled or disabled on this Volume. Note: Block Storage Disk Encryption is not currently available to all users.
        """
        return pulumi.get(self, "encryption")

    @encryption.setter
    def encryption(self, value: str):
        pulumi.set(self, "encryption", value)

    @property
    @pulumi.getter(name="filesystemPath")
    def filesystem_path(self) -> str:
        """
        The full filesystem path for the Volume based on the Volume's label. Path is /dev/disk/by-id/scsi-0LinodeVolume + Volume label.
        """
        return pulumi.get(self, "filesystem_path")

    @filesystem_path.setter
    def filesystem_path(self, value: str):
        pulumi.set(self, "filesystem_path", value)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The unique ID of this Volume.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        This Volume's label is for display purposes only.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter(name="linodeId")
    def linode_id(self) -> int:
        """
        If a Volume is attached to a specific Linode, the ID of that Linode will be displayed here. If the Volume is unattached, this value will be null.
        """
        return pulumi.get(self, "linode_id")

    @linode_id.setter
    def linode_id(self, value: int):
        pulumi.set(self, "linode_id", value)

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The datacenter in which this Volume is located. See all regions [here](https://api.linode.com/v4/regions).
        """
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: str):
        pulumi.set(self, "region", value)

    @property
    @pulumi.getter
    def size(self) -> int:
        """
        The Volume's size, in GiB.
        """
        return pulumi.get(self, "size")

    @size.setter
    def size(self, value: int):
        pulumi.set(self, "size", value)

    @property
    @pulumi.getter
    def status(self) -> str:
        """
        The current status of the Volume. (`creating`, `active`, `resizing`, `contact_support`)
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: str):
        pulumi.set(self, "status", value)

    @property
    @pulumi.getter
    def tags(self) -> Sequence[str]:
        """
        An array of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.
        """
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Sequence[str]):
        pulumi.set(self, "tags", value)

    @property
    @pulumi.getter
    def updated(self) -> str:
        """
        When this Volume was last updated.
        """
        return pulumi.get(self, "updated")

    @updated.setter
    def updated(self, value: str):
        pulumi.set(self, "updated", value)


if not MYPY:
    class GetVpcIpsFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetVpcIpsFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetVpcIpsFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetVpcIpsVpcIpArgsDict(TypedDict):
        active: bool
        """
        True if the VPC interface is in use, meaning that the Linode was powered on using the config_id to which the interface belongs. Otherwise false.
        """
        address: str
        """
        An IPv4 address configured for this VPC interface. These follow the RFC 1918 private address format. Null if an address_range.
        """
        address_range: str
        """
        A range of IPv4 addresses configured for this VPC interface. Null if a single address.
        """
        config_id: int
        """
        The globally general entity identifier for the Linode configuration profile where the VPC is included.
        """
        gateway: str
        """
        The default gateway for the VPC subnet that the IP or IP range belongs to.
        """
        interface_id: int
        """
        The globally general API entity identifier for the Linode interface.
        """
        linode_id: int
        """
        The identifier for the Linode the VPC interface currently belongs to.
        """
        nat11: str
        """
        The public IP address used for NAT 1:1 with the VPC. This is empty if NAT 1:1 isn't used.
        """
        prefix: int
        """
        The number of bits set in the subnet mask.
        """
        region: str
        """
        The region of the VPC.
        """
        subnet_id: int
        """
        The id of the VPC Subnet for this interface.
        """
        subnet_mask: str
        """
        The mask that separates host bits from network bits for the address or address_range.
        """
        vpc_id: int
        """
        The id of the parent VPC for the list of VPC IPs.

        * `filter` - (Optional) A set of filters used to select Linode VPC IPs that meet certain requirements.
        """
elif False:
    GetVpcIpsVpcIpArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetVpcIpsVpcIpArgs:
    def __init__(__self__, *,
                 active: bool,
                 address: str,
                 address_range: str,
                 config_id: int,
                 gateway: str,
                 interface_id: int,
                 linode_id: int,
                 nat11: str,
                 prefix: int,
                 region: str,
                 subnet_id: int,
                 subnet_mask: str,
                 vpc_id: int):
        """
        :param bool active: True if the VPC interface is in use, meaning that the Linode was powered on using the config_id to which the interface belongs. Otherwise false.
        :param str address: An IPv4 address configured for this VPC interface. These follow the RFC 1918 private address format. Null if an address_range.
        :param str address_range: A range of IPv4 addresses configured for this VPC interface. Null if a single address.
        :param int config_id: The globally general entity identifier for the Linode configuration profile where the VPC is included.
        :param str gateway: The default gateway for the VPC subnet that the IP or IP range belongs to.
        :param int interface_id: The globally general API entity identifier for the Linode interface.
        :param int linode_id: The identifier for the Linode the VPC interface currently belongs to.
        :param str nat11: The public IP address used for NAT 1:1 with the VPC. This is empty if NAT 1:1 isn't used.
        :param int prefix: The number of bits set in the subnet mask.
        :param str region: The region of the VPC.
        :param int subnet_id: The id of the VPC Subnet for this interface.
        :param str subnet_mask: The mask that separates host bits from network bits for the address or address_range.
        :param int vpc_id: The id of the parent VPC for the list of VPC IPs.
               
               * `filter` - (Optional) A set of filters used to select Linode VPC IPs that meet certain requirements.
        """
        pulumi.set(__self__, "active", active)
        pulumi.set(__self__, "address", address)
        pulumi.set(__self__, "address_range", address_range)
        pulumi.set(__self__, "config_id", config_id)
        pulumi.set(__self__, "gateway", gateway)
        pulumi.set(__self__, "interface_id", interface_id)
        pulumi.set(__self__, "linode_id", linode_id)
        pulumi.set(__self__, "nat11", nat11)
        pulumi.set(__self__, "prefix", prefix)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "subnet_mask", subnet_mask)
        pulumi.set(__self__, "vpc_id", vpc_id)

    @property
    @pulumi.getter
    def active(self) -> bool:
        """
        True if the VPC interface is in use, meaning that the Linode was powered on using the config_id to which the interface belongs. Otherwise false.
        """
        return pulumi.get(self, "active")

    @active.setter
    def active(self, value: bool):
        pulumi.set(self, "active", value)

    @property
    @pulumi.getter
    def address(self) -> str:
        """
        An IPv4 address configured for this VPC interface. These follow the RFC 1918 private address format. Null if an address_range.
        """
        return pulumi.get(self, "address")

    @address.setter
    def address(self, value: str):
        pulumi.set(self, "address", value)

    @property
    @pulumi.getter(name="addressRange")
    def address_range(self) -> str:
        """
        A range of IPv4 addresses configured for this VPC interface. Null if a single address.
        """
        return pulumi.get(self, "address_range")

    @address_range.setter
    def address_range(self, value: str):
        pulumi.set(self, "address_range", value)

    @property
    @pulumi.getter(name="configId")
    def config_id(self) -> int:
        """
        The globally general entity identifier for the Linode configuration profile where the VPC is included.
        """
        return pulumi.get(self, "config_id")

    @config_id.setter
    def config_id(self, value: int):
        pulumi.set(self, "config_id", value)

    @property
    @pulumi.getter
    def gateway(self) -> str:
        """
        The default gateway for the VPC subnet that the IP or IP range belongs to.
        """
        return pulumi.get(self, "gateway")

    @gateway.setter
    def gateway(self, value: str):
        pulumi.set(self, "gateway", value)

    @property
    @pulumi.getter(name="interfaceId")
    def interface_id(self) -> int:
        """
        The globally general API entity identifier for the Linode interface.
        """
        return pulumi.get(self, "interface_id")

    @interface_id.setter
    def interface_id(self, value: int):
        pulumi.set(self, "interface_id", value)

    @property
    @pulumi.getter(name="linodeId")
    def linode_id(self) -> int:
        """
        The identifier for the Linode the VPC interface currently belongs to.
        """
        return pulumi.get(self, "linode_id")

    @linode_id.setter
    def linode_id(self, value: int):
        pulumi.set(self, "linode_id", value)

    @property
    @pulumi.getter
    def nat11(self) -> str:
        """
        The public IP address used for NAT 1:1 with the VPC. This is empty if NAT 1:1 isn't used.
        """
        return pulumi.get(self, "nat11")

    @nat11.setter
    def nat11(self, value: str):
        pulumi.set(self, "nat11", value)

    @property
    @pulumi.getter
    def prefix(self) -> int:
        """
        The number of bits set in the subnet mask.
        """
        return pulumi.get(self, "prefix")

    @prefix.setter
    def prefix(self, value: int):
        pulumi.set(self, "prefix", value)

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The region of the VPC.
        """
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: str):
        pulumi.set(self, "region", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> int:
        """
        The id of the VPC Subnet for this interface.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: int):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="subnetMask")
    def subnet_mask(self) -> str:
        """
        The mask that separates host bits from network bits for the address or address_range.
        """
        return pulumi.get(self, "subnet_mask")

    @subnet_mask.setter
    def subnet_mask(self, value: str):
        pulumi.set(self, "subnet_mask", value)

    @property
    @pulumi.getter(name="vpcId")
    def vpc_id(self) -> int:
        """
        The id of the parent VPC for the list of VPC IPs.

        * `filter` - (Optional) A set of filters used to select Linode VPC IPs that meet certain requirements.
        """
        return pulumi.get(self, "vpc_id")

    @vpc_id.setter
    def vpc_id(self, value: int):
        pulumi.set(self, "vpc_id", value)


if not MYPY:
    class GetVpcSubnetsFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetVpcSubnetsFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetVpcSubnetsFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetVpcSubnetsVpcSubnetArgsDict(TypedDict):
        created: str
        """
        The date and time when the VPC Subnet was created.
        """
        id: int
        """
        The unique id of the VPC subnet.
        """
        ipv4: str
        """
        The IPv4 range of this subnet in CIDR format.
        """
        label: str
        """
        The label of the VPC subnet.
        """
        linodes: Sequence['GetVpcSubnetsVpcSubnetLinodeArgsDict']
        """
        A list of Linode IDs that added to this subnet.
        """
        updated: str
        """
        The date and time when the VPC Subnet was last updated.
        """
elif False:
    GetVpcSubnetsVpcSubnetArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetVpcSubnetsVpcSubnetArgs:
    def __init__(__self__, *,
                 created: str,
                 id: int,
                 ipv4: str,
                 label: str,
                 linodes: Sequence['GetVpcSubnetsVpcSubnetLinodeArgs'],
                 updated: str):
        """
        :param str created: The date and time when the VPC Subnet was created.
        :param int id: The unique id of the VPC subnet.
        :param str ipv4: The IPv4 range of this subnet in CIDR format.
        :param str label: The label of the VPC subnet.
        :param Sequence['GetVpcSubnetsVpcSubnetLinodeArgs'] linodes: A list of Linode IDs that added to this subnet.
        :param str updated: The date and time when the VPC Subnet was last updated.
        """
        pulumi.set(__self__, "created", created)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ipv4", ipv4)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "linodes", linodes)
        pulumi.set(__self__, "updated", updated)

    @property
    @pulumi.getter
    def created(self) -> str:
        """
        The date and time when the VPC Subnet was created.
        """
        return pulumi.get(self, "created")

    @created.setter
    def created(self, value: str):
        pulumi.set(self, "created", value)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The unique id of the VPC subnet.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def ipv4(self) -> str:
        """
        The IPv4 range of this subnet in CIDR format.
        """
        return pulumi.get(self, "ipv4")

    @ipv4.setter
    def ipv4(self, value: str):
        pulumi.set(self, "ipv4", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The label of the VPC subnet.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def linodes(self) -> Sequence['GetVpcSubnetsVpcSubnetLinodeArgs']:
        """
        A list of Linode IDs that added to this subnet.
        """
        return pulumi.get(self, "linodes")

    @linodes.setter
    def linodes(self, value: Sequence['GetVpcSubnetsVpcSubnetLinodeArgs']):
        pulumi.set(self, "linodes", value)

    @property
    @pulumi.getter
    def updated(self) -> str:
        """
        The date and time when the VPC Subnet was last updated.
        """
        return pulumi.get(self, "updated")

    @updated.setter
    def updated(self, value: str):
        pulumi.set(self, "updated", value)


if not MYPY:
    class GetVpcSubnetsVpcSubnetLinodeArgsDict(TypedDict):
        id: int
        """
        The unique id of the VPC subnet.
        """
        interfaces: Sequence['GetVpcSubnetsVpcSubnetLinodeInterfaceArgsDict']
elif False:
    GetVpcSubnetsVpcSubnetLinodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetVpcSubnetsVpcSubnetLinodeArgs:
    def __init__(__self__, *,
                 id: int,
                 interfaces: Sequence['GetVpcSubnetsVpcSubnetLinodeInterfaceArgs']):
        """
        :param int id: The unique id of the VPC subnet.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "interfaces", interfaces)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The unique id of the VPC subnet.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def interfaces(self) -> Sequence['GetVpcSubnetsVpcSubnetLinodeInterfaceArgs']:
        return pulumi.get(self, "interfaces")

    @interfaces.setter
    def interfaces(self, value: Sequence['GetVpcSubnetsVpcSubnetLinodeInterfaceArgs']):
        pulumi.set(self, "interfaces", value)


if not MYPY:
    class GetVpcSubnetsVpcSubnetLinodeInterfaceArgsDict(TypedDict):
        active: bool
        id: int
        """
        The unique id of the VPC subnet.
        """
elif False:
    GetVpcSubnetsVpcSubnetLinodeInterfaceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetVpcSubnetsVpcSubnetLinodeInterfaceArgs:
    def __init__(__self__, *,
                 active: bool,
                 id: int):
        """
        :param int id: The unique id of the VPC subnet.
        """
        pulumi.set(__self__, "active", active)
        pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def active(self) -> bool:
        return pulumi.get(self, "active")

    @active.setter
    def active(self, value: bool):
        pulumi.set(self, "active", value)

    @property
    @pulumi.getter
    def id(self) -> int:
        """
        The unique id of the VPC subnet.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: int):
        pulumi.set(self, "id", value)


if not MYPY:
    class GetVpcsFilterArgsDict(TypedDict):
        name: str
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        values: Sequence[str]
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        match_by: NotRequired[str]
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
elif False:
    GetVpcsFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetVpcsFilterArgs:
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 match_by: Optional[str] = None):
        """
        :param str name: The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        :param Sequence[str] values: A list of values for the filter to allow. These values should all be in string form.
        :param str match_by: The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if match_by is not None:
            pulumi.set(__self__, "match_by", match_by)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the field to filter by. See the Filterable Fields section for a complete list of filterable fields.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: str):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        A list of values for the filter to allow. These values should all be in string form.
        """
        return pulumi.get(self, "values")

    @values.setter
    def values(self, value: Sequence[str]):
        pulumi.set(self, "values", value)

    @property
    @pulumi.getter(name="matchBy")
    def match_by(self) -> Optional[str]:
        """
        The method to match the field by. (`exact`, `regex`, `substring`; default `exact`)
        """
        return pulumi.get(self, "match_by")

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


if not MYPY:
    class GetVpcsVpcArgsDict(TypedDict):
        created: str
        """
        The date and time when the VPC was created.
        """
        description: str
        """
        The user-defined description of this VPC.
        """
        id: str
        """
        The unique id of this VPC.
        """
        label: str
        """
        The label of the VPC.
        """
        region: str
        """
        The region where the VPC is deployed.
        """
        updated: str
        """
        The date and time when the VPC was last updated.
        """
elif False:
    GetVpcsVpcArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GetVpcsVpcArgs:
    def __init__(__self__, *,
                 created: str,
                 description: str,
                 id: str,
                 label: str,
                 region: str,
                 updated: str):
        """
        :param str created: The date and time when the VPC was created.
        :param str description: The user-defined description of this VPC.
        :param str id: The unique id of this VPC.
        :param str label: The label of the VPC.
        :param str region: The region where the VPC is deployed.
        :param str updated: The date and time when the VPC was last updated.
        """
        pulumi.set(__self__, "created", created)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "label", label)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "updated", updated)

    @property
    @pulumi.getter
    def created(self) -> str:
        """
        The date and time when the VPC was created.
        """
        return pulumi.get(self, "created")

    @created.setter
    def created(self, value: str):
        pulumi.set(self, "created", value)

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        The user-defined description of this VPC.
        """
        return pulumi.get(self, "description")

    @description.setter
    def description(self, value: str):
        pulumi.set(self, "description", value)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The unique id of this VPC.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: str):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def label(self) -> str:
        """
        The label of the VPC.
        """
        return pulumi.get(self, "label")

    @label.setter
    def label(self, value: str):
        pulumi.set(self, "label", value)

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The region where the VPC is deployed.
        """
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: str):
        pulumi.set(self, "region", value)

    @property
    @pulumi.getter
    def updated(self) -> str:
        """
        The date and time when the VPC was last updated.
        """
        return pulumi.get(self, "updated")

    @updated.setter
    def updated(self, value: str):
        pulumi.set(self, "updated", value)


