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

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

__all__ = [
    'GlobalVMShutdownScheduleNotificationSettingsArgs',
    'GlobalVMShutdownScheduleNotificationSettingsArgsDict',
    'LinuxVirtualMachineGalleryImageReferenceArgs',
    'LinuxVirtualMachineGalleryImageReferenceArgsDict',
    'LinuxVirtualMachineInboundNatRuleArgs',
    'LinuxVirtualMachineInboundNatRuleArgsDict',
    'ScheduleDailyRecurrenceArgs',
    'ScheduleDailyRecurrenceArgsDict',
    'ScheduleHourlyRecurrenceArgs',
    'ScheduleHourlyRecurrenceArgsDict',
    'ScheduleNotificationSettingsArgs',
    'ScheduleNotificationSettingsArgsDict',
    'ScheduleWeeklyRecurrenceArgs',
    'ScheduleWeeklyRecurrenceArgsDict',
    'VirtualNetworkSubnetArgs',
    'VirtualNetworkSubnetArgsDict',
    'VirtualNetworkSubnetSharedPublicIpAddressArgs',
    'VirtualNetworkSubnetSharedPublicIpAddressArgsDict',
    'VirtualNetworkSubnetSharedPublicIpAddressAllowedPortArgs',
    'VirtualNetworkSubnetSharedPublicIpAddressAllowedPortArgsDict',
    'WindowsVirtualMachineGalleryImageReferenceArgs',
    'WindowsVirtualMachineGalleryImageReferenceArgsDict',
    'WindowsVirtualMachineInboundNatRuleArgs',
    'WindowsVirtualMachineInboundNatRuleArgsDict',
]

MYPY = False

if not MYPY:
    class GlobalVMShutdownScheduleNotificationSettingsArgsDict(TypedDict):
        enabled: pulumi.Input[bool]
        """
        Whether to enable pre-shutdown notifications. Possible values are `true` and `false`.
        """
        email: NotRequired[pulumi.Input[str]]
        """
        E-mail address to which the notification will be sent.
        """
        time_in_minutes: NotRequired[pulumi.Input[int]]
        """
        Time in minutes between 15 and 120 before a shutdown event at which a notification will be sent. Defaults to `30`.
        """
        webhook_url: NotRequired[pulumi.Input[str]]
        """
        The webhook URL to which the notification will be sent.
        """
elif False:
    GlobalVMShutdownScheduleNotificationSettingsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GlobalVMShutdownScheduleNotificationSettingsArgs:
    def __init__(__self__, *,
                 enabled: pulumi.Input[bool],
                 email: Optional[pulumi.Input[str]] = None,
                 time_in_minutes: Optional[pulumi.Input[int]] = None,
                 webhook_url: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] enabled: Whether to enable pre-shutdown notifications. Possible values are `true` and `false`.
        :param pulumi.Input[str] email: E-mail address to which the notification will be sent.
        :param pulumi.Input[int] time_in_minutes: Time in minutes between 15 and 120 before a shutdown event at which a notification will be sent. Defaults to `30`.
        :param pulumi.Input[str] webhook_url: The webhook URL to which the notification will be sent.
        """
        pulumi.set(__self__, "enabled", enabled)
        if email is not None:
            pulumi.set(__self__, "email", email)
        if time_in_minutes is not None:
            pulumi.set(__self__, "time_in_minutes", time_in_minutes)
        if webhook_url is not None:
            pulumi.set(__self__, "webhook_url", webhook_url)

    @property
    @pulumi.getter
    def enabled(self) -> pulumi.Input[bool]:
        """
        Whether to enable pre-shutdown notifications. Possible values are `true` and `false`.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter
    def email(self) -> Optional[pulumi.Input[str]]:
        """
        E-mail address to which the notification will be sent.
        """
        return pulumi.get(self, "email")

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

    @property
    @pulumi.getter(name="timeInMinutes")
    def time_in_minutes(self) -> Optional[pulumi.Input[int]]:
        """
        Time in minutes between 15 and 120 before a shutdown event at which a notification will be sent. Defaults to `30`.
        """
        return pulumi.get(self, "time_in_minutes")

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

    @property
    @pulumi.getter(name="webhookUrl")
    def webhook_url(self) -> Optional[pulumi.Input[str]]:
        """
        The webhook URL to which the notification will be sent.
        """
        return pulumi.get(self, "webhook_url")

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


if not MYPY:
    class LinuxVirtualMachineGalleryImageReferenceArgsDict(TypedDict):
        offer: pulumi.Input[str]
        """
        The Offer of the Gallery Image. Changing this forces a new resource to be created.
        """
        publisher: pulumi.Input[str]
        """
        The Publisher of the Gallery Image. Changing this forces a new resource to be created.
        """
        sku: pulumi.Input[str]
        """
        The SKU of the Gallery Image. Changing this forces a new resource to be created.
        """
        version: pulumi.Input[str]
        """
        The Version of the Gallery Image. Changing this forces a new resource to be created.
        """
elif False:
    LinuxVirtualMachineGalleryImageReferenceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class LinuxVirtualMachineGalleryImageReferenceArgs:
    def __init__(__self__, *,
                 offer: pulumi.Input[str],
                 publisher: pulumi.Input[str],
                 sku: pulumi.Input[str],
                 version: pulumi.Input[str]):
        """
        :param pulumi.Input[str] offer: The Offer of the Gallery Image. Changing this forces a new resource to be created.
        :param pulumi.Input[str] publisher: The Publisher of the Gallery Image. Changing this forces a new resource to be created.
        :param pulumi.Input[str] sku: The SKU of the Gallery Image. Changing this forces a new resource to be created.
        :param pulumi.Input[str] version: The Version of the Gallery Image. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "offer", offer)
        pulumi.set(__self__, "publisher", publisher)
        pulumi.set(__self__, "sku", sku)
        pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter
    def offer(self) -> pulumi.Input[str]:
        """
        The Offer of the Gallery Image. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "offer")

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

    @property
    @pulumi.getter
    def publisher(self) -> pulumi.Input[str]:
        """
        The Publisher of the Gallery Image. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "publisher")

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

    @property
    @pulumi.getter
    def sku(self) -> pulumi.Input[str]:
        """
        The SKU of the Gallery Image. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "sku")

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

    @property
    @pulumi.getter
    def version(self) -> pulumi.Input[str]:
        """
        The Version of the Gallery Image. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "version")

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


if not MYPY:
    class LinuxVirtualMachineInboundNatRuleArgsDict(TypedDict):
        backend_port: pulumi.Input[int]
        """
        The Backend Port associated with this NAT Rule. Changing this forces a new resource to be created.
        """
        protocol: pulumi.Input[str]
        """
        The Protocol used for this NAT Rule. Possible values are `Tcp` and `Udp`.
        """
        frontend_port: NotRequired[pulumi.Input[int]]
        """
        The frontend port associated with this Inbound NAT Rule.
        """
elif False:
    LinuxVirtualMachineInboundNatRuleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class LinuxVirtualMachineInboundNatRuleArgs:
    def __init__(__self__, *,
                 backend_port: pulumi.Input[int],
                 protocol: pulumi.Input[str],
                 frontend_port: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] backend_port: The Backend Port associated with this NAT Rule. Changing this forces a new resource to be created.
        :param pulumi.Input[str] protocol: The Protocol used for this NAT Rule. Possible values are `Tcp` and `Udp`.
        :param pulumi.Input[int] frontend_port: The frontend port associated with this Inbound NAT Rule.
        """
        pulumi.set(__self__, "backend_port", backend_port)
        pulumi.set(__self__, "protocol", protocol)
        if frontend_port is not None:
            pulumi.set(__self__, "frontend_port", frontend_port)

    @property
    @pulumi.getter(name="backendPort")
    def backend_port(self) -> pulumi.Input[int]:
        """
        The Backend Port associated with this NAT Rule. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "backend_port")

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

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        """
        The Protocol used for this NAT Rule. Possible values are `Tcp` and `Udp`.
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter(name="frontendPort")
    def frontend_port(self) -> Optional[pulumi.Input[int]]:
        """
        The frontend port associated with this Inbound NAT Rule.
        """
        return pulumi.get(self, "frontend_port")

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


if not MYPY:
    class ScheduleDailyRecurrenceArgsDict(TypedDict):
        time: pulumi.Input[str]
        """
        The time each day when the schedule takes effect.
        """
elif False:
    ScheduleDailyRecurrenceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ScheduleDailyRecurrenceArgs:
    def __init__(__self__, *,
                 time: pulumi.Input[str]):
        """
        :param pulumi.Input[str] time: The time each day when the schedule takes effect.
        """
        pulumi.set(__self__, "time", time)

    @property
    @pulumi.getter
    def time(self) -> pulumi.Input[str]:
        """
        The time each day when the schedule takes effect.
        """
        return pulumi.get(self, "time")

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


if not MYPY:
    class ScheduleHourlyRecurrenceArgsDict(TypedDict):
        minute: pulumi.Input[int]
        """
        Minutes of the hour the schedule will run.
        """
elif False:
    ScheduleHourlyRecurrenceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ScheduleHourlyRecurrenceArgs:
    def __init__(__self__, *,
                 minute: pulumi.Input[int]):
        """
        :param pulumi.Input[int] minute: Minutes of the hour the schedule will run.
        """
        pulumi.set(__self__, "minute", minute)

    @property
    @pulumi.getter
    def minute(self) -> pulumi.Input[int]:
        """
        Minutes of the hour the schedule will run.
        """
        return pulumi.get(self, "minute")

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


if not MYPY:
    class ScheduleNotificationSettingsArgsDict(TypedDict):
        status: NotRequired[pulumi.Input[str]]
        """
        The status of the notification. Possible values are `Enabled` and `Disabled`. Defaults to `Disabled`
        """
        time_in_minutes: NotRequired[pulumi.Input[int]]
        """
        Time in minutes before event at which notification will be sent.
        """
        webhook_url: NotRequired[pulumi.Input[str]]
        """
        The webhook URL to which the notification will be sent.
        """
elif False:
    ScheduleNotificationSettingsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ScheduleNotificationSettingsArgs:
    def __init__(__self__, *,
                 status: Optional[pulumi.Input[str]] = None,
                 time_in_minutes: Optional[pulumi.Input[int]] = None,
                 webhook_url: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] status: The status of the notification. Possible values are `Enabled` and `Disabled`. Defaults to `Disabled`
        :param pulumi.Input[int] time_in_minutes: Time in minutes before event at which notification will be sent.
        :param pulumi.Input[str] webhook_url: The webhook URL to which the notification will be sent.
        """
        if status is not None:
            pulumi.set(__self__, "status", status)
        if time_in_minutes is not None:
            pulumi.set(__self__, "time_in_minutes", time_in_minutes)
        if webhook_url is not None:
            pulumi.set(__self__, "webhook_url", webhook_url)

    @property
    @pulumi.getter
    def status(self) -> Optional[pulumi.Input[str]]:
        """
        The status of the notification. Possible values are `Enabled` and `Disabled`. Defaults to `Disabled`
        """
        return pulumi.get(self, "status")

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

    @property
    @pulumi.getter(name="timeInMinutes")
    def time_in_minutes(self) -> Optional[pulumi.Input[int]]:
        """
        Time in minutes before event at which notification will be sent.
        """
        return pulumi.get(self, "time_in_minutes")

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

    @property
    @pulumi.getter(name="webhookUrl")
    def webhook_url(self) -> Optional[pulumi.Input[str]]:
        """
        The webhook URL to which the notification will be sent.
        """
        return pulumi.get(self, "webhook_url")

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


if not MYPY:
    class ScheduleWeeklyRecurrenceArgsDict(TypedDict):
        time: pulumi.Input[str]
        """
        The time when the schedule takes effect.
        """
        week_days: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of days that this schedule takes effect . Possible values include `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, `Saturday` and `Sunday`.
        """
elif False:
    ScheduleWeeklyRecurrenceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ScheduleWeeklyRecurrenceArgs:
    def __init__(__self__, *,
                 time: pulumi.Input[str],
                 week_days: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] time: The time when the schedule takes effect.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] week_days: A list of days that this schedule takes effect . Possible values include `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, `Saturday` and `Sunday`.
        """
        pulumi.set(__self__, "time", time)
        if week_days is not None:
            pulumi.set(__self__, "week_days", week_days)

    @property
    @pulumi.getter
    def time(self) -> pulumi.Input[str]:
        """
        The time when the schedule takes effect.
        """
        return pulumi.get(self, "time")

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

    @property
    @pulumi.getter(name="weekDays")
    def week_days(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of days that this schedule takes effect . Possible values include `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, `Saturday` and `Sunday`.
        """
        return pulumi.get(self, "week_days")

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


if not MYPY:
    class VirtualNetworkSubnetArgsDict(TypedDict):
        name: NotRequired[pulumi.Input[str]]
        """
        Specifies the name of the Dev Test Virtual Network. Changing this forces a new resource to be created.
        """
        shared_public_ip_address: NotRequired[pulumi.Input['VirtualNetworkSubnetSharedPublicIpAddressArgsDict']]
        """
        A `shared_public_ip_address` block as defined below.
        """
        use_in_virtual_machine_creation: NotRequired[pulumi.Input[str]]
        """
        Can this subnet be used for creating Virtual Machines? Possible values are `Allow`, `Default` and `Deny`. Defaults to `Allow`.
        """
        use_public_ip_address: NotRequired[pulumi.Input[str]]
        """
        Can Virtual Machines in this Subnet use Public IP Addresses? Possible values are `Allow`, `Default` and `Deny`. Defaults to `Allow`.
        """
elif False:
    VirtualNetworkSubnetArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkSubnetArgs:
    def __init__(__self__, *,
                 name: Optional[pulumi.Input[str]] = None,
                 shared_public_ip_address: Optional[pulumi.Input['VirtualNetworkSubnetSharedPublicIpAddressArgs']] = None,
                 use_in_virtual_machine_creation: Optional[pulumi.Input[str]] = None,
                 use_public_ip_address: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: Specifies the name of the Dev Test Virtual Network. Changing this forces a new resource to be created.
        :param pulumi.Input['VirtualNetworkSubnetSharedPublicIpAddressArgs'] shared_public_ip_address: A `shared_public_ip_address` block as defined below.
        :param pulumi.Input[str] use_in_virtual_machine_creation: Can this subnet be used for creating Virtual Machines? Possible values are `Allow`, `Default` and `Deny`. Defaults to `Allow`.
        :param pulumi.Input[str] use_public_ip_address: Can Virtual Machines in this Subnet use Public IP Addresses? Possible values are `Allow`, `Default` and `Deny`. Defaults to `Allow`.
        """
        if name is not None:
            pulumi.set(__self__, "name", name)
        if shared_public_ip_address is not None:
            pulumi.set(__self__, "shared_public_ip_address", shared_public_ip_address)
        if use_in_virtual_machine_creation is not None:
            pulumi.set(__self__, "use_in_virtual_machine_creation", use_in_virtual_machine_creation)
        if use_public_ip_address is not None:
            pulumi.set(__self__, "use_public_ip_address", use_public_ip_address)

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies the name of the Dev Test Virtual Network. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="sharedPublicIpAddress")
    def shared_public_ip_address(self) -> Optional[pulumi.Input['VirtualNetworkSubnetSharedPublicIpAddressArgs']]:
        """
        A `shared_public_ip_address` block as defined below.
        """
        return pulumi.get(self, "shared_public_ip_address")

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

    @property
    @pulumi.getter(name="useInVirtualMachineCreation")
    def use_in_virtual_machine_creation(self) -> Optional[pulumi.Input[str]]:
        """
        Can this subnet be used for creating Virtual Machines? Possible values are `Allow`, `Default` and `Deny`. Defaults to `Allow`.
        """
        return pulumi.get(self, "use_in_virtual_machine_creation")

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

    @property
    @pulumi.getter(name="usePublicIpAddress")
    def use_public_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        Can Virtual Machines in this Subnet use Public IP Addresses? Possible values are `Allow`, `Default` and `Deny`. Defaults to `Allow`.
        """
        return pulumi.get(self, "use_public_ip_address")

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


if not MYPY:
    class VirtualNetworkSubnetSharedPublicIpAddressArgsDict(TypedDict):
        allowed_ports: NotRequired[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkSubnetSharedPublicIpAddressAllowedPortArgsDict']]]]
        """
        A list of `allowed_ports` blocks as defined below.
        """
elif False:
    VirtualNetworkSubnetSharedPublicIpAddressArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkSubnetSharedPublicIpAddressArgs:
    def __init__(__self__, *,
                 allowed_ports: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkSubnetSharedPublicIpAddressAllowedPortArgs']]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['VirtualNetworkSubnetSharedPublicIpAddressAllowedPortArgs']]] allowed_ports: A list of `allowed_ports` blocks as defined below.
        """
        if allowed_ports is not None:
            pulumi.set(__self__, "allowed_ports", allowed_ports)

    @property
    @pulumi.getter(name="allowedPorts")
    def allowed_ports(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkSubnetSharedPublicIpAddressAllowedPortArgs']]]]:
        """
        A list of `allowed_ports` blocks as defined below.
        """
        return pulumi.get(self, "allowed_ports")

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


if not MYPY:
    class VirtualNetworkSubnetSharedPublicIpAddressAllowedPortArgsDict(TypedDict):
        backend_port: NotRequired[pulumi.Input[int]]
        """
        The port on the Virtual Machine that the traffic will be sent to.
        """
        transport_protocol: NotRequired[pulumi.Input[str]]
        """
        The transport protocol that the traffic will use. Possible values are `TCP` and `UDP`.
        """
elif False:
    VirtualNetworkSubnetSharedPublicIpAddressAllowedPortArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkSubnetSharedPublicIpAddressAllowedPortArgs:
    def __init__(__self__, *,
                 backend_port: Optional[pulumi.Input[int]] = None,
                 transport_protocol: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] backend_port: The port on the Virtual Machine that the traffic will be sent to.
        :param pulumi.Input[str] transport_protocol: The transport protocol that the traffic will use. Possible values are `TCP` and `UDP`.
        """
        if backend_port is not None:
            pulumi.set(__self__, "backend_port", backend_port)
        if transport_protocol is not None:
            pulumi.set(__self__, "transport_protocol", transport_protocol)

    @property
    @pulumi.getter(name="backendPort")
    def backend_port(self) -> Optional[pulumi.Input[int]]:
        """
        The port on the Virtual Machine that the traffic will be sent to.
        """
        return pulumi.get(self, "backend_port")

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

    @property
    @pulumi.getter(name="transportProtocol")
    def transport_protocol(self) -> Optional[pulumi.Input[str]]:
        """
        The transport protocol that the traffic will use. Possible values are `TCP` and `UDP`.
        """
        return pulumi.get(self, "transport_protocol")

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


if not MYPY:
    class WindowsVirtualMachineGalleryImageReferenceArgsDict(TypedDict):
        offer: pulumi.Input[str]
        """
        The Offer of the Gallery Image. Changing this forces a new resource to be created.
        """
        publisher: pulumi.Input[str]
        """
        The Publisher of the Gallery Image. Changing this forces a new resource to be created.
        """
        sku: pulumi.Input[str]
        """
        The SKU of the Gallery Image. Changing this forces a new resource to be created.
        """
        version: pulumi.Input[str]
        """
        The Version of the Gallery Image. Changing this forces a new resource to be created.
        """
elif False:
    WindowsVirtualMachineGalleryImageReferenceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class WindowsVirtualMachineGalleryImageReferenceArgs:
    def __init__(__self__, *,
                 offer: pulumi.Input[str],
                 publisher: pulumi.Input[str],
                 sku: pulumi.Input[str],
                 version: pulumi.Input[str]):
        """
        :param pulumi.Input[str] offer: The Offer of the Gallery Image. Changing this forces a new resource to be created.
        :param pulumi.Input[str] publisher: The Publisher of the Gallery Image. Changing this forces a new resource to be created.
        :param pulumi.Input[str] sku: The SKU of the Gallery Image. Changing this forces a new resource to be created.
        :param pulumi.Input[str] version: The Version of the Gallery Image. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "offer", offer)
        pulumi.set(__self__, "publisher", publisher)
        pulumi.set(__self__, "sku", sku)
        pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter
    def offer(self) -> pulumi.Input[str]:
        """
        The Offer of the Gallery Image. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "offer")

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

    @property
    @pulumi.getter
    def publisher(self) -> pulumi.Input[str]:
        """
        The Publisher of the Gallery Image. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "publisher")

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

    @property
    @pulumi.getter
    def sku(self) -> pulumi.Input[str]:
        """
        The SKU of the Gallery Image. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "sku")

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

    @property
    @pulumi.getter
    def version(self) -> pulumi.Input[str]:
        """
        The Version of the Gallery Image. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "version")

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


if not MYPY:
    class WindowsVirtualMachineInboundNatRuleArgsDict(TypedDict):
        backend_port: pulumi.Input[int]
        """
        The Backend Port associated with this NAT Rule. Changing this forces a new resource to be created.
        """
        protocol: pulumi.Input[str]
        """
        The Protocol used for this NAT Rule. Possible values are `Tcp` and `Udp`.
        """
        frontend_port: NotRequired[pulumi.Input[int]]
        """
        The frontend port associated with this Inbound NAT Rule.
        """
elif False:
    WindowsVirtualMachineInboundNatRuleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class WindowsVirtualMachineInboundNatRuleArgs:
    def __init__(__self__, *,
                 backend_port: pulumi.Input[int],
                 protocol: pulumi.Input[str],
                 frontend_port: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] backend_port: The Backend Port associated with this NAT Rule. Changing this forces a new resource to be created.
        :param pulumi.Input[str] protocol: The Protocol used for this NAT Rule. Possible values are `Tcp` and `Udp`.
        :param pulumi.Input[int] frontend_port: The frontend port associated with this Inbound NAT Rule.
        """
        pulumi.set(__self__, "backend_port", backend_port)
        pulumi.set(__self__, "protocol", protocol)
        if frontend_port is not None:
            pulumi.set(__self__, "frontend_port", frontend_port)

    @property
    @pulumi.getter(name="backendPort")
    def backend_port(self) -> pulumi.Input[int]:
        """
        The Backend Port associated with this NAT Rule. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "backend_port")

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

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        """
        The Protocol used for this NAT Rule. Possible values are `Tcp` and `Udp`.
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter(name="frontendPort")
    def frontend_port(self) -> Optional[pulumi.Input[int]]:
        """
        The frontend port associated with this Inbound NAT Rule.
        """
        return pulumi.get(self, "frontend_port")

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


