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

__all__ = ['StatefulNodeAzureArgs', 'StatefulNodeAzure']

@pulumi.input_type
class StatefulNodeAzureArgs:
    def __init__(__self__, *,
                 os: pulumi.Input[str],
                 region: pulumi.Input[str],
                 resource_group_name: pulumi.Input[str],
                 should_persist_data_disks: pulumi.Input[bool],
                 should_persist_network: pulumi.Input[bool],
                 should_persist_os_disk: pulumi.Input[bool],
                 strategy: pulumi.Input['StatefulNodeAzureStrategyArgs'],
                 vm_sizes: pulumi.Input['StatefulNodeAzureVmSizesArgs'],
                 attach_data_disks: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureAttachDataDiskArgs']]]] = None,
                 boot_diagnostics: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureBootDiagnosticArgs']]]] = None,
                 custom_data: Optional[pulumi.Input[str]] = None,
                 data_disks: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureDataDiskArgs']]]] = None,
                 data_disks_persistence_mode: Optional[pulumi.Input[str]] = None,
                 deletes: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureDeleteArgs']]]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 detach_data_disks: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureDetachDataDiskArgs']]]] = None,
                 extensions: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureExtensionArgs']]]] = None,
                 health: Optional[pulumi.Input['StatefulNodeAzureHealthArgs']] = None,
                 image: Optional[pulumi.Input['StatefulNodeAzureImageArgs']] = None,
                 import_vms: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureImportVmArgs']]]] = None,
                 license_type: Optional[pulumi.Input[str]] = None,
                 load_balancers: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureLoadBalancerArgs']]]] = None,
                 login: Optional[pulumi.Input['StatefulNodeAzureLoginArgs']] = None,
                 managed_service_identities: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureManagedServiceIdentityArgs']]]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 network: Optional[pulumi.Input['StatefulNodeAzureNetworkArgs']] = None,
                 os_disk: Optional[pulumi.Input['StatefulNodeAzureOsDiskArgs']] = None,
                 os_disk_persistence_mode: Optional[pulumi.Input[str]] = None,
                 preferred_zone: Optional[pulumi.Input[str]] = None,
                 proximity_placement_groups: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureProximityPlacementGroupArgs']]]] = None,
                 scheduling_tasks: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureSchedulingTaskArgs']]]] = None,
                 secrets: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureSecretArgs']]]] = None,
                 security: Optional[pulumi.Input['StatefulNodeAzureSecurityArgs']] = None,
                 should_persist_vm: Optional[pulumi.Input[bool]] = None,
                 shutdown_script: Optional[pulumi.Input[str]] = None,
                 signals: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureSignalArgs']]]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureTagArgs']]]] = None,
                 update_states: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureUpdateStateArgs']]]] = None,
                 user_data: Optional[pulumi.Input[str]] = None,
                 vm_name: Optional[pulumi.Input[str]] = None,
                 vm_name_prefix: Optional[pulumi.Input[str]] = None,
                 zones: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        The set of arguments for constructing a StatefulNodeAzure resource.
        """
        pulumi.set(__self__, "os", os)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "resource_group_name", resource_group_name)
        pulumi.set(__self__, "should_persist_data_disks", should_persist_data_disks)
        pulumi.set(__self__, "should_persist_network", should_persist_network)
        pulumi.set(__self__, "should_persist_os_disk", should_persist_os_disk)
        pulumi.set(__self__, "strategy", strategy)
        pulumi.set(__self__, "vm_sizes", vm_sizes)
        if attach_data_disks is not None:
            pulumi.set(__self__, "attach_data_disks", attach_data_disks)
        if boot_diagnostics is not None:
            pulumi.set(__self__, "boot_diagnostics", boot_diagnostics)
        if custom_data is not None:
            pulumi.set(__self__, "custom_data", custom_data)
        if data_disks is not None:
            pulumi.set(__self__, "data_disks", data_disks)
        if data_disks_persistence_mode is not None:
            pulumi.set(__self__, "data_disks_persistence_mode", data_disks_persistence_mode)
        if deletes is not None:
            pulumi.set(__self__, "deletes", deletes)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if detach_data_disks is not None:
            pulumi.set(__self__, "detach_data_disks", detach_data_disks)
        if extensions is not None:
            pulumi.set(__self__, "extensions", extensions)
        if health is not None:
            pulumi.set(__self__, "health", health)
        if image is not None:
            pulumi.set(__self__, "image", image)
        if import_vms is not None:
            pulumi.set(__self__, "import_vms", import_vms)
        if license_type is not None:
            pulumi.set(__self__, "license_type", license_type)
        if load_balancers is not None:
            pulumi.set(__self__, "load_balancers", load_balancers)
        if login is not None:
            pulumi.set(__self__, "login", login)
        if managed_service_identities is not None:
            pulumi.set(__self__, "managed_service_identities", managed_service_identities)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if network is not None:
            pulumi.set(__self__, "network", network)
        if os_disk is not None:
            pulumi.set(__self__, "os_disk", os_disk)
        if os_disk_persistence_mode is not None:
            pulumi.set(__self__, "os_disk_persistence_mode", os_disk_persistence_mode)
        if preferred_zone is not None:
            pulumi.set(__self__, "preferred_zone", preferred_zone)
        if proximity_placement_groups is not None:
            pulumi.set(__self__, "proximity_placement_groups", proximity_placement_groups)
        if scheduling_tasks is not None:
            pulumi.set(__self__, "scheduling_tasks", scheduling_tasks)
        if secrets is not None:
            pulumi.set(__self__, "secrets", secrets)
        if security is not None:
            pulumi.set(__self__, "security", security)
        if should_persist_vm is not None:
            pulumi.set(__self__, "should_persist_vm", should_persist_vm)
        if shutdown_script is not None:
            pulumi.set(__self__, "shutdown_script", shutdown_script)
        if signals is not None:
            pulumi.set(__self__, "signals", signals)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if update_states is not None:
            pulumi.set(__self__, "update_states", update_states)
        if user_data is not None:
            pulumi.set(__self__, "user_data", user_data)
        if vm_name is not None:
            pulumi.set(__self__, "vm_name", vm_name)
        if vm_name_prefix is not None:
            pulumi.set(__self__, "vm_name_prefix", vm_name_prefix)
        if zones is not None:
            pulumi.set(__self__, "zones", zones)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="vmSizes")
    def vm_sizes(self) -> pulumi.Input['StatefulNodeAzureVmSizesArgs']:
        return pulumi.get(self, "vm_sizes")

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

    @property
    @pulumi.getter(name="attachDataDisks")
    def attach_data_disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureAttachDataDiskArgs']]]]:
        return pulumi.get(self, "attach_data_disks")

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

    @property
    @pulumi.getter(name="bootDiagnostics")
    def boot_diagnostics(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureBootDiagnosticArgs']]]]:
        return pulumi.get(self, "boot_diagnostics")

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

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

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

    @property
    @pulumi.getter(name="dataDisks")
    def data_disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureDataDiskArgs']]]]:
        return pulumi.get(self, "data_disks")

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="detachDataDisks")
    def detach_data_disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureDetachDataDiskArgs']]]]:
        return pulumi.get(self, "detach_data_disks")

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="importVms")
    def import_vms(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureImportVmArgs']]]]:
        return pulumi.get(self, "import_vms")

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

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

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

    @property
    @pulumi.getter(name="loadBalancers")
    def load_balancers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureLoadBalancerArgs']]]]:
        return pulumi.get(self, "load_balancers")

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

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

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

    @property
    @pulumi.getter(name="managedServiceIdentities")
    def managed_service_identities(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureManagedServiceIdentityArgs']]]]:
        return pulumi.get(self, "managed_service_identities")

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

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

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

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

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

    @property
    @pulumi.getter(name="osDisk")
    def os_disk(self) -> Optional[pulumi.Input['StatefulNodeAzureOsDiskArgs']]:
        return pulumi.get(self, "os_disk")

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

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

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

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

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

    @property
    @pulumi.getter(name="proximityPlacementGroups")
    def proximity_placement_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureProximityPlacementGroupArgs']]]]:
        return pulumi.get(self, "proximity_placement_groups")

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

    @property
    @pulumi.getter(name="schedulingTasks")
    def scheduling_tasks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureSchedulingTaskArgs']]]]:
        return pulumi.get(self, "scheduling_tasks")

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

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

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

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

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

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="updateStates")
    def update_states(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureUpdateStateArgs']]]]:
        return pulumi.get(self, "update_states")

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class _StatefulNodeAzureState:
    def __init__(__self__, *,
                 attach_data_disks: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureAttachDataDiskArgs']]]] = None,
                 boot_diagnostics: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureBootDiagnosticArgs']]]] = None,
                 custom_data: Optional[pulumi.Input[str]] = None,
                 data_disks: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureDataDiskArgs']]]] = None,
                 data_disks_persistence_mode: Optional[pulumi.Input[str]] = None,
                 deletes: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureDeleteArgs']]]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 detach_data_disks: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureDetachDataDiskArgs']]]] = None,
                 extensions: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureExtensionArgs']]]] = None,
                 health: Optional[pulumi.Input['StatefulNodeAzureHealthArgs']] = None,
                 image: Optional[pulumi.Input['StatefulNodeAzureImageArgs']] = None,
                 import_vms: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureImportVmArgs']]]] = None,
                 license_type: Optional[pulumi.Input[str]] = None,
                 load_balancers: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureLoadBalancerArgs']]]] = None,
                 login: Optional[pulumi.Input['StatefulNodeAzureLoginArgs']] = None,
                 managed_service_identities: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureManagedServiceIdentityArgs']]]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 network: Optional[pulumi.Input['StatefulNodeAzureNetworkArgs']] = None,
                 os: Optional[pulumi.Input[str]] = None,
                 os_disk: Optional[pulumi.Input['StatefulNodeAzureOsDiskArgs']] = None,
                 os_disk_persistence_mode: Optional[pulumi.Input[str]] = None,
                 preferred_zone: Optional[pulumi.Input[str]] = None,
                 proximity_placement_groups: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureProximityPlacementGroupArgs']]]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 resource_group_name: Optional[pulumi.Input[str]] = None,
                 scheduling_tasks: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureSchedulingTaskArgs']]]] = None,
                 secrets: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureSecretArgs']]]] = None,
                 security: Optional[pulumi.Input['StatefulNodeAzureSecurityArgs']] = None,
                 should_persist_data_disks: Optional[pulumi.Input[bool]] = None,
                 should_persist_network: Optional[pulumi.Input[bool]] = None,
                 should_persist_os_disk: Optional[pulumi.Input[bool]] = None,
                 should_persist_vm: Optional[pulumi.Input[bool]] = None,
                 shutdown_script: Optional[pulumi.Input[str]] = None,
                 signals: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureSignalArgs']]]] = None,
                 strategy: Optional[pulumi.Input['StatefulNodeAzureStrategyArgs']] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureTagArgs']]]] = None,
                 update_states: Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureUpdateStateArgs']]]] = None,
                 user_data: Optional[pulumi.Input[str]] = None,
                 vm_name: Optional[pulumi.Input[str]] = None,
                 vm_name_prefix: Optional[pulumi.Input[str]] = None,
                 vm_sizes: Optional[pulumi.Input['StatefulNodeAzureVmSizesArgs']] = None,
                 zones: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        Input properties used for looking up and filtering StatefulNodeAzure resources.
        """
        if attach_data_disks is not None:
            pulumi.set(__self__, "attach_data_disks", attach_data_disks)
        if boot_diagnostics is not None:
            pulumi.set(__self__, "boot_diagnostics", boot_diagnostics)
        if custom_data is not None:
            pulumi.set(__self__, "custom_data", custom_data)
        if data_disks is not None:
            pulumi.set(__self__, "data_disks", data_disks)
        if data_disks_persistence_mode is not None:
            pulumi.set(__self__, "data_disks_persistence_mode", data_disks_persistence_mode)
        if deletes is not None:
            pulumi.set(__self__, "deletes", deletes)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if detach_data_disks is not None:
            pulumi.set(__self__, "detach_data_disks", detach_data_disks)
        if extensions is not None:
            pulumi.set(__self__, "extensions", extensions)
        if health is not None:
            pulumi.set(__self__, "health", health)
        if image is not None:
            pulumi.set(__self__, "image", image)
        if import_vms is not None:
            pulumi.set(__self__, "import_vms", import_vms)
        if license_type is not None:
            pulumi.set(__self__, "license_type", license_type)
        if load_balancers is not None:
            pulumi.set(__self__, "load_balancers", load_balancers)
        if login is not None:
            pulumi.set(__self__, "login", login)
        if managed_service_identities is not None:
            pulumi.set(__self__, "managed_service_identities", managed_service_identities)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if network is not None:
            pulumi.set(__self__, "network", network)
        if os is not None:
            pulumi.set(__self__, "os", os)
        if os_disk is not None:
            pulumi.set(__self__, "os_disk", os_disk)
        if os_disk_persistence_mode is not None:
            pulumi.set(__self__, "os_disk_persistence_mode", os_disk_persistence_mode)
        if preferred_zone is not None:
            pulumi.set(__self__, "preferred_zone", preferred_zone)
        if proximity_placement_groups is not None:
            pulumi.set(__self__, "proximity_placement_groups", proximity_placement_groups)
        if region is not None:
            pulumi.set(__self__, "region", region)
        if resource_group_name is not None:
            pulumi.set(__self__, "resource_group_name", resource_group_name)
        if scheduling_tasks is not None:
            pulumi.set(__self__, "scheduling_tasks", scheduling_tasks)
        if secrets is not None:
            pulumi.set(__self__, "secrets", secrets)
        if security is not None:
            pulumi.set(__self__, "security", security)
        if should_persist_data_disks is not None:
            pulumi.set(__self__, "should_persist_data_disks", should_persist_data_disks)
        if should_persist_network is not None:
            pulumi.set(__self__, "should_persist_network", should_persist_network)
        if should_persist_os_disk is not None:
            pulumi.set(__self__, "should_persist_os_disk", should_persist_os_disk)
        if should_persist_vm is not None:
            pulumi.set(__self__, "should_persist_vm", should_persist_vm)
        if shutdown_script is not None:
            pulumi.set(__self__, "shutdown_script", shutdown_script)
        if signals is not None:
            pulumi.set(__self__, "signals", signals)
        if strategy is not None:
            pulumi.set(__self__, "strategy", strategy)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if update_states is not None:
            pulumi.set(__self__, "update_states", update_states)
        if user_data is not None:
            pulumi.set(__self__, "user_data", user_data)
        if vm_name is not None:
            pulumi.set(__self__, "vm_name", vm_name)
        if vm_name_prefix is not None:
            pulumi.set(__self__, "vm_name_prefix", vm_name_prefix)
        if vm_sizes is not None:
            pulumi.set(__self__, "vm_sizes", vm_sizes)
        if zones is not None:
            pulumi.set(__self__, "zones", zones)

    @property
    @pulumi.getter(name="attachDataDisks")
    def attach_data_disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureAttachDataDiskArgs']]]]:
        return pulumi.get(self, "attach_data_disks")

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

    @property
    @pulumi.getter(name="bootDiagnostics")
    def boot_diagnostics(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureBootDiagnosticArgs']]]]:
        return pulumi.get(self, "boot_diagnostics")

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

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

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

    @property
    @pulumi.getter(name="dataDisks")
    def data_disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureDataDiskArgs']]]]:
        return pulumi.get(self, "data_disks")

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="detachDataDisks")
    def detach_data_disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureDetachDataDiskArgs']]]]:
        return pulumi.get(self, "detach_data_disks")

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="importVms")
    def import_vms(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureImportVmArgs']]]]:
        return pulumi.get(self, "import_vms")

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

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

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

    @property
    @pulumi.getter(name="loadBalancers")
    def load_balancers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureLoadBalancerArgs']]]]:
        return pulumi.get(self, "load_balancers")

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

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

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

    @property
    @pulumi.getter(name="managedServiceIdentities")
    def managed_service_identities(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureManagedServiceIdentityArgs']]]]:
        return pulumi.get(self, "managed_service_identities")

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="osDisk")
    def os_disk(self) -> Optional[pulumi.Input['StatefulNodeAzureOsDiskArgs']]:
        return pulumi.get(self, "os_disk")

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

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

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

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

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

    @property
    @pulumi.getter(name="proximityPlacementGroups")
    def proximity_placement_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureProximityPlacementGroupArgs']]]]:
        return pulumi.get(self, "proximity_placement_groups")

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

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

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

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

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

    @property
    @pulumi.getter(name="schedulingTasks")
    def scheduling_tasks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureSchedulingTaskArgs']]]]:
        return pulumi.get(self, "scheduling_tasks")

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="updateStates")
    def update_states(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['StatefulNodeAzureUpdateStateArgs']]]]:
        return pulumi.get(self, "update_states")

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="vmSizes")
    def vm_sizes(self) -> Optional[pulumi.Input['StatefulNodeAzureVmSizesArgs']]:
        return pulumi.get(self, "vm_sizes")

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

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

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


class StatefulNodeAzure(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 attach_data_disks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureAttachDataDiskArgs', 'StatefulNodeAzureAttachDataDiskArgsDict']]]]] = None,
                 boot_diagnostics: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureBootDiagnosticArgs', 'StatefulNodeAzureBootDiagnosticArgsDict']]]]] = None,
                 custom_data: Optional[pulumi.Input[str]] = None,
                 data_disks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureDataDiskArgs', 'StatefulNodeAzureDataDiskArgsDict']]]]] = None,
                 data_disks_persistence_mode: Optional[pulumi.Input[str]] = None,
                 deletes: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureDeleteArgs', 'StatefulNodeAzureDeleteArgsDict']]]]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 detach_data_disks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureDetachDataDiskArgs', 'StatefulNodeAzureDetachDataDiskArgsDict']]]]] = None,
                 extensions: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureExtensionArgs', 'StatefulNodeAzureExtensionArgsDict']]]]] = None,
                 health: Optional[pulumi.Input[Union['StatefulNodeAzureHealthArgs', 'StatefulNodeAzureHealthArgsDict']]] = None,
                 image: Optional[pulumi.Input[Union['StatefulNodeAzureImageArgs', 'StatefulNodeAzureImageArgsDict']]] = None,
                 import_vms: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureImportVmArgs', 'StatefulNodeAzureImportVmArgsDict']]]]] = None,
                 license_type: Optional[pulumi.Input[str]] = None,
                 load_balancers: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureLoadBalancerArgs', 'StatefulNodeAzureLoadBalancerArgsDict']]]]] = None,
                 login: Optional[pulumi.Input[Union['StatefulNodeAzureLoginArgs', 'StatefulNodeAzureLoginArgsDict']]] = None,
                 managed_service_identities: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureManagedServiceIdentityArgs', 'StatefulNodeAzureManagedServiceIdentityArgsDict']]]]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 network: Optional[pulumi.Input[Union['StatefulNodeAzureNetworkArgs', 'StatefulNodeAzureNetworkArgsDict']]] = None,
                 os: Optional[pulumi.Input[str]] = None,
                 os_disk: Optional[pulumi.Input[Union['StatefulNodeAzureOsDiskArgs', 'StatefulNodeAzureOsDiskArgsDict']]] = None,
                 os_disk_persistence_mode: Optional[pulumi.Input[str]] = None,
                 preferred_zone: Optional[pulumi.Input[str]] = None,
                 proximity_placement_groups: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureProximityPlacementGroupArgs', 'StatefulNodeAzureProximityPlacementGroupArgsDict']]]]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 resource_group_name: Optional[pulumi.Input[str]] = None,
                 scheduling_tasks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureSchedulingTaskArgs', 'StatefulNodeAzureSchedulingTaskArgsDict']]]]] = None,
                 secrets: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureSecretArgs', 'StatefulNodeAzureSecretArgsDict']]]]] = None,
                 security: Optional[pulumi.Input[Union['StatefulNodeAzureSecurityArgs', 'StatefulNodeAzureSecurityArgsDict']]] = None,
                 should_persist_data_disks: Optional[pulumi.Input[bool]] = None,
                 should_persist_network: Optional[pulumi.Input[bool]] = None,
                 should_persist_os_disk: Optional[pulumi.Input[bool]] = None,
                 should_persist_vm: Optional[pulumi.Input[bool]] = None,
                 shutdown_script: Optional[pulumi.Input[str]] = None,
                 signals: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureSignalArgs', 'StatefulNodeAzureSignalArgsDict']]]]] = None,
                 strategy: Optional[pulumi.Input[Union['StatefulNodeAzureStrategyArgs', 'StatefulNodeAzureStrategyArgsDict']]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureTagArgs', 'StatefulNodeAzureTagArgsDict']]]]] = None,
                 update_states: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureUpdateStateArgs', 'StatefulNodeAzureUpdateStateArgsDict']]]]] = None,
                 user_data: Optional[pulumi.Input[str]] = None,
                 vm_name: Optional[pulumi.Input[str]] = None,
                 vm_name_prefix: Optional[pulumi.Input[str]] = None,
                 vm_sizes: Optional[pulumi.Input[Union['StatefulNodeAzureVmSizesArgs', 'StatefulNodeAzureVmSizesArgsDict']]] = None,
                 zones: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 __props__=None):
        """
        Provides a Spotinst stateful node Azure resource.

        ## Example Usage

        ```python
        import pulumi
        import pulumi_spotinst as spotinst

        test_stateful_node_azure = spotinst.StatefulNodeAzure("test_stateful_node_azure",
            name="example_stateful_node_azure",
            region="eastus",
            resource_group_name="spotinst-azure",
            description="example_stateful_node_azure_description",
            strategy={
                "draining_timeout": 30,
                "fallback_to_on_demand": True,
                "optimization_windows": ["Tue:19:46-Tue:20:46"],
                "od_windows": ["Wed:19:46-Wed:21:46"],
                "availability_vs_cost": 100,
                "vm_admins": [
                    "UbuntuUser",
                    "TestUser",
                ],
                "revert_to_spot": {
                    "perform_at": "timeWindow",
                },
                "preferred_life_cycle": "od",
                "capacity_reservations": [{
                    "should_utilize": True,
                    "utilization_strategy": "utilizeOverOD",
                    "capacity_reservation_groups": [{
                        "crg_name": "crg name",
                        "crg_resource_group_name": "resourceGroupName",
                        "crg_should_prioritize": True,
                    }],
                }],
            },
            os="Linux",
            vm_sizes={
                "od_sizes": [
                    "standard_ds1_v2",
                    "standard_ds2_v2",
                ],
                "spot_sizes": [
                    "standard_ds1_v2",
                    "standard_ds2_v2",
                ],
                "preferred_spot_sizes": ["standard_ds1_v2"],
                "excluded_vm_sizes": ["standard_ds2_v3"],
                "spot_size_attributes": {
                    "max_cpu": 16,
                    "min_cpu": 2,
                    "max_memory": 48,
                    "min_memory": 2,
                    "max_storage": 1000,
                    "min_storage": 50,
                },
            },
            zones=[
                "1",
                "3",
            ],
            preferred_zone="1",
            custom_data="",
            shutdown_script="",
            user_data="",
            vm_name="VMName",
            vm_name_prefix="VMNamePrefix",
            license_type="SLES_BYOS",
            boot_diagnostics=[{
                "is_enabled": True,
                "storage_url": "https://.blob.core.windows.net/test",
                "type": "unmanaged",
            }],
            data_disks=[
                {
                    "size_gb": 1,
                    "lun": 1,
                    "type": "Standard_LRS",
                },
                {
                    "size_gb": 10,
                    "lun": 2,
                    "type": "Standard_LRS",
                },
            ],
            extensions=[{
                "name": "extensionName",
                "type": "customScript",
                "publisher": "Microsoft.Azure.Extensions",
                "api_version": "2.0",
                "minor_version_auto_upgrade": True,
                "protected_settings": {
                    "script": "IyEvYmluL2Jhc2gKZWNobyAibmlyIiA+IC9ob29uaXIudHh0Cg==",
                },
                "public_settings": {
                    "fileUris": "https://testspot/Azuretest.sh",
                },
            }],
            image={
                "marketplace_images": [{
                    "publisher": "Canonical",
                    "offer": "UbuntuServer",
                    "sku": "16.04-LTS",
                    "version": "latest",
                }],
                "custom_images": [{
                    "custom_image_resource_group_name": "resourceGroupName",
                    "name": "imageName",
                }],
                "galleries": [{
                    "gallery_resource_group_name": "resourceGroupName",
                    "gallery_name": "galleryName",
                    "image_name": "imageName",
                    "version_name": "1.1.0",
                    "spot_account_id": "act-123456",
                }],
            },
            load_balancers=[{
                "type": "loadBalancer",
                "resource_group_name": "testResourceGroup",
                "name": "testLoadBalancer",
                "sku": "Standard",
                "backend_pool_names": [
                    "testBackendPool1",
                    "testBackendPool2",
                ],
            }],
            login={
                "user_name": "admin",
                "ssh_public_key": "33a2s1f3g5a1df5g1ad3f2g1adfg56dfg==",
            },
            managed_service_identities=[{
                "name": "mySI2",
                "resource_group_name": "myResourceGroup",
            }],
            network={
                "network_resource_group_name": "subnetResourceGroup",
                "virtual_network_name": "vname",
                "network_interfaces": [{
                    "is_primary": True,
                    "subnet_name": "testSubnet",
                    "assign_public_ip": True,
                    "public_ip_sku": "Standard",
                    "network_security_groups": [{
                        "network_resource_group_name": "test",
                        "name": "test",
                    }],
                    "enable_ip_forwarding": True,
                    "private_ip_addresses": ["172.23.4.20"],
                    "additional_ip_configurations": [{
                        "name": "test",
                        "private_ip_address_version": "IPv4",
                    }],
                    "public_ips": [{
                        "network_resource_group_name": "resourceGroup",
                        "name": "test",
                    }],
                    "application_security_groups": [{
                        "network_resource_group_name": "AsgResourceGroup",
                        "name": "AsgName",
                    }],
                }],
            },
            os_disk={
                "size_gb": 30,
                "type": "Standard_LRS",
                "caching": "ReadOnly",
            },
            secrets=[{
                "source_vaults": [{
                    "name": "string",
                    "resource_group_name": "string",
                }],
                "vault_certificates": [{
                    "certificate_url": "string",
                    "certificate_store": "string",
                }],
            }],
            security={
                "security_type": "ConfidentialVM",
                "secure_boot_enabled": True,
                "vtpm_enabled": True,
                "encryption_at_host": False,
                "confidential_os_disk_encryption": True,
            },
            tags=[{
                "tag_key": "Creator",
                "tag_value": "string",
            }],
            health={
                "health_check_types": ["vmState"],
                "unhealthy_duration": 300,
                "grace_period": 120,
                "auto_healing": True,
            },
            should_persist_os_disk=False,
            os_disk_persistence_mode="reattach",
            should_persist_data_disks=True,
            data_disks_persistence_mode="reattach",
            should_persist_network=True,
            scheduling_tasks=[
                {
                    "is_enabled": True,
                    "type": "pause",
                    "cron_expression": "44 10 * * *",
                },
                {
                    "is_enabled": True,
                    "type": "resume",
                    "cron_expression": "48 10 * * *",
                },
                {
                    "is_enabled": True,
                    "type": "recycle",
                    "cron_expression": "52 10 * * *",
                },
            ],
            signals=[
                {
                    "type": "vmReady",
                    "timeout": 20,
                },
                {
                    "type": "vmReady",
                    "timeout": 40,
                },
            ],
            proximity_placement_groups=[{
                "name": "TestPPG",
                "resource_group_name": "TestResourceGroup",
            }],
            deletes=[{
                "should_terminate_vm": True,
                "network_should_deallocate": True,
                "network_ttl_in_hours": 0,
                "disk_should_deallocate": True,
                "disk_ttl_in_hours": 0,
                "snapshot_should_deallocate": True,
                "snapshot_ttl_in_hours": 0,
                "public_ip_should_deallocate": True,
                "public_ip_ttl_in_hours": 0,
                "should_deregister_from_lb": True,
                "should_revert_to_od": False,
            }])
        ```

        # Argument Reference

        The following arguments are supported:

        * `name` - (Required) Azure stateful node name.
        * `region` - (Required) The Azure region your stateful node will be created in.
        * `resource_group_name` - (Required) Name of the Resource Group for stateful node.
        * `description` - (Optional) Describe your Azure stateful node.

        ## Strategy

        * `strategy` - (Required) Strategy for stateful node.
          * `draining_timeout` - (Optional, Default `120`) Time (in seconds) to allow the VM be drained from incoming TCP connections and detached from MLB before terminating it during a scale down operation.
          * `availability_vs_cost` - (Optional) Set the desired preference for the Spot market VM selection. (100- Availability, 0- cost).
          * `fallback_to_on_demand` - (Required) In case of no spots available, Stateful Node will launch an On-demand instance instead.
          * `optimization_windows` - (Optional) Valid format: "ddd:hh:mm-ddd:hh:mm (day:hour(0-23):minute(0-59))", not empty if revertToSpot.performAt = timeWindow.
          * `od_windows` - (Optional) Define the time windows in which the underlying VM will be set as an on-demand lifecycle type. During the entire time window, the rest of the strategy processes will be paused.
            Switching between on-demand and Spot VM types at the enter/exit of the time window will trigger the recycling of the stateful node. Valid format: "ddd:hh:mm-ddd:hh:mm (day:hour(0-23):minute(0-59))".
          * `preferred_life_cycle` - (Optional, Enum `"od", "spot"`, Default `"spot"`) The desired type of VM.
          * `revert_to_spot` - (Optional) Hold settings for strategy correction - replacing On-Demand for Spot VMs.
            * `perform_at` - (Required, Enum `"timeWindow", "never", "always"`, Default `"always"`) Settings for maintenance strategy.
          * `capacity_reservation` - (Optional) On-demand Capacity Reservation group enables you to reserve Compute capacity in an Azure region or an Availability Zone for any duration of time. [CRG can only be created on the Azure end.](https://learn.microsoft.com/en-us/azure/virtual-machines/capacity-reservation-create)
            * `should_utilize` - (Required) Determines whether capacity reservations should be utilized.
            * `utilization_strategy` - (Required, Enum `"utilizeOverSpot", "utilizeOverOD"`) The priority requested for using CRG. This value will determine if CRG is used ahead of spot VMs or On-demand VMs. (`"utilizeOverOD"`- If picked, we will use CRG only in case On demand should be launched. `"utilizeOverSpot"`- CRG will be preferred over Spot. Only after CRG is fully used, spot VMs can be used.)
            * `capacity_reservation_groups` - (Optional) List of the desired CRGs to use under the associated Azure subscription. When null we will utilize any available reservation that matches the launch specification.
              * `crg_name` - (Required) The name of the CRG.
              * `crg_resource_group_name` - (Required) Azure resource group name
              * `crg_should_prioritize` - The desired CRG to utilize ahead of other CRGs in the subscription.
          * `vm_admins` - (Optional) Defines Azure identities that are considered VM admins. If the list is empty, the defined behavior is `NONE`, If the list is null, the defined behavior is `ALL`. This applies if the object is not defined. If an identity contains the string, it will be considered permitted to perform the following actions: Stop VM: VM admins can move the VM to a "stopped (deallocated)" state using the Azure console. If triggered by someone else, it is considered an interruption.

        ## Compute

        * `os` - (Required, Enum `"Linux", "Windows"`) Type of operating system.
        * `vm_sizes` - (Required) Defines the VM sizes to use when launching VMs.
            * `od_sizes` - (Required) Available On-Demand sizes.
            * `spot_sizes` - (Optional) Available Spot-VM sizes. Required if spotSizeAttributes isn't specified.
            * `preferred_spot_sizes` - (Optional) Prioritize Spot VM sizes when launching Spot VMs for the group. If set, must be a sublist of compute.vmSizes.spotSizes.
            * `excluded_vm_sizes` - (Optional) Defines the VM sizes to exclude when defining spot types with spotSizeAttributes.
            * `spot_size_attributes` - (Optional) Defines values and ranges for attributes of the spot sizes to use when launching VMs. Required if spotSizes isn't specified.
              * `max_cpu` - (Optional) Maximum amount of vCPU units.
              * `min_cpu` - (Optional) Minimum amount of vCPU units.
              * `max_memory` - (Optional) Maximum amount of memory in GiB.
              * `min_memory` - (Optional) Minimum amount of memory in GiB.
              * `max_storage` - (Optional) Maximum amount of storage in GiB.
              * `min_storage` - (optional) Minimum amount of storage in GiB.
        * `zones` - (Optional, Enum `"1", "2", "3"`) List of Azure Availability Zones in the defined region. If not defined, Virtual machines will be launched regionally.
        * `preferred_zone` - (Optional, Enum `"1", "2", "3"`) The AZ to prioritize when launching VMs. If no markets are available in the Preferred AZ, VMs are launched in the non-preferred AZ. Must be a sublist of compute.zones.
        * `custom_data` - (Optional) This value will hold the YAML in base64 and will be executed upon VM launch.
        * `shutdown_script` - (Optional) Shutdown script for the stateful node. Value should be passed as a string encoded at Base64 only.
        * `user_data` - (Optional) Define a set of scripts or other metadata that's inserted to an Azure virtual machine at provision time. (Base64 encoded)
        * `vm_name` - (Optional) Set a VM name that will be persisted throughout the entire node lifecycle. This can't be set if `vm_name_prefix` is set.
        * `vm_name_prefix` - (Optional) Set a VM name prefix to be used for all launched VMs and the VM resources. This can't be set if `vm_name` is set.
        * `license_type` - (Optional) Specify an existing Azure license type to use when launching new VMs. Valid values for Windows OS: "Windows_Server", "Windows_Client", Valid values for Linux OS: "RHEL_BYOS", "SLES_BYOS"

        <a id="boot_diagnostics"></a>
        ## Boot Diagnostics

        * `boot_diagnostics`
          * `is_enabled` - (Optional) Allows you to enable and disable the configuration of boot diagnostics at launch.
          * `storage_url` - (Optional) The storage URI that is used if a type is unmanaged. The storage URI must follow the blob storage URI format ("https://.blob.core.windows.net/"). StorageUri is required if the type is unmanaged. StorageUri must be ‘null’ in case the boot diagnostics type is managed.
          * `type` - (Optional, Enum `"managed", "unmanaged"`) Defines the storage type on VM launch in Azure.

        <a id="data_disks"></a>
        ## Data Disks

        * `data_disk` - (Optional) The definitions of data disks that will be created and attached to the stateful node's VM.
          * `size_gb` - (Required) The size of the data disk in GB, required if dataDisks is specified.
          * `lun` - (Required) The LUN of the data disk.
          * `type` - (Required, Enum `"Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS"`) The type of the data disk.

        ## Extensions

        * `extension` - (Optional) An object for an azure extension.
          * `name` - (Required) Required on compute.launchSpecification.extensions object.
          * `type` - (Required) Required on compute.launchSpecification.extensions object.
          * `publisher` - (Required) Required on compute.launchSpecification.extensions object.
          * `api_version` - (Required) The API version of the extension. Required if extension specified.
          * `minor_version_auto_upgrade` - (Required) Required on compute.launchSpecification.extensions object.
          * `protected_settings` - (Optional) Object for protected settings.
          * `public_settings` - (Optional) Object for public settings.

        ## Image

        * `image`
          * `marketplace_image` - (Optional) Select an image from Azure's Marketplace image catalogue. Required if the custom image or gallery image are not specified.
            * `publisher` - (Required) Image publisher.
            * `offer` - (Required) Image offer.
            * `sku` - (Required) Image Stock Keeping Unit, which is the specific version of the image.
            * `version` - (Required, Default `"latest"`) Image's version. if version not provided we use "latest".
          * `gallery` - (Optional) Gallery image definitions. Required if custom image or marketplace image are not specified.
            * `gallery_resource_group_name` - (Required) The resource group name for gallery image.
            * `gallery_name` - (Required) Name of the gallery.
            * `image_name` - (Required) Name of the gallery image.
            * `version_name` - (Required) Image's version. Can be in the format x.x.x or 'latest'.
            * `spot_account_id` - (Optional) The Spot account ID that connected to the Azure subscription to which the gallery belongs. Relevant only in case of cross-subscription shared galleries. [Read more](https://docs.spot.io/elastigroup/features-azure/shared-image-galleries) about cross-subscription shared galleries in Elastigroup.
          * `custom_image` - (Optional) Custom image definitions. Required if marketplace image or gallery image are not specified.
            * `custom_image_resource_group_name` - (Required) The resource group name for custom image.
            * `name` - (Required) The name of the custom image.

        <a id="load balancer"></a>
        ## Load Balancer

        * `load_balancer` - (Optional) Add a load balancer. For Azure Gateway, each Backend Pool is a separate load balancer.
          * `type` - (Required, Enum `"loadBalancer", "applicationGateway"`) The type of load balancer.
          * `resource_group_name` - (Required) The Resource Group name of the Load Balancer.
          * `name` - (Required) Name of the Application Gateway/Load Balancer.
          * `sku` - (Optional)
            * if type is `"LoadBalancer"` then possible values are `“Standard", "Basic”`.
            * If ApplicationGateway then possible values are
              `“Standard_Large”, “Standard_Medium”, “Standard_Small”, “Standard_v2", “WAF_Large”, “WAF_Medium", “WAF_v2"`.
          * `backend_pool_names` - (Optional) Name of the Backend Pool to register the Stateful Node VMs to. Each Backend Pool is a separate load balancer. Required if Type is APPLICATION_GATEWAY.

        ## Login

        * `login` - (Required) Set admin access for accessing your VMs. Password/SSH is required for Linux.
          * `user_name` - (Required) username for admin access to VMs.
          * `ssh_public_key` - (Optional) SSH for admin access to Linux VMs. Optional for Linux.
          * `password` - (Optional) Password for admin access to Windows VMs. Required for Windows.

        <a id="managed_service_identities"></a>
        ## Managed Service Identities

        * `managed_service_identities` - (Optional) Add a user-assigned managed identity to the Stateful Node's VM.
          * `name` - (Required) name of the managed identity.
          * `resource_group_name` - (Required) The Resource Group that the user-assigned managed identity resides in.

        <a id="proximity_placement_groups"></a>
        ## Proximity Placement Groups

        * `proximity_placement_groups` - (Optional) Defines the proximity placement group in which the VM will be launched.
          * `name` - (Required) name of the proximity placement group.
          * `resource_group_name` - (Required) The Resource Group name of the proximity placement group.

        ## Network

        * `network` - (Required) Define the Virtual Network and Subnet for your Stateful Node.
          * `network_resource_group_name` - (Required) Vnet Resource Group Name.
          * `virtual_network_name` - (Required) Virtual Network.
          * `network_interface` - (Required) Define a network interface
            * `is_primary` - (Required) Defines whether the network interface is primary or not.
            * `subnet_name` - (Required) Subnet name.
            * `assign_public_ip` - (Optional) Assign public IP.
            * `public_ip_sku` - (Optional) Required if assignPublicIp=true values=[Standard/Basic].
            * `network_security_group` - (Optional) Network Security Group.
              * `network_resource_group_name` - (Required) Requires valid security group name.
              * `name` - (Required) Requires valid resource group name.
            * `enable_ip_forwarding` - (Optional) Enable IP Forwarding.
            * `private_ip_addresses` - (Optional) A list with unique items that every item is a valid IP.
            * `additional_ip_configurations` - (Optional) Additional configuration of network interface.
              * `name` - (Required) Configuration name.
              * `private_ip_address_version` - (Required, Enum `"IPv4", "IPv6"` Default `"IPv4"`) Version of the private IP address.
            * `public_ips` - (Optional) Defined a pool of Public Ips (from Azure), that will be associated to the network interface. We will associate one public ip per instance until the pool is exhausted, in which case, we will create a new one.
              * `resource_group_name` - (Required) The resource group of the public ip.
              * `name` - (Required) - The name of the public ip.
            * `application_security_groups` - (Optional) Network Security Group.
              * `resource_group_name` - (Required) Requires valid security group name.
              * `name` - (Required) Requires valid resource group name.

        <a id="os_disk"></a>
        ## OS Disk

        * `os_disk` - (Optional) Specify OS disk specification other than default.
          * `size_gb` - (Optional, Default `"30"`) The size of the data disk in GB.
          * `type` - (Required, Enum `"Standard_LRS", "Premium_LRS", "StandardSSD_LRS"`) The type of the OS disk.
          * `caching` - (Optional, Enum `"None", "ReadOnly", "ReadWrite"`) Specifies the host caching requirements. With disk caching enabled, VMs can achieve higher levels of performance. If not specified, the Azure default behavior will be applied.

        ## Secret

        * `secret` - (Optional) Set of certificates that should be installed on the VM.
          * `source_vault` - (Required) The key vault reference, contains the required certificates.
            * `name` - (Required) The name of the key vault.
            * `resource_group_name` - (Required) The resource group name of the key vault.
          * `vault_certificates` - (Required) The required certificate references.
            * `certificate_url` - (Optional) The URL of the certificate under the key vault.
            * `certificate_store` - (Required) The certificate store directory the VM. The directory is created in the LocalMachine account.
              * This field is required only when using Windows OS type
              * This field must be ‘null’ when the OS type is Linux

        ## Security

        * `security` - (Optional) Specifies the Security related profile settings for the virtual machine.
            * `secure_boot_enabled` - (Optional) Specifies whether secure boot should be enabled on the virtual machine.
            * `security_type` - (Optional) Enum: `"Standard", "TrustedLaunch", "ConfidentialVM"` Security type refers to the different security features of a virtual machine. Security features like Trusted launch virtual machines help to improve the security of Azure generation 2 virtual machines.
            * `vtpm_enabled` - (Optional) Specifies whether vTPM should be enabled on the virtual machine.
            * `encryption_at_host` - (Optional) Enables the Host Encryption for the virtual machine. The Encryption at host will be disabled unless this property is set to true for the resource.
            * `confidential_os_disk_encryption` - (Optional) Confidential disk encryption binds the disk encryption keys to the VM's TPM, ensuring VM-only access. The security type must be "ConfidentialVM" to enable defining this preference as “true”.

        ## Tag

        * `tag` - (Optional) Unique Key-Value pair for all Stateful Node Resources.
          * `tag_key` - (Optional) Tag Key for Stateful Node Resources.
          * `tag_value` - (Optional) Tag Value for Stateful Node Resources.

        ## Health

        * `health` - (Optional) Set the auto healing preferences for unhealthy VMs.
          * `health_check_types` - (Optional, Enum `"vmState", "applicationGateway"`) Healthcheck to use to validate VM health.
          * `unhealthy_duration` - (Optional) Amount of time to be unhealthy before a replacement is triggered.
          * `auto_healing` - (Required) Enable Autohealing of unhealthy VMs.
          * `grace_period` - (Optional) Period of time to wait for VM to reach healthiness before monitoring for unhealthiness.

        ## Persistence

        * `should_persist_os_disk` - (Required) Should persist os disk.
        * `os_disk_persistence_mode` - (Optional, Enum `"reattach", "onLaunch"`)
        * `should_persist_data_disks` - (Required) Should persist data disks.
        * `data_disks_persistence_mode` - (Optional, Enum `"reattach", "onLaunch"`)
        * `should_persist_network` - (Required) Should persist network.

        <a id="scheduling_tasks"></a>
        ## Scheduling Tasks

        * `scheduling_task` - (Optional) Scheduling settings object for stateful node.
          * `is_enabled` - (Required) Is scheduled task enabled for stateful node.
          * `type` - (Required, Enum `"pause", "resume", "recycle") The type of the scheduled task
          * `cron_expression` (Required) A expression which describes when to execute the scheduled task (UTC).

        ## Signals

        * `signal` - (Optional) A signal object defined for the stateful node.
          * `type` - (Required, Enum `"vmReady", "vmReadyToShutdown"`) The type of the signal defined for the stateful node.
          * `timeout` - (Required, Default `"1800"`) The timeout in seconds to hold the vm until a signal is sent. If no signal is sent the vm will be replaced (vmReady) or we will terminate the vm (vmReadyToShutdown) after the timeout.

        ***

        <a id="attach_data_disk"></a>
        ## Attach Data Disk

        * `attach_data_disk` - (Optional) Create a new data disk and attach it to the stateful node.
          * `data_disk_name` - (Required) The name of the created data disk.
          * `data_disk_resource_group_name` - (Required) The resource group name in which the data disk will be created.
          * `storage_account_type` - (Required, Enum `"Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS"`) The type of the data disk.
          * `size_gb` - (Required) The size of the data disk in GB, Required if dataDisks is specified.
          * `zone` - (Optional, Enum `"1", "2", "3"`) The Availability Zone in which the data disk will be created. If not defined, the data disk will be created regionally.
          * `lun` - (Optional, Default `"orginal"`) The LUN of the data disk. If not defined, the LUN will be set in order.

        <a id="detach_data_disk"></a>
        ## Detach Data Disk

        * `detach_data_disk` - (Optional) Detach a data disk from a stateful node.
          * `data_disk_name` - (Required) The name of the detached data disk.
          * `data_disk_resource_group_name` - (Required) The resource group name in which the data disk exists.
          * `should_deallocate` - (Required) Indicates whether to delete the data disk in addition to detach.
          * `ttl_in_hours` - (Required, Default `"0"`) Hours to keep the disk alive before deletion.

        <a id="update_state"></a>
        ## Update State

        * `update_state` - (Optional) Update the stateful node state.
          * `state` - (Required, Enum `"pause", "resume", "recycle"`) New state for the stateful node.

        <a id="import_vm"></a>
        ## Import VM

        * `import_vm` - (Optional) Import an Azure VM and create a stateful node by providing a node configuration.
          * `resource_group_name` - (Required) Name of the Resource Group for Stateful Node.
          * `original_vm_name` - (Required) Azure Import Stateful Node Name.
          * `draining_timeout` - (Optional) Hours to keep resources alive.
          * `resources_retention_time` - (Optional) Hours to keep resources alive.

        ## Deallocation Config

        * `delete` - (Required) Specify deallocation parameters for stateful node deletion.
            * `should_terminate_vm` - (Required) Indicates whether to delete the stateful node's VM.
            * `network_should_deallocate` - (Optional) Indicates whether to delete the stateful node's network resources.
            * `network_ttl_in_hours` - (Optional, Default: 96) Hours to keep the network resource alive before deletion.
            * `disk_should_deallocate` - (Optional) Indicates whether to delete the stateful node's disk resources.
            * `disk_ttl_in_hours` - (Optional, Default: 96) Hours to keep the disk resource alive before deletion.
            * `snapshot_should_deallocate` - (Optional) Indicates whether to delete the stateful node's snapshot resources.
            * `snapshot_ttl_in_hours` - (Optional, Default: 96) Hours to keep the snapshots alive before deletion.
            * `public_ip_should_deallocate` - (Optional) Indicates whether to delete the stateful node's public ip resources.
            * `public_ip_ttl_in_hours` - (Optional, Default: 96) Hours to keep the public ip alive before deletion.
            * `should_deregister_from_lb` - (Optional, Default: true) Indicates whether to deregister the stateful node's VM from any type of load balancer. Can be changed to false only when shouldTerminateVms is 'false'.
            * `should_revert_to_od` - (Optional, Default: false) Indicates whether to change the stateful node's VM lifecycle to on-demand. Can be changed to true only when `should_terminate_vm` is 'false'.

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: StatefulNodeAzureArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Provides a Spotinst stateful node Azure resource.

        ## Example Usage

        ```python
        import pulumi
        import pulumi_spotinst as spotinst

        test_stateful_node_azure = spotinst.StatefulNodeAzure("test_stateful_node_azure",
            name="example_stateful_node_azure",
            region="eastus",
            resource_group_name="spotinst-azure",
            description="example_stateful_node_azure_description",
            strategy={
                "draining_timeout": 30,
                "fallback_to_on_demand": True,
                "optimization_windows": ["Tue:19:46-Tue:20:46"],
                "od_windows": ["Wed:19:46-Wed:21:46"],
                "availability_vs_cost": 100,
                "vm_admins": [
                    "UbuntuUser",
                    "TestUser",
                ],
                "revert_to_spot": {
                    "perform_at": "timeWindow",
                },
                "preferred_life_cycle": "od",
                "capacity_reservations": [{
                    "should_utilize": True,
                    "utilization_strategy": "utilizeOverOD",
                    "capacity_reservation_groups": [{
                        "crg_name": "crg name",
                        "crg_resource_group_name": "resourceGroupName",
                        "crg_should_prioritize": True,
                    }],
                }],
            },
            os="Linux",
            vm_sizes={
                "od_sizes": [
                    "standard_ds1_v2",
                    "standard_ds2_v2",
                ],
                "spot_sizes": [
                    "standard_ds1_v2",
                    "standard_ds2_v2",
                ],
                "preferred_spot_sizes": ["standard_ds1_v2"],
                "excluded_vm_sizes": ["standard_ds2_v3"],
                "spot_size_attributes": {
                    "max_cpu": 16,
                    "min_cpu": 2,
                    "max_memory": 48,
                    "min_memory": 2,
                    "max_storage": 1000,
                    "min_storage": 50,
                },
            },
            zones=[
                "1",
                "3",
            ],
            preferred_zone="1",
            custom_data="",
            shutdown_script="",
            user_data="",
            vm_name="VMName",
            vm_name_prefix="VMNamePrefix",
            license_type="SLES_BYOS",
            boot_diagnostics=[{
                "is_enabled": True,
                "storage_url": "https://.blob.core.windows.net/test",
                "type": "unmanaged",
            }],
            data_disks=[
                {
                    "size_gb": 1,
                    "lun": 1,
                    "type": "Standard_LRS",
                },
                {
                    "size_gb": 10,
                    "lun": 2,
                    "type": "Standard_LRS",
                },
            ],
            extensions=[{
                "name": "extensionName",
                "type": "customScript",
                "publisher": "Microsoft.Azure.Extensions",
                "api_version": "2.0",
                "minor_version_auto_upgrade": True,
                "protected_settings": {
                    "script": "IyEvYmluL2Jhc2gKZWNobyAibmlyIiA+IC9ob29uaXIudHh0Cg==",
                },
                "public_settings": {
                    "fileUris": "https://testspot/Azuretest.sh",
                },
            }],
            image={
                "marketplace_images": [{
                    "publisher": "Canonical",
                    "offer": "UbuntuServer",
                    "sku": "16.04-LTS",
                    "version": "latest",
                }],
                "custom_images": [{
                    "custom_image_resource_group_name": "resourceGroupName",
                    "name": "imageName",
                }],
                "galleries": [{
                    "gallery_resource_group_name": "resourceGroupName",
                    "gallery_name": "galleryName",
                    "image_name": "imageName",
                    "version_name": "1.1.0",
                    "spot_account_id": "act-123456",
                }],
            },
            load_balancers=[{
                "type": "loadBalancer",
                "resource_group_name": "testResourceGroup",
                "name": "testLoadBalancer",
                "sku": "Standard",
                "backend_pool_names": [
                    "testBackendPool1",
                    "testBackendPool2",
                ],
            }],
            login={
                "user_name": "admin",
                "ssh_public_key": "33a2s1f3g5a1df5g1ad3f2g1adfg56dfg==",
            },
            managed_service_identities=[{
                "name": "mySI2",
                "resource_group_name": "myResourceGroup",
            }],
            network={
                "network_resource_group_name": "subnetResourceGroup",
                "virtual_network_name": "vname",
                "network_interfaces": [{
                    "is_primary": True,
                    "subnet_name": "testSubnet",
                    "assign_public_ip": True,
                    "public_ip_sku": "Standard",
                    "network_security_groups": [{
                        "network_resource_group_name": "test",
                        "name": "test",
                    }],
                    "enable_ip_forwarding": True,
                    "private_ip_addresses": ["172.23.4.20"],
                    "additional_ip_configurations": [{
                        "name": "test",
                        "private_ip_address_version": "IPv4",
                    }],
                    "public_ips": [{
                        "network_resource_group_name": "resourceGroup",
                        "name": "test",
                    }],
                    "application_security_groups": [{
                        "network_resource_group_name": "AsgResourceGroup",
                        "name": "AsgName",
                    }],
                }],
            },
            os_disk={
                "size_gb": 30,
                "type": "Standard_LRS",
                "caching": "ReadOnly",
            },
            secrets=[{
                "source_vaults": [{
                    "name": "string",
                    "resource_group_name": "string",
                }],
                "vault_certificates": [{
                    "certificate_url": "string",
                    "certificate_store": "string",
                }],
            }],
            security={
                "security_type": "ConfidentialVM",
                "secure_boot_enabled": True,
                "vtpm_enabled": True,
                "encryption_at_host": False,
                "confidential_os_disk_encryption": True,
            },
            tags=[{
                "tag_key": "Creator",
                "tag_value": "string",
            }],
            health={
                "health_check_types": ["vmState"],
                "unhealthy_duration": 300,
                "grace_period": 120,
                "auto_healing": True,
            },
            should_persist_os_disk=False,
            os_disk_persistence_mode="reattach",
            should_persist_data_disks=True,
            data_disks_persistence_mode="reattach",
            should_persist_network=True,
            scheduling_tasks=[
                {
                    "is_enabled": True,
                    "type": "pause",
                    "cron_expression": "44 10 * * *",
                },
                {
                    "is_enabled": True,
                    "type": "resume",
                    "cron_expression": "48 10 * * *",
                },
                {
                    "is_enabled": True,
                    "type": "recycle",
                    "cron_expression": "52 10 * * *",
                },
            ],
            signals=[
                {
                    "type": "vmReady",
                    "timeout": 20,
                },
                {
                    "type": "vmReady",
                    "timeout": 40,
                },
            ],
            proximity_placement_groups=[{
                "name": "TestPPG",
                "resource_group_name": "TestResourceGroup",
            }],
            deletes=[{
                "should_terminate_vm": True,
                "network_should_deallocate": True,
                "network_ttl_in_hours": 0,
                "disk_should_deallocate": True,
                "disk_ttl_in_hours": 0,
                "snapshot_should_deallocate": True,
                "snapshot_ttl_in_hours": 0,
                "public_ip_should_deallocate": True,
                "public_ip_ttl_in_hours": 0,
                "should_deregister_from_lb": True,
                "should_revert_to_od": False,
            }])
        ```

        # Argument Reference

        The following arguments are supported:

        * `name` - (Required) Azure stateful node name.
        * `region` - (Required) The Azure region your stateful node will be created in.
        * `resource_group_name` - (Required) Name of the Resource Group for stateful node.
        * `description` - (Optional) Describe your Azure stateful node.

        ## Strategy

        * `strategy` - (Required) Strategy for stateful node.
          * `draining_timeout` - (Optional, Default `120`) Time (in seconds) to allow the VM be drained from incoming TCP connections and detached from MLB before terminating it during a scale down operation.
          * `availability_vs_cost` - (Optional) Set the desired preference for the Spot market VM selection. (100- Availability, 0- cost).
          * `fallback_to_on_demand` - (Required) In case of no spots available, Stateful Node will launch an On-demand instance instead.
          * `optimization_windows` - (Optional) Valid format: "ddd:hh:mm-ddd:hh:mm (day:hour(0-23):minute(0-59))", not empty if revertToSpot.performAt = timeWindow.
          * `od_windows` - (Optional) Define the time windows in which the underlying VM will be set as an on-demand lifecycle type. During the entire time window, the rest of the strategy processes will be paused.
            Switching between on-demand and Spot VM types at the enter/exit of the time window will trigger the recycling of the stateful node. Valid format: "ddd:hh:mm-ddd:hh:mm (day:hour(0-23):minute(0-59))".
          * `preferred_life_cycle` - (Optional, Enum `"od", "spot"`, Default `"spot"`) The desired type of VM.
          * `revert_to_spot` - (Optional) Hold settings for strategy correction - replacing On-Demand for Spot VMs.
            * `perform_at` - (Required, Enum `"timeWindow", "never", "always"`, Default `"always"`) Settings for maintenance strategy.
          * `capacity_reservation` - (Optional) On-demand Capacity Reservation group enables you to reserve Compute capacity in an Azure region or an Availability Zone for any duration of time. [CRG can only be created on the Azure end.](https://learn.microsoft.com/en-us/azure/virtual-machines/capacity-reservation-create)
            * `should_utilize` - (Required) Determines whether capacity reservations should be utilized.
            * `utilization_strategy` - (Required, Enum `"utilizeOverSpot", "utilizeOverOD"`) The priority requested for using CRG. This value will determine if CRG is used ahead of spot VMs or On-demand VMs. (`"utilizeOverOD"`- If picked, we will use CRG only in case On demand should be launched. `"utilizeOverSpot"`- CRG will be preferred over Spot. Only after CRG is fully used, spot VMs can be used.)
            * `capacity_reservation_groups` - (Optional) List of the desired CRGs to use under the associated Azure subscription. When null we will utilize any available reservation that matches the launch specification.
              * `crg_name` - (Required) The name of the CRG.
              * `crg_resource_group_name` - (Required) Azure resource group name
              * `crg_should_prioritize` - The desired CRG to utilize ahead of other CRGs in the subscription.
          * `vm_admins` - (Optional) Defines Azure identities that are considered VM admins. If the list is empty, the defined behavior is `NONE`, If the list is null, the defined behavior is `ALL`. This applies if the object is not defined. If an identity contains the string, it will be considered permitted to perform the following actions: Stop VM: VM admins can move the VM to a "stopped (deallocated)" state using the Azure console. If triggered by someone else, it is considered an interruption.

        ## Compute

        * `os` - (Required, Enum `"Linux", "Windows"`) Type of operating system.
        * `vm_sizes` - (Required) Defines the VM sizes to use when launching VMs.
            * `od_sizes` - (Required) Available On-Demand sizes.
            * `spot_sizes` - (Optional) Available Spot-VM sizes. Required if spotSizeAttributes isn't specified.
            * `preferred_spot_sizes` - (Optional) Prioritize Spot VM sizes when launching Spot VMs for the group. If set, must be a sublist of compute.vmSizes.spotSizes.
            * `excluded_vm_sizes` - (Optional) Defines the VM sizes to exclude when defining spot types with spotSizeAttributes.
            * `spot_size_attributes` - (Optional) Defines values and ranges for attributes of the spot sizes to use when launching VMs. Required if spotSizes isn't specified.
              * `max_cpu` - (Optional) Maximum amount of vCPU units.
              * `min_cpu` - (Optional) Minimum amount of vCPU units.
              * `max_memory` - (Optional) Maximum amount of memory in GiB.
              * `min_memory` - (Optional) Minimum amount of memory in GiB.
              * `max_storage` - (Optional) Maximum amount of storage in GiB.
              * `min_storage` - (optional) Minimum amount of storage in GiB.
        * `zones` - (Optional, Enum `"1", "2", "3"`) List of Azure Availability Zones in the defined region. If not defined, Virtual machines will be launched regionally.
        * `preferred_zone` - (Optional, Enum `"1", "2", "3"`) The AZ to prioritize when launching VMs. If no markets are available in the Preferred AZ, VMs are launched in the non-preferred AZ. Must be a sublist of compute.zones.
        * `custom_data` - (Optional) This value will hold the YAML in base64 and will be executed upon VM launch.
        * `shutdown_script` - (Optional) Shutdown script for the stateful node. Value should be passed as a string encoded at Base64 only.
        * `user_data` - (Optional) Define a set of scripts or other metadata that's inserted to an Azure virtual machine at provision time. (Base64 encoded)
        * `vm_name` - (Optional) Set a VM name that will be persisted throughout the entire node lifecycle. This can't be set if `vm_name_prefix` is set.
        * `vm_name_prefix` - (Optional) Set a VM name prefix to be used for all launched VMs and the VM resources. This can't be set if `vm_name` is set.
        * `license_type` - (Optional) Specify an existing Azure license type to use when launching new VMs. Valid values for Windows OS: "Windows_Server", "Windows_Client", Valid values for Linux OS: "RHEL_BYOS", "SLES_BYOS"

        <a id="boot_diagnostics"></a>
        ## Boot Diagnostics

        * `boot_diagnostics`
          * `is_enabled` - (Optional) Allows you to enable and disable the configuration of boot diagnostics at launch.
          * `storage_url` - (Optional) The storage URI that is used if a type is unmanaged. The storage URI must follow the blob storage URI format ("https://.blob.core.windows.net/"). StorageUri is required if the type is unmanaged. StorageUri must be ‘null’ in case the boot diagnostics type is managed.
          * `type` - (Optional, Enum `"managed", "unmanaged"`) Defines the storage type on VM launch in Azure.

        <a id="data_disks"></a>
        ## Data Disks

        * `data_disk` - (Optional) The definitions of data disks that will be created and attached to the stateful node's VM.
          * `size_gb` - (Required) The size of the data disk in GB, required if dataDisks is specified.
          * `lun` - (Required) The LUN of the data disk.
          * `type` - (Required, Enum `"Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS"`) The type of the data disk.

        ## Extensions

        * `extension` - (Optional) An object for an azure extension.
          * `name` - (Required) Required on compute.launchSpecification.extensions object.
          * `type` - (Required) Required on compute.launchSpecification.extensions object.
          * `publisher` - (Required) Required on compute.launchSpecification.extensions object.
          * `api_version` - (Required) The API version of the extension. Required if extension specified.
          * `minor_version_auto_upgrade` - (Required) Required on compute.launchSpecification.extensions object.
          * `protected_settings` - (Optional) Object for protected settings.
          * `public_settings` - (Optional) Object for public settings.

        ## Image

        * `image`
          * `marketplace_image` - (Optional) Select an image from Azure's Marketplace image catalogue. Required if the custom image or gallery image are not specified.
            * `publisher` - (Required) Image publisher.
            * `offer` - (Required) Image offer.
            * `sku` - (Required) Image Stock Keeping Unit, which is the specific version of the image.
            * `version` - (Required, Default `"latest"`) Image's version. if version not provided we use "latest".
          * `gallery` - (Optional) Gallery image definitions. Required if custom image or marketplace image are not specified.
            * `gallery_resource_group_name` - (Required) The resource group name for gallery image.
            * `gallery_name` - (Required) Name of the gallery.
            * `image_name` - (Required) Name of the gallery image.
            * `version_name` - (Required) Image's version. Can be in the format x.x.x or 'latest'.
            * `spot_account_id` - (Optional) The Spot account ID that connected to the Azure subscription to which the gallery belongs. Relevant only in case of cross-subscription shared galleries. [Read more](https://docs.spot.io/elastigroup/features-azure/shared-image-galleries) about cross-subscription shared galleries in Elastigroup.
          * `custom_image` - (Optional) Custom image definitions. Required if marketplace image or gallery image are not specified.
            * `custom_image_resource_group_name` - (Required) The resource group name for custom image.
            * `name` - (Required) The name of the custom image.

        <a id="load balancer"></a>
        ## Load Balancer

        * `load_balancer` - (Optional) Add a load balancer. For Azure Gateway, each Backend Pool is a separate load balancer.
          * `type` - (Required, Enum `"loadBalancer", "applicationGateway"`) The type of load balancer.
          * `resource_group_name` - (Required) The Resource Group name of the Load Balancer.
          * `name` - (Required) Name of the Application Gateway/Load Balancer.
          * `sku` - (Optional)
            * if type is `"LoadBalancer"` then possible values are `“Standard", "Basic”`.
            * If ApplicationGateway then possible values are
              `“Standard_Large”, “Standard_Medium”, “Standard_Small”, “Standard_v2", “WAF_Large”, “WAF_Medium", “WAF_v2"`.
          * `backend_pool_names` - (Optional) Name of the Backend Pool to register the Stateful Node VMs to. Each Backend Pool is a separate load balancer. Required if Type is APPLICATION_GATEWAY.

        ## Login

        * `login` - (Required) Set admin access for accessing your VMs. Password/SSH is required for Linux.
          * `user_name` - (Required) username for admin access to VMs.
          * `ssh_public_key` - (Optional) SSH for admin access to Linux VMs. Optional for Linux.
          * `password` - (Optional) Password for admin access to Windows VMs. Required for Windows.

        <a id="managed_service_identities"></a>
        ## Managed Service Identities

        * `managed_service_identities` - (Optional) Add a user-assigned managed identity to the Stateful Node's VM.
          * `name` - (Required) name of the managed identity.
          * `resource_group_name` - (Required) The Resource Group that the user-assigned managed identity resides in.

        <a id="proximity_placement_groups"></a>
        ## Proximity Placement Groups

        * `proximity_placement_groups` - (Optional) Defines the proximity placement group in which the VM will be launched.
          * `name` - (Required) name of the proximity placement group.
          * `resource_group_name` - (Required) The Resource Group name of the proximity placement group.

        ## Network

        * `network` - (Required) Define the Virtual Network and Subnet for your Stateful Node.
          * `network_resource_group_name` - (Required) Vnet Resource Group Name.
          * `virtual_network_name` - (Required) Virtual Network.
          * `network_interface` - (Required) Define a network interface
            * `is_primary` - (Required) Defines whether the network interface is primary or not.
            * `subnet_name` - (Required) Subnet name.
            * `assign_public_ip` - (Optional) Assign public IP.
            * `public_ip_sku` - (Optional) Required if assignPublicIp=true values=[Standard/Basic].
            * `network_security_group` - (Optional) Network Security Group.
              * `network_resource_group_name` - (Required) Requires valid security group name.
              * `name` - (Required) Requires valid resource group name.
            * `enable_ip_forwarding` - (Optional) Enable IP Forwarding.
            * `private_ip_addresses` - (Optional) A list with unique items that every item is a valid IP.
            * `additional_ip_configurations` - (Optional) Additional configuration of network interface.
              * `name` - (Required) Configuration name.
              * `private_ip_address_version` - (Required, Enum `"IPv4", "IPv6"` Default `"IPv4"`) Version of the private IP address.
            * `public_ips` - (Optional) Defined a pool of Public Ips (from Azure), that will be associated to the network interface. We will associate one public ip per instance until the pool is exhausted, in which case, we will create a new one.
              * `resource_group_name` - (Required) The resource group of the public ip.
              * `name` - (Required) - The name of the public ip.
            * `application_security_groups` - (Optional) Network Security Group.
              * `resource_group_name` - (Required) Requires valid security group name.
              * `name` - (Required) Requires valid resource group name.

        <a id="os_disk"></a>
        ## OS Disk

        * `os_disk` - (Optional) Specify OS disk specification other than default.
          * `size_gb` - (Optional, Default `"30"`) The size of the data disk in GB.
          * `type` - (Required, Enum `"Standard_LRS", "Premium_LRS", "StandardSSD_LRS"`) The type of the OS disk.
          * `caching` - (Optional, Enum `"None", "ReadOnly", "ReadWrite"`) Specifies the host caching requirements. With disk caching enabled, VMs can achieve higher levels of performance. If not specified, the Azure default behavior will be applied.

        ## Secret

        * `secret` - (Optional) Set of certificates that should be installed on the VM.
          * `source_vault` - (Required) The key vault reference, contains the required certificates.
            * `name` - (Required) The name of the key vault.
            * `resource_group_name` - (Required) The resource group name of the key vault.
          * `vault_certificates` - (Required) The required certificate references.
            * `certificate_url` - (Optional) The URL of the certificate under the key vault.
            * `certificate_store` - (Required) The certificate store directory the VM. The directory is created in the LocalMachine account.
              * This field is required only when using Windows OS type
              * This field must be ‘null’ when the OS type is Linux

        ## Security

        * `security` - (Optional) Specifies the Security related profile settings for the virtual machine.
            * `secure_boot_enabled` - (Optional) Specifies whether secure boot should be enabled on the virtual machine.
            * `security_type` - (Optional) Enum: `"Standard", "TrustedLaunch", "ConfidentialVM"` Security type refers to the different security features of a virtual machine. Security features like Trusted launch virtual machines help to improve the security of Azure generation 2 virtual machines.
            * `vtpm_enabled` - (Optional) Specifies whether vTPM should be enabled on the virtual machine.
            * `encryption_at_host` - (Optional) Enables the Host Encryption for the virtual machine. The Encryption at host will be disabled unless this property is set to true for the resource.
            * `confidential_os_disk_encryption` - (Optional) Confidential disk encryption binds the disk encryption keys to the VM's TPM, ensuring VM-only access. The security type must be "ConfidentialVM" to enable defining this preference as “true”.

        ## Tag

        * `tag` - (Optional) Unique Key-Value pair for all Stateful Node Resources.
          * `tag_key` - (Optional) Tag Key for Stateful Node Resources.
          * `tag_value` - (Optional) Tag Value for Stateful Node Resources.

        ## Health

        * `health` - (Optional) Set the auto healing preferences for unhealthy VMs.
          * `health_check_types` - (Optional, Enum `"vmState", "applicationGateway"`) Healthcheck to use to validate VM health.
          * `unhealthy_duration` - (Optional) Amount of time to be unhealthy before a replacement is triggered.
          * `auto_healing` - (Required) Enable Autohealing of unhealthy VMs.
          * `grace_period` - (Optional) Period of time to wait for VM to reach healthiness before monitoring for unhealthiness.

        ## Persistence

        * `should_persist_os_disk` - (Required) Should persist os disk.
        * `os_disk_persistence_mode` - (Optional, Enum `"reattach", "onLaunch"`)
        * `should_persist_data_disks` - (Required) Should persist data disks.
        * `data_disks_persistence_mode` - (Optional, Enum `"reattach", "onLaunch"`)
        * `should_persist_network` - (Required) Should persist network.

        <a id="scheduling_tasks"></a>
        ## Scheduling Tasks

        * `scheduling_task` - (Optional) Scheduling settings object for stateful node.
          * `is_enabled` - (Required) Is scheduled task enabled for stateful node.
          * `type` - (Required, Enum `"pause", "resume", "recycle") The type of the scheduled task
          * `cron_expression` (Required) A expression which describes when to execute the scheduled task (UTC).

        ## Signals

        * `signal` - (Optional) A signal object defined for the stateful node.
          * `type` - (Required, Enum `"vmReady", "vmReadyToShutdown"`) The type of the signal defined for the stateful node.
          * `timeout` - (Required, Default `"1800"`) The timeout in seconds to hold the vm until a signal is sent. If no signal is sent the vm will be replaced (vmReady) or we will terminate the vm (vmReadyToShutdown) after the timeout.

        ***

        <a id="attach_data_disk"></a>
        ## Attach Data Disk

        * `attach_data_disk` - (Optional) Create a new data disk and attach it to the stateful node.
          * `data_disk_name` - (Required) The name of the created data disk.
          * `data_disk_resource_group_name` - (Required) The resource group name in which the data disk will be created.
          * `storage_account_type` - (Required, Enum `"Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS"`) The type of the data disk.
          * `size_gb` - (Required) The size of the data disk in GB, Required if dataDisks is specified.
          * `zone` - (Optional, Enum `"1", "2", "3"`) The Availability Zone in which the data disk will be created. If not defined, the data disk will be created regionally.
          * `lun` - (Optional, Default `"orginal"`) The LUN of the data disk. If not defined, the LUN will be set in order.

        <a id="detach_data_disk"></a>
        ## Detach Data Disk

        * `detach_data_disk` - (Optional) Detach a data disk from a stateful node.
          * `data_disk_name` - (Required) The name of the detached data disk.
          * `data_disk_resource_group_name` - (Required) The resource group name in which the data disk exists.
          * `should_deallocate` - (Required) Indicates whether to delete the data disk in addition to detach.
          * `ttl_in_hours` - (Required, Default `"0"`) Hours to keep the disk alive before deletion.

        <a id="update_state"></a>
        ## Update State

        * `update_state` - (Optional) Update the stateful node state.
          * `state` - (Required, Enum `"pause", "resume", "recycle"`) New state for the stateful node.

        <a id="import_vm"></a>
        ## Import VM

        * `import_vm` - (Optional) Import an Azure VM and create a stateful node by providing a node configuration.
          * `resource_group_name` - (Required) Name of the Resource Group for Stateful Node.
          * `original_vm_name` - (Required) Azure Import Stateful Node Name.
          * `draining_timeout` - (Optional) Hours to keep resources alive.
          * `resources_retention_time` - (Optional) Hours to keep resources alive.

        ## Deallocation Config

        * `delete` - (Required) Specify deallocation parameters for stateful node deletion.
            * `should_terminate_vm` - (Required) Indicates whether to delete the stateful node's VM.
            * `network_should_deallocate` - (Optional) Indicates whether to delete the stateful node's network resources.
            * `network_ttl_in_hours` - (Optional, Default: 96) Hours to keep the network resource alive before deletion.
            * `disk_should_deallocate` - (Optional) Indicates whether to delete the stateful node's disk resources.
            * `disk_ttl_in_hours` - (Optional, Default: 96) Hours to keep the disk resource alive before deletion.
            * `snapshot_should_deallocate` - (Optional) Indicates whether to delete the stateful node's snapshot resources.
            * `snapshot_ttl_in_hours` - (Optional, Default: 96) Hours to keep the snapshots alive before deletion.
            * `public_ip_should_deallocate` - (Optional) Indicates whether to delete the stateful node's public ip resources.
            * `public_ip_ttl_in_hours` - (Optional, Default: 96) Hours to keep the public ip alive before deletion.
            * `should_deregister_from_lb` - (Optional, Default: true) Indicates whether to deregister the stateful node's VM from any type of load balancer. Can be changed to false only when shouldTerminateVms is 'false'.
            * `should_revert_to_od` - (Optional, Default: false) Indicates whether to change the stateful node's VM lifecycle to on-demand. Can be changed to true only when `should_terminate_vm` is 'false'.

        :param str resource_name: The name of the resource.
        :param StatefulNodeAzureArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(StatefulNodeAzureArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 attach_data_disks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureAttachDataDiskArgs', 'StatefulNodeAzureAttachDataDiskArgsDict']]]]] = None,
                 boot_diagnostics: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureBootDiagnosticArgs', 'StatefulNodeAzureBootDiagnosticArgsDict']]]]] = None,
                 custom_data: Optional[pulumi.Input[str]] = None,
                 data_disks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureDataDiskArgs', 'StatefulNodeAzureDataDiskArgsDict']]]]] = None,
                 data_disks_persistence_mode: Optional[pulumi.Input[str]] = None,
                 deletes: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureDeleteArgs', 'StatefulNodeAzureDeleteArgsDict']]]]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 detach_data_disks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureDetachDataDiskArgs', 'StatefulNodeAzureDetachDataDiskArgsDict']]]]] = None,
                 extensions: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureExtensionArgs', 'StatefulNodeAzureExtensionArgsDict']]]]] = None,
                 health: Optional[pulumi.Input[Union['StatefulNodeAzureHealthArgs', 'StatefulNodeAzureHealthArgsDict']]] = None,
                 image: Optional[pulumi.Input[Union['StatefulNodeAzureImageArgs', 'StatefulNodeAzureImageArgsDict']]] = None,
                 import_vms: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureImportVmArgs', 'StatefulNodeAzureImportVmArgsDict']]]]] = None,
                 license_type: Optional[pulumi.Input[str]] = None,
                 load_balancers: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureLoadBalancerArgs', 'StatefulNodeAzureLoadBalancerArgsDict']]]]] = None,
                 login: Optional[pulumi.Input[Union['StatefulNodeAzureLoginArgs', 'StatefulNodeAzureLoginArgsDict']]] = None,
                 managed_service_identities: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureManagedServiceIdentityArgs', 'StatefulNodeAzureManagedServiceIdentityArgsDict']]]]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 network: Optional[pulumi.Input[Union['StatefulNodeAzureNetworkArgs', 'StatefulNodeAzureNetworkArgsDict']]] = None,
                 os: Optional[pulumi.Input[str]] = None,
                 os_disk: Optional[pulumi.Input[Union['StatefulNodeAzureOsDiskArgs', 'StatefulNodeAzureOsDiskArgsDict']]] = None,
                 os_disk_persistence_mode: Optional[pulumi.Input[str]] = None,
                 preferred_zone: Optional[pulumi.Input[str]] = None,
                 proximity_placement_groups: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureProximityPlacementGroupArgs', 'StatefulNodeAzureProximityPlacementGroupArgsDict']]]]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 resource_group_name: Optional[pulumi.Input[str]] = None,
                 scheduling_tasks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureSchedulingTaskArgs', 'StatefulNodeAzureSchedulingTaskArgsDict']]]]] = None,
                 secrets: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureSecretArgs', 'StatefulNodeAzureSecretArgsDict']]]]] = None,
                 security: Optional[pulumi.Input[Union['StatefulNodeAzureSecurityArgs', 'StatefulNodeAzureSecurityArgsDict']]] = None,
                 should_persist_data_disks: Optional[pulumi.Input[bool]] = None,
                 should_persist_network: Optional[pulumi.Input[bool]] = None,
                 should_persist_os_disk: Optional[pulumi.Input[bool]] = None,
                 should_persist_vm: Optional[pulumi.Input[bool]] = None,
                 shutdown_script: Optional[pulumi.Input[str]] = None,
                 signals: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureSignalArgs', 'StatefulNodeAzureSignalArgsDict']]]]] = None,
                 strategy: Optional[pulumi.Input[Union['StatefulNodeAzureStrategyArgs', 'StatefulNodeAzureStrategyArgsDict']]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureTagArgs', 'StatefulNodeAzureTagArgsDict']]]]] = None,
                 update_states: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureUpdateStateArgs', 'StatefulNodeAzureUpdateStateArgsDict']]]]] = None,
                 user_data: Optional[pulumi.Input[str]] = None,
                 vm_name: Optional[pulumi.Input[str]] = None,
                 vm_name_prefix: Optional[pulumi.Input[str]] = None,
                 vm_sizes: Optional[pulumi.Input[Union['StatefulNodeAzureVmSizesArgs', 'StatefulNodeAzureVmSizesArgsDict']]] = None,
                 zones: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = StatefulNodeAzureArgs.__new__(StatefulNodeAzureArgs)

            __props__.__dict__["attach_data_disks"] = attach_data_disks
            __props__.__dict__["boot_diagnostics"] = boot_diagnostics
            __props__.__dict__["custom_data"] = custom_data
            __props__.__dict__["data_disks"] = data_disks
            __props__.__dict__["data_disks_persistence_mode"] = data_disks_persistence_mode
            __props__.__dict__["deletes"] = deletes
            __props__.__dict__["description"] = description
            __props__.__dict__["detach_data_disks"] = detach_data_disks
            __props__.__dict__["extensions"] = extensions
            __props__.__dict__["health"] = health
            __props__.__dict__["image"] = image
            __props__.__dict__["import_vms"] = import_vms
            __props__.__dict__["license_type"] = license_type
            __props__.__dict__["load_balancers"] = load_balancers
            __props__.__dict__["login"] = login
            __props__.__dict__["managed_service_identities"] = managed_service_identities
            __props__.__dict__["name"] = name
            __props__.__dict__["network"] = network
            if os is None and not opts.urn:
                raise TypeError("Missing required property 'os'")
            __props__.__dict__["os"] = os
            __props__.__dict__["os_disk"] = os_disk
            __props__.__dict__["os_disk_persistence_mode"] = os_disk_persistence_mode
            __props__.__dict__["preferred_zone"] = preferred_zone
            __props__.__dict__["proximity_placement_groups"] = proximity_placement_groups
            if region is None and not opts.urn:
                raise TypeError("Missing required property 'region'")
            __props__.__dict__["region"] = region
            if resource_group_name is None and not opts.urn:
                raise TypeError("Missing required property 'resource_group_name'")
            __props__.__dict__["resource_group_name"] = resource_group_name
            __props__.__dict__["scheduling_tasks"] = scheduling_tasks
            __props__.__dict__["secrets"] = secrets
            __props__.__dict__["security"] = security
            if should_persist_data_disks is None and not opts.urn:
                raise TypeError("Missing required property 'should_persist_data_disks'")
            __props__.__dict__["should_persist_data_disks"] = should_persist_data_disks
            if should_persist_network is None and not opts.urn:
                raise TypeError("Missing required property 'should_persist_network'")
            __props__.__dict__["should_persist_network"] = should_persist_network
            if should_persist_os_disk is None and not opts.urn:
                raise TypeError("Missing required property 'should_persist_os_disk'")
            __props__.__dict__["should_persist_os_disk"] = should_persist_os_disk
            __props__.__dict__["should_persist_vm"] = should_persist_vm
            __props__.__dict__["shutdown_script"] = shutdown_script
            __props__.__dict__["signals"] = signals
            if strategy is None and not opts.urn:
                raise TypeError("Missing required property 'strategy'")
            __props__.__dict__["strategy"] = strategy
            __props__.__dict__["tags"] = tags
            __props__.__dict__["update_states"] = update_states
            __props__.__dict__["user_data"] = user_data
            __props__.__dict__["vm_name"] = vm_name
            __props__.__dict__["vm_name_prefix"] = vm_name_prefix
            if vm_sizes is None and not opts.urn:
                raise TypeError("Missing required property 'vm_sizes'")
            __props__.__dict__["vm_sizes"] = vm_sizes
            __props__.__dict__["zones"] = zones
        super(StatefulNodeAzure, __self__).__init__(
            'spotinst:index/statefulNodeAzure:StatefulNodeAzure',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            attach_data_disks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureAttachDataDiskArgs', 'StatefulNodeAzureAttachDataDiskArgsDict']]]]] = None,
            boot_diagnostics: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureBootDiagnosticArgs', 'StatefulNodeAzureBootDiagnosticArgsDict']]]]] = None,
            custom_data: Optional[pulumi.Input[str]] = None,
            data_disks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureDataDiskArgs', 'StatefulNodeAzureDataDiskArgsDict']]]]] = None,
            data_disks_persistence_mode: Optional[pulumi.Input[str]] = None,
            deletes: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureDeleteArgs', 'StatefulNodeAzureDeleteArgsDict']]]]] = None,
            description: Optional[pulumi.Input[str]] = None,
            detach_data_disks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureDetachDataDiskArgs', 'StatefulNodeAzureDetachDataDiskArgsDict']]]]] = None,
            extensions: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureExtensionArgs', 'StatefulNodeAzureExtensionArgsDict']]]]] = None,
            health: Optional[pulumi.Input[Union['StatefulNodeAzureHealthArgs', 'StatefulNodeAzureHealthArgsDict']]] = None,
            image: Optional[pulumi.Input[Union['StatefulNodeAzureImageArgs', 'StatefulNodeAzureImageArgsDict']]] = None,
            import_vms: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureImportVmArgs', 'StatefulNodeAzureImportVmArgsDict']]]]] = None,
            license_type: Optional[pulumi.Input[str]] = None,
            load_balancers: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureLoadBalancerArgs', 'StatefulNodeAzureLoadBalancerArgsDict']]]]] = None,
            login: Optional[pulumi.Input[Union['StatefulNodeAzureLoginArgs', 'StatefulNodeAzureLoginArgsDict']]] = None,
            managed_service_identities: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureManagedServiceIdentityArgs', 'StatefulNodeAzureManagedServiceIdentityArgsDict']]]]] = None,
            name: Optional[pulumi.Input[str]] = None,
            network: Optional[pulumi.Input[Union['StatefulNodeAzureNetworkArgs', 'StatefulNodeAzureNetworkArgsDict']]] = None,
            os: Optional[pulumi.Input[str]] = None,
            os_disk: Optional[pulumi.Input[Union['StatefulNodeAzureOsDiskArgs', 'StatefulNodeAzureOsDiskArgsDict']]] = None,
            os_disk_persistence_mode: Optional[pulumi.Input[str]] = None,
            preferred_zone: Optional[pulumi.Input[str]] = None,
            proximity_placement_groups: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureProximityPlacementGroupArgs', 'StatefulNodeAzureProximityPlacementGroupArgsDict']]]]] = None,
            region: Optional[pulumi.Input[str]] = None,
            resource_group_name: Optional[pulumi.Input[str]] = None,
            scheduling_tasks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureSchedulingTaskArgs', 'StatefulNodeAzureSchedulingTaskArgsDict']]]]] = None,
            secrets: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureSecretArgs', 'StatefulNodeAzureSecretArgsDict']]]]] = None,
            security: Optional[pulumi.Input[Union['StatefulNodeAzureSecurityArgs', 'StatefulNodeAzureSecurityArgsDict']]] = None,
            should_persist_data_disks: Optional[pulumi.Input[bool]] = None,
            should_persist_network: Optional[pulumi.Input[bool]] = None,
            should_persist_os_disk: Optional[pulumi.Input[bool]] = None,
            should_persist_vm: Optional[pulumi.Input[bool]] = None,
            shutdown_script: Optional[pulumi.Input[str]] = None,
            signals: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureSignalArgs', 'StatefulNodeAzureSignalArgsDict']]]]] = None,
            strategy: Optional[pulumi.Input[Union['StatefulNodeAzureStrategyArgs', 'StatefulNodeAzureStrategyArgsDict']]] = None,
            tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureTagArgs', 'StatefulNodeAzureTagArgsDict']]]]] = None,
            update_states: Optional[pulumi.Input[Sequence[pulumi.Input[Union['StatefulNodeAzureUpdateStateArgs', 'StatefulNodeAzureUpdateStateArgsDict']]]]] = None,
            user_data: Optional[pulumi.Input[str]] = None,
            vm_name: Optional[pulumi.Input[str]] = None,
            vm_name_prefix: Optional[pulumi.Input[str]] = None,
            vm_sizes: Optional[pulumi.Input[Union['StatefulNodeAzureVmSizesArgs', 'StatefulNodeAzureVmSizesArgsDict']]] = None,
            zones: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None) -> 'StatefulNodeAzure':
        """
        Get an existing StatefulNodeAzure resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _StatefulNodeAzureState.__new__(_StatefulNodeAzureState)

        __props__.__dict__["attach_data_disks"] = attach_data_disks
        __props__.__dict__["boot_diagnostics"] = boot_diagnostics
        __props__.__dict__["custom_data"] = custom_data
        __props__.__dict__["data_disks"] = data_disks
        __props__.__dict__["data_disks_persistence_mode"] = data_disks_persistence_mode
        __props__.__dict__["deletes"] = deletes
        __props__.__dict__["description"] = description
        __props__.__dict__["detach_data_disks"] = detach_data_disks
        __props__.__dict__["extensions"] = extensions
        __props__.__dict__["health"] = health
        __props__.__dict__["image"] = image
        __props__.__dict__["import_vms"] = import_vms
        __props__.__dict__["license_type"] = license_type
        __props__.__dict__["load_balancers"] = load_balancers
        __props__.__dict__["login"] = login
        __props__.__dict__["managed_service_identities"] = managed_service_identities
        __props__.__dict__["name"] = name
        __props__.__dict__["network"] = network
        __props__.__dict__["os"] = os
        __props__.__dict__["os_disk"] = os_disk
        __props__.__dict__["os_disk_persistence_mode"] = os_disk_persistence_mode
        __props__.__dict__["preferred_zone"] = preferred_zone
        __props__.__dict__["proximity_placement_groups"] = proximity_placement_groups
        __props__.__dict__["region"] = region
        __props__.__dict__["resource_group_name"] = resource_group_name
        __props__.__dict__["scheduling_tasks"] = scheduling_tasks
        __props__.__dict__["secrets"] = secrets
        __props__.__dict__["security"] = security
        __props__.__dict__["should_persist_data_disks"] = should_persist_data_disks
        __props__.__dict__["should_persist_network"] = should_persist_network
        __props__.__dict__["should_persist_os_disk"] = should_persist_os_disk
        __props__.__dict__["should_persist_vm"] = should_persist_vm
        __props__.__dict__["shutdown_script"] = shutdown_script
        __props__.__dict__["signals"] = signals
        __props__.__dict__["strategy"] = strategy
        __props__.__dict__["tags"] = tags
        __props__.__dict__["update_states"] = update_states
        __props__.__dict__["user_data"] = user_data
        __props__.__dict__["vm_name"] = vm_name
        __props__.__dict__["vm_name_prefix"] = vm_name_prefix
        __props__.__dict__["vm_sizes"] = vm_sizes
        __props__.__dict__["zones"] = zones
        return StatefulNodeAzure(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="attachDataDisks")
    def attach_data_disks(self) -> pulumi.Output[Optional[Sequence['outputs.StatefulNodeAzureAttachDataDisk']]]:
        return pulumi.get(self, "attach_data_disks")

    @property
    @pulumi.getter(name="bootDiagnostics")
    def boot_diagnostics(self) -> pulumi.Output[Sequence['outputs.StatefulNodeAzureBootDiagnostic']]:
        return pulumi.get(self, "boot_diagnostics")

    @property
    @pulumi.getter(name="customData")
    def custom_data(self) -> pulumi.Output[str]:
        return pulumi.get(self, "custom_data")

    @property
    @pulumi.getter(name="dataDisks")
    def data_disks(self) -> pulumi.Output[Optional[Sequence['outputs.StatefulNodeAzureDataDisk']]]:
        return pulumi.get(self, "data_disks")

    @property
    @pulumi.getter(name="dataDisksPersistenceMode")
    def data_disks_persistence_mode(self) -> pulumi.Output[str]:
        return pulumi.get(self, "data_disks_persistence_mode")

    @property
    @pulumi.getter
    def deletes(self) -> pulumi.Output[Optional[Sequence['outputs.StatefulNodeAzureDelete']]]:
        return pulumi.get(self, "deletes")

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

    @property
    @pulumi.getter(name="detachDataDisks")
    def detach_data_disks(self) -> pulumi.Output[Optional[Sequence['outputs.StatefulNodeAzureDetachDataDisk']]]:
        return pulumi.get(self, "detach_data_disks")

    @property
    @pulumi.getter
    def extensions(self) -> pulumi.Output[Sequence['outputs.StatefulNodeAzureExtension']]:
        return pulumi.get(self, "extensions")

    @property
    @pulumi.getter
    def health(self) -> pulumi.Output['outputs.StatefulNodeAzureHealth']:
        return pulumi.get(self, "health")

    @property
    @pulumi.getter
    def image(self) -> pulumi.Output[Optional['outputs.StatefulNodeAzureImage']]:
        return pulumi.get(self, "image")

    @property
    @pulumi.getter(name="importVms")
    def import_vms(self) -> pulumi.Output[Optional[Sequence['outputs.StatefulNodeAzureImportVm']]]:
        return pulumi.get(self, "import_vms")

    @property
    @pulumi.getter(name="licenseType")
    def license_type(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "license_type")

    @property
    @pulumi.getter(name="loadBalancers")
    def load_balancers(self) -> pulumi.Output[Sequence['outputs.StatefulNodeAzureLoadBalancer']]:
        return pulumi.get(self, "load_balancers")

    @property
    @pulumi.getter
    def login(self) -> pulumi.Output[Optional['outputs.StatefulNodeAzureLogin']]:
        return pulumi.get(self, "login")

    @property
    @pulumi.getter(name="managedServiceIdentities")
    def managed_service_identities(self) -> pulumi.Output[Sequence['outputs.StatefulNodeAzureManagedServiceIdentity']]:
        return pulumi.get(self, "managed_service_identities")

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

    @property
    @pulumi.getter
    def network(self) -> pulumi.Output[Optional['outputs.StatefulNodeAzureNetwork']]:
        return pulumi.get(self, "network")

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

    @property
    @pulumi.getter(name="osDisk")
    def os_disk(self) -> pulumi.Output[Optional['outputs.StatefulNodeAzureOsDisk']]:
        return pulumi.get(self, "os_disk")

    @property
    @pulumi.getter(name="osDiskPersistenceMode")
    def os_disk_persistence_mode(self) -> pulumi.Output[str]:
        return pulumi.get(self, "os_disk_persistence_mode")

    @property
    @pulumi.getter(name="preferredZone")
    def preferred_zone(self) -> pulumi.Output[str]:
        return pulumi.get(self, "preferred_zone")

    @property
    @pulumi.getter(name="proximityPlacementGroups")
    def proximity_placement_groups(self) -> pulumi.Output[Sequence['outputs.StatefulNodeAzureProximityPlacementGroup']]:
        return pulumi.get(self, "proximity_placement_groups")

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

    @property
    @pulumi.getter(name="resourceGroupName")
    def resource_group_name(self) -> pulumi.Output[str]:
        return pulumi.get(self, "resource_group_name")

    @property
    @pulumi.getter(name="schedulingTasks")
    def scheduling_tasks(self) -> pulumi.Output[Sequence['outputs.StatefulNodeAzureSchedulingTask']]:
        return pulumi.get(self, "scheduling_tasks")

    @property
    @pulumi.getter
    def secrets(self) -> pulumi.Output[Optional[Sequence['outputs.StatefulNodeAzureSecret']]]:
        return pulumi.get(self, "secrets")

    @property
    @pulumi.getter
    def security(self) -> pulumi.Output[Optional['outputs.StatefulNodeAzureSecurity']]:
        return pulumi.get(self, "security")

    @property
    @pulumi.getter(name="shouldPersistDataDisks")
    def should_persist_data_disks(self) -> pulumi.Output[bool]:
        return pulumi.get(self, "should_persist_data_disks")

    @property
    @pulumi.getter(name="shouldPersistNetwork")
    def should_persist_network(self) -> pulumi.Output[bool]:
        return pulumi.get(self, "should_persist_network")

    @property
    @pulumi.getter(name="shouldPersistOsDisk")
    def should_persist_os_disk(self) -> pulumi.Output[bool]:
        return pulumi.get(self, "should_persist_os_disk")

    @property
    @pulumi.getter(name="shouldPersistVm")
    def should_persist_vm(self) -> pulumi.Output[bool]:
        return pulumi.get(self, "should_persist_vm")

    @property
    @pulumi.getter(name="shutdownScript")
    def shutdown_script(self) -> pulumi.Output[str]:
        return pulumi.get(self, "shutdown_script")

    @property
    @pulumi.getter
    def signals(self) -> pulumi.Output[Sequence['outputs.StatefulNodeAzureSignal']]:
        return pulumi.get(self, "signals")

    @property
    @pulumi.getter
    def strategy(self) -> pulumi.Output['outputs.StatefulNodeAzureStrategy']:
        return pulumi.get(self, "strategy")

    @property
    @pulumi.getter
    def tags(self) -> pulumi.Output[Sequence['outputs.StatefulNodeAzureTag']]:
        return pulumi.get(self, "tags")

    @property
    @pulumi.getter(name="updateStates")
    def update_states(self) -> pulumi.Output[Optional[Sequence['outputs.StatefulNodeAzureUpdateState']]]:
        return pulumi.get(self, "update_states")

    @property
    @pulumi.getter(name="userData")
    def user_data(self) -> pulumi.Output[str]:
        return pulumi.get(self, "user_data")

    @property
    @pulumi.getter(name="vmName")
    def vm_name(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "vm_name")

    @property
    @pulumi.getter(name="vmNamePrefix")
    def vm_name_prefix(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "vm_name_prefix")

    @property
    @pulumi.getter(name="vmSizes")
    def vm_sizes(self) -> pulumi.Output['outputs.StatefulNodeAzureVmSizes']:
        return pulumi.get(self, "vm_sizes")

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

