# 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__ = ['VirtualMachineArgs', 'VirtualMachine']

@pulumi.input_type
class VirtualMachineArgs:
    def __init__(__self__, *,
                 node_name: pulumi.Input[str],
                 acpi: Optional[pulumi.Input[bool]] = None,
                 agent: Optional[pulumi.Input['VirtualMachineAgentArgs']] = None,
                 audio_device: Optional[pulumi.Input['VirtualMachineAudioDeviceArgs']] = None,
                 bios: Optional[pulumi.Input[str]] = None,
                 boot_orders: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 cdrom: Optional[pulumi.Input['VirtualMachineCdromArgs']] = None,
                 clone: Optional[pulumi.Input['VirtualMachineCloneArgs']] = None,
                 cpu: Optional[pulumi.Input['VirtualMachineCpuArgs']] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 disks: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineDiskArgs']]]] = None,
                 efi_disk: Optional[pulumi.Input['VirtualMachineEfiDiskArgs']] = None,
                 hook_script_file_id: Optional[pulumi.Input[str]] = None,
                 hostpcis: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineHostpciArgs']]]] = None,
                 initialization: Optional[pulumi.Input['VirtualMachineInitializationArgs']] = None,
                 keyboard_layout: Optional[pulumi.Input[str]] = None,
                 kvm_arguments: Optional[pulumi.Input[str]] = None,
                 mac_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 machine: Optional[pulumi.Input[str]] = None,
                 memory: Optional[pulumi.Input['VirtualMachineMemoryArgs']] = None,
                 migrate: Optional[pulumi.Input[bool]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 network_devices: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineNetworkDeviceArgs']]]] = None,
                 numas: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineNumaArgs']]]] = None,
                 on_boot: Optional[pulumi.Input[bool]] = None,
                 operating_system: Optional[pulumi.Input['VirtualMachineOperatingSystemArgs']] = None,
                 pool_id: Optional[pulumi.Input[str]] = None,
                 protection: Optional[pulumi.Input[bool]] = None,
                 reboot: Optional[pulumi.Input[bool]] = None,
                 scsi_hardware: Optional[pulumi.Input[str]] = None,
                 serial_devices: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineSerialDeviceArgs']]]] = None,
                 smbios: Optional[pulumi.Input['VirtualMachineSmbiosArgs']] = None,
                 started: Optional[pulumi.Input[bool]] = None,
                 startup: Optional[pulumi.Input['VirtualMachineStartupArgs']] = None,
                 stop_on_destroy: Optional[pulumi.Input[bool]] = None,
                 tablet_device: Optional[pulumi.Input[bool]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 template: Optional[pulumi.Input[bool]] = None,
                 timeout_clone: Optional[pulumi.Input[int]] = None,
                 timeout_create: Optional[pulumi.Input[int]] = None,
                 timeout_migrate: Optional[pulumi.Input[int]] = None,
                 timeout_move_disk: Optional[pulumi.Input[int]] = None,
                 timeout_reboot: Optional[pulumi.Input[int]] = None,
                 timeout_shutdown_vm: Optional[pulumi.Input[int]] = None,
                 timeout_start_vm: Optional[pulumi.Input[int]] = None,
                 timeout_stop_vm: Optional[pulumi.Input[int]] = None,
                 tpm_state: Optional[pulumi.Input['VirtualMachineTpmStateArgs']] = None,
                 usbs: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineUsbArgs']]]] = None,
                 vga: Optional[pulumi.Input['VirtualMachineVgaArgs']] = None,
                 vm_id: Optional[pulumi.Input[int]] = None,
                 watchdog: Optional[pulumi.Input['VirtualMachineWatchdogArgs']] = None):
        """
        The set of arguments for constructing a VirtualMachine resource.
        :param pulumi.Input[str] node_name: The name of the node to assign the virtual machine
               to.
        :param pulumi.Input[bool] acpi: Whether to enable ACPI (defaults to `true`).
        :param pulumi.Input['VirtualMachineAgentArgs'] agent: The QEMU agent configuration.
        :param pulumi.Input['VirtualMachineAudioDeviceArgs'] audio_device: An audio device.
        :param pulumi.Input[str] bios: The BIOS implementation (defaults to `seabios`).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] boot_orders: Specify a list of devices to boot from in the order
               they appear in the list (defaults to `[]`).
        :param pulumi.Input['VirtualMachineCdromArgs'] cdrom: The CDROM configuration.
        :param pulumi.Input['VirtualMachineCloneArgs'] clone: The cloning configuration.
        :param pulumi.Input['VirtualMachineCpuArgs'] cpu: The CPU configuration.
        :param pulumi.Input[str] description: The description.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineDiskArgs']]] disks: A disk (multiple blocks supported).
        :param pulumi.Input['VirtualMachineEfiDiskArgs'] efi_disk: The efi disk device (required if `bios` is set
               to `ovmf`)
        :param pulumi.Input[str] hook_script_file_id: The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineHostpciArgs']]] hostpcis: A host PCI device mapping (multiple blocks supported).
        :param pulumi.Input['VirtualMachineInitializationArgs'] initialization: The cloud-init configuration.
        :param pulumi.Input[str] keyboard_layout: The keyboard layout (defaults to `en-us`).
        :param pulumi.Input[str] kvm_arguments: Arbitrary arguments passed to kvm.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] mac_addresses: The MAC addresses published by the QEMU agent with fallback
               to the network device configuration, if the agent is disabled
        :param pulumi.Input[str] machine: The VM machine type (defaults to `pc`).
        :param pulumi.Input['VirtualMachineMemoryArgs'] memory: The memory configuration.
        :param pulumi.Input[bool] migrate: Migrate the VM on node change instead of re-creating
               it (defaults to `false`).
        :param pulumi.Input[str] name: The virtual machine name.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineNetworkDeviceArgs']]] network_devices: A network device (multiple blocks supported).
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineNumaArgs']]] numas: The NUMA configuration.
        :param pulumi.Input[bool] on_boot: Specifies whether a VM will be started during system
               boot. (defaults to `true`)
        :param pulumi.Input['VirtualMachineOperatingSystemArgs'] operating_system: The Operating System configuration.
        :param pulumi.Input[str] pool_id: The identifier for a pool to assign the virtual machine to.
        :param pulumi.Input[bool] protection: Sets the protection flag of the VM. This will disable the remove VM and remove disk operations (defaults to `false`).
        :param pulumi.Input[bool] reboot: Reboot the VM after initial creation. (defaults to `false`)
        :param pulumi.Input[str] scsi_hardware: The SCSI hardware type (defaults to
               `virtio-scsi-pci`).
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineSerialDeviceArgs']]] serial_devices: A serial device (multiple blocks supported).
        :param pulumi.Input['VirtualMachineSmbiosArgs'] smbios: The SMBIOS (type1) settings for the VM.
        :param pulumi.Input[bool] started: Whether to start the virtual machine (defaults
               to `true`).
        :param pulumi.Input['VirtualMachineStartupArgs'] startup: Defines startup and shutdown behavior of the VM.
        :param pulumi.Input[bool] stop_on_destroy: Whether to stop rather than shutdown on VM destroy (defaults to `false`)
        :param pulumi.Input[bool] tablet_device: Whether to enable the USB tablet device (defaults
               to `true`).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: A list of tags of the VM. This is only meta information (
               defaults to `[]`). Note: Proxmox always sorts the VM tags. If the list in
               template is not sorted, then Proxmox will always report a difference on the
               resource. You may use the `ignore_changes` lifecycle meta-argument to ignore
               changes to this attribute.
        :param pulumi.Input[bool] template: Whether to create a template (defaults to `false`).
        :param pulumi.Input[int] timeout_clone: Timeout for cloning a VM in seconds (defaults to
               1800).
        :param pulumi.Input[int] timeout_create: Timeout for creating a VM in seconds (defaults to
               1800).
        :param pulumi.Input[int] timeout_migrate: Timeout for migrating the VM (defaults to
               1800).
        :param pulumi.Input[int] timeout_move_disk: MoveDisk timeout
        :param pulumi.Input[int] timeout_reboot: Timeout for rebooting a VM in seconds (defaults
               to 1800).
        :param pulumi.Input[int] timeout_shutdown_vm: Timeout for shutting down a VM in seconds (
               defaults to 1800).
        :param pulumi.Input[int] timeout_start_vm: Timeout for starting a VM in seconds (defaults
               to 1800).
        :param pulumi.Input[int] timeout_stop_vm: Timeout for stopping a VM in seconds (defaults
               to 300).
        :param pulumi.Input['VirtualMachineTpmStateArgs'] tpm_state: The TPM state device.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineUsbArgs']]] usbs: A host USB device mapping (multiple blocks supported).
        :param pulumi.Input['VirtualMachineVgaArgs'] vga: The VGA configuration.
        :param pulumi.Input[int] vm_id: The VM identifier.
        :param pulumi.Input['VirtualMachineWatchdogArgs'] watchdog: The watchdog configuration. Once enabled (by a guest action), the watchdog must be periodically polled by an agent inside the guest or else the watchdog will reset the guest (or execute the respective action specified).
        """
        pulumi.set(__self__, "node_name", node_name)
        if acpi is not None:
            pulumi.set(__self__, "acpi", acpi)
        if agent is not None:
            pulumi.set(__self__, "agent", agent)
        if audio_device is not None:
            pulumi.set(__self__, "audio_device", audio_device)
        if bios is not None:
            pulumi.set(__self__, "bios", bios)
        if boot_orders is not None:
            pulumi.set(__self__, "boot_orders", boot_orders)
        if cdrom is not None:
            pulumi.set(__self__, "cdrom", cdrom)
        if clone is not None:
            pulumi.set(__self__, "clone", clone)
        if cpu is not None:
            pulumi.set(__self__, "cpu", cpu)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disks is not None:
            pulumi.set(__self__, "disks", disks)
        if efi_disk is not None:
            pulumi.set(__self__, "efi_disk", efi_disk)
        if hook_script_file_id is not None:
            pulumi.set(__self__, "hook_script_file_id", hook_script_file_id)
        if hostpcis is not None:
            pulumi.set(__self__, "hostpcis", hostpcis)
        if initialization is not None:
            pulumi.set(__self__, "initialization", initialization)
        if keyboard_layout is not None:
            pulumi.set(__self__, "keyboard_layout", keyboard_layout)
        if kvm_arguments is not None:
            pulumi.set(__self__, "kvm_arguments", kvm_arguments)
        if mac_addresses is not None:
            pulumi.set(__self__, "mac_addresses", mac_addresses)
        if machine is not None:
            pulumi.set(__self__, "machine", machine)
        if memory is not None:
            pulumi.set(__self__, "memory", memory)
        if migrate is not None:
            pulumi.set(__self__, "migrate", migrate)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if network_devices is not None:
            pulumi.set(__self__, "network_devices", network_devices)
        if numas is not None:
            pulumi.set(__self__, "numas", numas)
        if on_boot is not None:
            pulumi.set(__self__, "on_boot", on_boot)
        if operating_system is not None:
            pulumi.set(__self__, "operating_system", operating_system)
        if pool_id is not None:
            pulumi.set(__self__, "pool_id", pool_id)
        if protection is not None:
            pulumi.set(__self__, "protection", protection)
        if reboot is not None:
            pulumi.set(__self__, "reboot", reboot)
        if scsi_hardware is not None:
            pulumi.set(__self__, "scsi_hardware", scsi_hardware)
        if serial_devices is not None:
            pulumi.set(__self__, "serial_devices", serial_devices)
        if smbios is not None:
            pulumi.set(__self__, "smbios", smbios)
        if started is not None:
            pulumi.set(__self__, "started", started)
        if startup is not None:
            pulumi.set(__self__, "startup", startup)
        if stop_on_destroy is not None:
            pulumi.set(__self__, "stop_on_destroy", stop_on_destroy)
        if tablet_device is not None:
            pulumi.set(__self__, "tablet_device", tablet_device)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if template is not None:
            pulumi.set(__self__, "template", template)
        if timeout_clone is not None:
            pulumi.set(__self__, "timeout_clone", timeout_clone)
        if timeout_create is not None:
            pulumi.set(__self__, "timeout_create", timeout_create)
        if timeout_migrate is not None:
            pulumi.set(__self__, "timeout_migrate", timeout_migrate)
        if timeout_move_disk is not None:
            warnings.warn("""This field is deprecated and will be removed in a future release. An overall operation timeout (timeout_create / timeout_clone / timeout_migrate) is used instead.""", DeprecationWarning)
            pulumi.log.warn("""timeout_move_disk is deprecated: This field is deprecated and will be removed in a future release. An overall operation timeout (timeout_create / timeout_clone / timeout_migrate) is used instead.""")
        if timeout_move_disk is not None:
            pulumi.set(__self__, "timeout_move_disk", timeout_move_disk)
        if timeout_reboot is not None:
            pulumi.set(__self__, "timeout_reboot", timeout_reboot)
        if timeout_shutdown_vm is not None:
            pulumi.set(__self__, "timeout_shutdown_vm", timeout_shutdown_vm)
        if timeout_start_vm is not None:
            pulumi.set(__self__, "timeout_start_vm", timeout_start_vm)
        if timeout_stop_vm is not None:
            pulumi.set(__self__, "timeout_stop_vm", timeout_stop_vm)
        if tpm_state is not None:
            pulumi.set(__self__, "tpm_state", tpm_state)
        if usbs is not None:
            pulumi.set(__self__, "usbs", usbs)
        if vga is not None:
            pulumi.set(__self__, "vga", vga)
        if vm_id is not None:
            pulumi.set(__self__, "vm_id", vm_id)
        if watchdog is not None:
            pulumi.set(__self__, "watchdog", watchdog)

    @property
    @pulumi.getter(name="nodeName")
    def node_name(self) -> pulumi.Input[str]:
        """
        The name of the node to assign the virtual machine
        to.
        """
        return pulumi.get(self, "node_name")

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

    @property
    @pulumi.getter
    def acpi(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to enable ACPI (defaults to `true`).
        """
        return pulumi.get(self, "acpi")

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

    @property
    @pulumi.getter
    def agent(self) -> Optional[pulumi.Input['VirtualMachineAgentArgs']]:
        """
        The QEMU agent configuration.
        """
        return pulumi.get(self, "agent")

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

    @property
    @pulumi.getter(name="audioDevice")
    def audio_device(self) -> Optional[pulumi.Input['VirtualMachineAudioDeviceArgs']]:
        """
        An audio device.
        """
        return pulumi.get(self, "audio_device")

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

    @property
    @pulumi.getter
    def bios(self) -> Optional[pulumi.Input[str]]:
        """
        The BIOS implementation (defaults to `seabios`).
        """
        return pulumi.get(self, "bios")

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

    @property
    @pulumi.getter(name="bootOrders")
    def boot_orders(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specify a list of devices to boot from in the order
        they appear in the list (defaults to `[]`).
        """
        return pulumi.get(self, "boot_orders")

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

    @property
    @pulumi.getter
    def cdrom(self) -> Optional[pulumi.Input['VirtualMachineCdromArgs']]:
        """
        The CDROM configuration.
        """
        return pulumi.get(self, "cdrom")

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

    @property
    @pulumi.getter
    def clone(self) -> Optional[pulumi.Input['VirtualMachineCloneArgs']]:
        """
        The cloning configuration.
        """
        return pulumi.get(self, "clone")

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

    @property
    @pulumi.getter
    def cpu(self) -> Optional[pulumi.Input['VirtualMachineCpuArgs']]:
        """
        The CPU configuration.
        """
        return pulumi.get(self, "cpu")

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

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

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

    @property
    @pulumi.getter
    def disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineDiskArgs']]]]:
        """
        A disk (multiple blocks supported).
        """
        return pulumi.get(self, "disks")

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

    @property
    @pulumi.getter(name="efiDisk")
    def efi_disk(self) -> Optional[pulumi.Input['VirtualMachineEfiDiskArgs']]:
        """
        The efi disk device (required if `bios` is set
        to `ovmf`)
        """
        return pulumi.get(self, "efi_disk")

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

    @property
    @pulumi.getter(name="hookScriptFileId")
    def hook_script_file_id(self) -> Optional[pulumi.Input[str]]:
        """
        The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).
        """
        return pulumi.get(self, "hook_script_file_id")

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

    @property
    @pulumi.getter
    def hostpcis(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineHostpciArgs']]]]:
        """
        A host PCI device mapping (multiple blocks supported).
        """
        return pulumi.get(self, "hostpcis")

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

    @property
    @pulumi.getter
    def initialization(self) -> Optional[pulumi.Input['VirtualMachineInitializationArgs']]:
        """
        The cloud-init configuration.
        """
        return pulumi.get(self, "initialization")

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

    @property
    @pulumi.getter(name="keyboardLayout")
    def keyboard_layout(self) -> Optional[pulumi.Input[str]]:
        """
        The keyboard layout (defaults to `en-us`).
        """
        return pulumi.get(self, "keyboard_layout")

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

    @property
    @pulumi.getter(name="kvmArguments")
    def kvm_arguments(self) -> Optional[pulumi.Input[str]]:
        """
        Arbitrary arguments passed to kvm.
        """
        return pulumi.get(self, "kvm_arguments")

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

    @property
    @pulumi.getter(name="macAddresses")
    def mac_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The MAC addresses published by the QEMU agent with fallback
        to the network device configuration, if the agent is disabled
        """
        return pulumi.get(self, "mac_addresses")

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

    @property
    @pulumi.getter
    def machine(self) -> Optional[pulumi.Input[str]]:
        """
        The VM machine type (defaults to `pc`).
        """
        return pulumi.get(self, "machine")

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

    @property
    @pulumi.getter
    def memory(self) -> Optional[pulumi.Input['VirtualMachineMemoryArgs']]:
        """
        The memory configuration.
        """
        return pulumi.get(self, "memory")

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

    @property
    @pulumi.getter
    def migrate(self) -> Optional[pulumi.Input[bool]]:
        """
        Migrate the VM on node change instead of re-creating
        it (defaults to `false`).
        """
        return pulumi.get(self, "migrate")

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

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

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

    @property
    @pulumi.getter(name="networkDevices")
    def network_devices(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineNetworkDeviceArgs']]]]:
        """
        A network device (multiple blocks supported).
        """
        return pulumi.get(self, "network_devices")

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

    @property
    @pulumi.getter
    def numas(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineNumaArgs']]]]:
        """
        The NUMA configuration.
        """
        return pulumi.get(self, "numas")

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

    @property
    @pulumi.getter(name="onBoot")
    def on_boot(self) -> Optional[pulumi.Input[bool]]:
        """
        Specifies whether a VM will be started during system
        boot. (defaults to `true`)
        """
        return pulumi.get(self, "on_boot")

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

    @property
    @pulumi.getter(name="operatingSystem")
    def operating_system(self) -> Optional[pulumi.Input['VirtualMachineOperatingSystemArgs']]:
        """
        The Operating System configuration.
        """
        return pulumi.get(self, "operating_system")

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

    @property
    @pulumi.getter(name="poolId")
    def pool_id(self) -> Optional[pulumi.Input[str]]:
        """
        The identifier for a pool to assign the virtual machine to.
        """
        return pulumi.get(self, "pool_id")

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

    @property
    @pulumi.getter
    def protection(self) -> Optional[pulumi.Input[bool]]:
        """
        Sets the protection flag of the VM. This will disable the remove VM and remove disk operations (defaults to `false`).
        """
        return pulumi.get(self, "protection")

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

    @property
    @pulumi.getter
    def reboot(self) -> Optional[pulumi.Input[bool]]:
        """
        Reboot the VM after initial creation. (defaults to `false`)
        """
        return pulumi.get(self, "reboot")

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

    @property
    @pulumi.getter(name="scsiHardware")
    def scsi_hardware(self) -> Optional[pulumi.Input[str]]:
        """
        The SCSI hardware type (defaults to
        `virtio-scsi-pci`).
        """
        return pulumi.get(self, "scsi_hardware")

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

    @property
    @pulumi.getter(name="serialDevices")
    def serial_devices(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineSerialDeviceArgs']]]]:
        """
        A serial device (multiple blocks supported).
        """
        return pulumi.get(self, "serial_devices")

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

    @property
    @pulumi.getter
    def smbios(self) -> Optional[pulumi.Input['VirtualMachineSmbiosArgs']]:
        """
        The SMBIOS (type1) settings for the VM.
        """
        return pulumi.get(self, "smbios")

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

    @property
    @pulumi.getter
    def started(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to start the virtual machine (defaults
        to `true`).
        """
        return pulumi.get(self, "started")

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

    @property
    @pulumi.getter
    def startup(self) -> Optional[pulumi.Input['VirtualMachineStartupArgs']]:
        """
        Defines startup and shutdown behavior of the VM.
        """
        return pulumi.get(self, "startup")

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

    @property
    @pulumi.getter(name="stopOnDestroy")
    def stop_on_destroy(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to stop rather than shutdown on VM destroy (defaults to `false`)
        """
        return pulumi.get(self, "stop_on_destroy")

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

    @property
    @pulumi.getter(name="tabletDevice")
    def tablet_device(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to enable the USB tablet device (defaults
        to `true`).
        """
        return pulumi.get(self, "tablet_device")

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

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of tags of the VM. This is only meta information (
        defaults to `[]`). Note: Proxmox always sorts the VM tags. If the list in
        template is not sorted, then Proxmox will always report a difference on the
        resource. You may use the `ignore_changes` lifecycle meta-argument to ignore
        changes to this attribute.
        """
        return pulumi.get(self, "tags")

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

    @property
    @pulumi.getter
    def template(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to create a template (defaults to `false`).
        """
        return pulumi.get(self, "template")

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

    @property
    @pulumi.getter(name="timeoutClone")
    def timeout_clone(self) -> Optional[pulumi.Input[int]]:
        """
        Timeout for cloning a VM in seconds (defaults to
        1800).
        """
        return pulumi.get(self, "timeout_clone")

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

    @property
    @pulumi.getter(name="timeoutCreate")
    def timeout_create(self) -> Optional[pulumi.Input[int]]:
        """
        Timeout for creating a VM in seconds (defaults to
        1800).
        """
        return pulumi.get(self, "timeout_create")

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

    @property
    @pulumi.getter(name="timeoutMigrate")
    def timeout_migrate(self) -> Optional[pulumi.Input[int]]:
        """
        Timeout for migrating the VM (defaults to
        1800).
        """
        return pulumi.get(self, "timeout_migrate")

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

    @property
    @pulumi.getter(name="timeoutMoveDisk")
    @_utilities.deprecated("""This field is deprecated and will be removed in a future release. An overall operation timeout (timeout_create / timeout_clone / timeout_migrate) is used instead.""")
    def timeout_move_disk(self) -> Optional[pulumi.Input[int]]:
        """
        MoveDisk timeout
        """
        return pulumi.get(self, "timeout_move_disk")

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

    @property
    @pulumi.getter(name="timeoutReboot")
    def timeout_reboot(self) -> Optional[pulumi.Input[int]]:
        """
        Timeout for rebooting a VM in seconds (defaults
        to 1800).
        """
        return pulumi.get(self, "timeout_reboot")

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

    @property
    @pulumi.getter(name="timeoutShutdownVm")
    def timeout_shutdown_vm(self) -> Optional[pulumi.Input[int]]:
        """
        Timeout for shutting down a VM in seconds (
        defaults to 1800).
        """
        return pulumi.get(self, "timeout_shutdown_vm")

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

    @property
    @pulumi.getter(name="timeoutStartVm")
    def timeout_start_vm(self) -> Optional[pulumi.Input[int]]:
        """
        Timeout for starting a VM in seconds (defaults
        to 1800).
        """
        return pulumi.get(self, "timeout_start_vm")

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

    @property
    @pulumi.getter(name="timeoutStopVm")
    def timeout_stop_vm(self) -> Optional[pulumi.Input[int]]:
        """
        Timeout for stopping a VM in seconds (defaults
        to 300).
        """
        return pulumi.get(self, "timeout_stop_vm")

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

    @property
    @pulumi.getter(name="tpmState")
    def tpm_state(self) -> Optional[pulumi.Input['VirtualMachineTpmStateArgs']]:
        """
        The TPM state device.
        """
        return pulumi.get(self, "tpm_state")

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

    @property
    @pulumi.getter
    def usbs(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineUsbArgs']]]]:
        """
        A host USB device mapping (multiple blocks supported).
        """
        return pulumi.get(self, "usbs")

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

    @property
    @pulumi.getter
    def vga(self) -> Optional[pulumi.Input['VirtualMachineVgaArgs']]:
        """
        The VGA configuration.
        """
        return pulumi.get(self, "vga")

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

    @property
    @pulumi.getter(name="vmId")
    def vm_id(self) -> Optional[pulumi.Input[int]]:
        """
        The VM identifier.
        """
        return pulumi.get(self, "vm_id")

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

    @property
    @pulumi.getter
    def watchdog(self) -> Optional[pulumi.Input['VirtualMachineWatchdogArgs']]:
        """
        The watchdog configuration. Once enabled (by a guest action), the watchdog must be periodically polled by an agent inside the guest or else the watchdog will reset the guest (or execute the respective action specified).
        """
        return pulumi.get(self, "watchdog")

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


@pulumi.input_type
class _VirtualMachineState:
    def __init__(__self__, *,
                 acpi: Optional[pulumi.Input[bool]] = None,
                 agent: Optional[pulumi.Input['VirtualMachineAgentArgs']] = None,
                 audio_device: Optional[pulumi.Input['VirtualMachineAudioDeviceArgs']] = None,
                 bios: Optional[pulumi.Input[str]] = None,
                 boot_orders: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 cdrom: Optional[pulumi.Input['VirtualMachineCdromArgs']] = None,
                 clone: Optional[pulumi.Input['VirtualMachineCloneArgs']] = None,
                 cpu: Optional[pulumi.Input['VirtualMachineCpuArgs']] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 disks: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineDiskArgs']]]] = None,
                 efi_disk: Optional[pulumi.Input['VirtualMachineEfiDiskArgs']] = None,
                 hook_script_file_id: Optional[pulumi.Input[str]] = None,
                 hostpcis: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineHostpciArgs']]]] = None,
                 initialization: Optional[pulumi.Input['VirtualMachineInitializationArgs']] = None,
                 ipv4_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[Sequence[pulumi.Input[str]]]]]] = None,
                 ipv6_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[Sequence[pulumi.Input[str]]]]]] = None,
                 keyboard_layout: Optional[pulumi.Input[str]] = None,
                 kvm_arguments: Optional[pulumi.Input[str]] = None,
                 mac_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 machine: Optional[pulumi.Input[str]] = None,
                 memory: Optional[pulumi.Input['VirtualMachineMemoryArgs']] = None,
                 migrate: Optional[pulumi.Input[bool]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 network_devices: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineNetworkDeviceArgs']]]] = None,
                 network_interface_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 node_name: Optional[pulumi.Input[str]] = None,
                 numas: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineNumaArgs']]]] = None,
                 on_boot: Optional[pulumi.Input[bool]] = None,
                 operating_system: Optional[pulumi.Input['VirtualMachineOperatingSystemArgs']] = None,
                 pool_id: Optional[pulumi.Input[str]] = None,
                 protection: Optional[pulumi.Input[bool]] = None,
                 reboot: Optional[pulumi.Input[bool]] = None,
                 scsi_hardware: Optional[pulumi.Input[str]] = None,
                 serial_devices: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineSerialDeviceArgs']]]] = None,
                 smbios: Optional[pulumi.Input['VirtualMachineSmbiosArgs']] = None,
                 started: Optional[pulumi.Input[bool]] = None,
                 startup: Optional[pulumi.Input['VirtualMachineStartupArgs']] = None,
                 stop_on_destroy: Optional[pulumi.Input[bool]] = None,
                 tablet_device: Optional[pulumi.Input[bool]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 template: Optional[pulumi.Input[bool]] = None,
                 timeout_clone: Optional[pulumi.Input[int]] = None,
                 timeout_create: Optional[pulumi.Input[int]] = None,
                 timeout_migrate: Optional[pulumi.Input[int]] = None,
                 timeout_move_disk: Optional[pulumi.Input[int]] = None,
                 timeout_reboot: Optional[pulumi.Input[int]] = None,
                 timeout_shutdown_vm: Optional[pulumi.Input[int]] = None,
                 timeout_start_vm: Optional[pulumi.Input[int]] = None,
                 timeout_stop_vm: Optional[pulumi.Input[int]] = None,
                 tpm_state: Optional[pulumi.Input['VirtualMachineTpmStateArgs']] = None,
                 usbs: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineUsbArgs']]]] = None,
                 vga: Optional[pulumi.Input['VirtualMachineVgaArgs']] = None,
                 vm_id: Optional[pulumi.Input[int]] = None,
                 watchdog: Optional[pulumi.Input['VirtualMachineWatchdogArgs']] = None):
        """
        Input properties used for looking up and filtering VirtualMachine resources.
        :param pulumi.Input[bool] acpi: Whether to enable ACPI (defaults to `true`).
        :param pulumi.Input['VirtualMachineAgentArgs'] agent: The QEMU agent configuration.
        :param pulumi.Input['VirtualMachineAudioDeviceArgs'] audio_device: An audio device.
        :param pulumi.Input[str] bios: The BIOS implementation (defaults to `seabios`).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] boot_orders: Specify a list of devices to boot from in the order
               they appear in the list (defaults to `[]`).
        :param pulumi.Input['VirtualMachineCdromArgs'] cdrom: The CDROM configuration.
        :param pulumi.Input['VirtualMachineCloneArgs'] clone: The cloning configuration.
        :param pulumi.Input['VirtualMachineCpuArgs'] cpu: The CPU configuration.
        :param pulumi.Input[str] description: The description.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineDiskArgs']]] disks: A disk (multiple blocks supported).
        :param pulumi.Input['VirtualMachineEfiDiskArgs'] efi_disk: The efi disk device (required if `bios` is set
               to `ovmf`)
        :param pulumi.Input[str] hook_script_file_id: The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineHostpciArgs']]] hostpcis: A host PCI device mapping (multiple blocks supported).
        :param pulumi.Input['VirtualMachineInitializationArgs'] initialization: The cloud-init configuration.
        :param pulumi.Input[Sequence[pulumi.Input[Sequence[pulumi.Input[str]]]]] ipv4_addresses: The IPv4 addresses per network interface published by the
               QEMU agent (empty list when `agent.enabled` is `false`)
        :param pulumi.Input[Sequence[pulumi.Input[Sequence[pulumi.Input[str]]]]] ipv6_addresses: The IPv6 addresses per network interface published by the
               QEMU agent (empty list when `agent.enabled` is `false`)
        :param pulumi.Input[str] keyboard_layout: The keyboard layout (defaults to `en-us`).
        :param pulumi.Input[str] kvm_arguments: Arbitrary arguments passed to kvm.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] mac_addresses: The MAC addresses published by the QEMU agent with fallback
               to the network device configuration, if the agent is disabled
        :param pulumi.Input[str] machine: The VM machine type (defaults to `pc`).
        :param pulumi.Input['VirtualMachineMemoryArgs'] memory: The memory configuration.
        :param pulumi.Input[bool] migrate: Migrate the VM on node change instead of re-creating
               it (defaults to `false`).
        :param pulumi.Input[str] name: The virtual machine name.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineNetworkDeviceArgs']]] network_devices: A network device (multiple blocks supported).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] network_interface_names: The network interface names published by the QEMU
               agent (empty list when `agent.enabled` is `false`)
        :param pulumi.Input[str] node_name: The name of the node to assign the virtual machine
               to.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineNumaArgs']]] numas: The NUMA configuration.
        :param pulumi.Input[bool] on_boot: Specifies whether a VM will be started during system
               boot. (defaults to `true`)
        :param pulumi.Input['VirtualMachineOperatingSystemArgs'] operating_system: The Operating System configuration.
        :param pulumi.Input[str] pool_id: The identifier for a pool to assign the virtual machine to.
        :param pulumi.Input[bool] protection: Sets the protection flag of the VM. This will disable the remove VM and remove disk operations (defaults to `false`).
        :param pulumi.Input[bool] reboot: Reboot the VM after initial creation. (defaults to `false`)
        :param pulumi.Input[str] scsi_hardware: The SCSI hardware type (defaults to
               `virtio-scsi-pci`).
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineSerialDeviceArgs']]] serial_devices: A serial device (multiple blocks supported).
        :param pulumi.Input['VirtualMachineSmbiosArgs'] smbios: The SMBIOS (type1) settings for the VM.
        :param pulumi.Input[bool] started: Whether to start the virtual machine (defaults
               to `true`).
        :param pulumi.Input['VirtualMachineStartupArgs'] startup: Defines startup and shutdown behavior of the VM.
        :param pulumi.Input[bool] stop_on_destroy: Whether to stop rather than shutdown on VM destroy (defaults to `false`)
        :param pulumi.Input[bool] tablet_device: Whether to enable the USB tablet device (defaults
               to `true`).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: A list of tags of the VM. This is only meta information (
               defaults to `[]`). Note: Proxmox always sorts the VM tags. If the list in
               template is not sorted, then Proxmox will always report a difference on the
               resource. You may use the `ignore_changes` lifecycle meta-argument to ignore
               changes to this attribute.
        :param pulumi.Input[bool] template: Whether to create a template (defaults to `false`).
        :param pulumi.Input[int] timeout_clone: Timeout for cloning a VM in seconds (defaults to
               1800).
        :param pulumi.Input[int] timeout_create: Timeout for creating a VM in seconds (defaults to
               1800).
        :param pulumi.Input[int] timeout_migrate: Timeout for migrating the VM (defaults to
               1800).
        :param pulumi.Input[int] timeout_move_disk: MoveDisk timeout
        :param pulumi.Input[int] timeout_reboot: Timeout for rebooting a VM in seconds (defaults
               to 1800).
        :param pulumi.Input[int] timeout_shutdown_vm: Timeout for shutting down a VM in seconds (
               defaults to 1800).
        :param pulumi.Input[int] timeout_start_vm: Timeout for starting a VM in seconds (defaults
               to 1800).
        :param pulumi.Input[int] timeout_stop_vm: Timeout for stopping a VM in seconds (defaults
               to 300).
        :param pulumi.Input['VirtualMachineTpmStateArgs'] tpm_state: The TPM state device.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineUsbArgs']]] usbs: A host USB device mapping (multiple blocks supported).
        :param pulumi.Input['VirtualMachineVgaArgs'] vga: The VGA configuration.
        :param pulumi.Input[int] vm_id: The VM identifier.
        :param pulumi.Input['VirtualMachineWatchdogArgs'] watchdog: The watchdog configuration. Once enabled (by a guest action), the watchdog must be periodically polled by an agent inside the guest or else the watchdog will reset the guest (or execute the respective action specified).
        """
        if acpi is not None:
            pulumi.set(__self__, "acpi", acpi)
        if agent is not None:
            pulumi.set(__self__, "agent", agent)
        if audio_device is not None:
            pulumi.set(__self__, "audio_device", audio_device)
        if bios is not None:
            pulumi.set(__self__, "bios", bios)
        if boot_orders is not None:
            pulumi.set(__self__, "boot_orders", boot_orders)
        if cdrom is not None:
            pulumi.set(__self__, "cdrom", cdrom)
        if clone is not None:
            pulumi.set(__self__, "clone", clone)
        if cpu is not None:
            pulumi.set(__self__, "cpu", cpu)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disks is not None:
            pulumi.set(__self__, "disks", disks)
        if efi_disk is not None:
            pulumi.set(__self__, "efi_disk", efi_disk)
        if hook_script_file_id is not None:
            pulumi.set(__self__, "hook_script_file_id", hook_script_file_id)
        if hostpcis is not None:
            pulumi.set(__self__, "hostpcis", hostpcis)
        if initialization is not None:
            pulumi.set(__self__, "initialization", initialization)
        if ipv4_addresses is not None:
            pulumi.set(__self__, "ipv4_addresses", ipv4_addresses)
        if ipv6_addresses is not None:
            pulumi.set(__self__, "ipv6_addresses", ipv6_addresses)
        if keyboard_layout is not None:
            pulumi.set(__self__, "keyboard_layout", keyboard_layout)
        if kvm_arguments is not None:
            pulumi.set(__self__, "kvm_arguments", kvm_arguments)
        if mac_addresses is not None:
            pulumi.set(__self__, "mac_addresses", mac_addresses)
        if machine is not None:
            pulumi.set(__self__, "machine", machine)
        if memory is not None:
            pulumi.set(__self__, "memory", memory)
        if migrate is not None:
            pulumi.set(__self__, "migrate", migrate)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if network_devices is not None:
            pulumi.set(__self__, "network_devices", network_devices)
        if network_interface_names is not None:
            pulumi.set(__self__, "network_interface_names", network_interface_names)
        if node_name is not None:
            pulumi.set(__self__, "node_name", node_name)
        if numas is not None:
            pulumi.set(__self__, "numas", numas)
        if on_boot is not None:
            pulumi.set(__self__, "on_boot", on_boot)
        if operating_system is not None:
            pulumi.set(__self__, "operating_system", operating_system)
        if pool_id is not None:
            pulumi.set(__self__, "pool_id", pool_id)
        if protection is not None:
            pulumi.set(__self__, "protection", protection)
        if reboot is not None:
            pulumi.set(__self__, "reboot", reboot)
        if scsi_hardware is not None:
            pulumi.set(__self__, "scsi_hardware", scsi_hardware)
        if serial_devices is not None:
            pulumi.set(__self__, "serial_devices", serial_devices)
        if smbios is not None:
            pulumi.set(__self__, "smbios", smbios)
        if started is not None:
            pulumi.set(__self__, "started", started)
        if startup is not None:
            pulumi.set(__self__, "startup", startup)
        if stop_on_destroy is not None:
            pulumi.set(__self__, "stop_on_destroy", stop_on_destroy)
        if tablet_device is not None:
            pulumi.set(__self__, "tablet_device", tablet_device)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if template is not None:
            pulumi.set(__self__, "template", template)
        if timeout_clone is not None:
            pulumi.set(__self__, "timeout_clone", timeout_clone)
        if timeout_create is not None:
            pulumi.set(__self__, "timeout_create", timeout_create)
        if timeout_migrate is not None:
            pulumi.set(__self__, "timeout_migrate", timeout_migrate)
        if timeout_move_disk is not None:
            warnings.warn("""This field is deprecated and will be removed in a future release. An overall operation timeout (timeout_create / timeout_clone / timeout_migrate) is used instead.""", DeprecationWarning)
            pulumi.log.warn("""timeout_move_disk is deprecated: This field is deprecated and will be removed in a future release. An overall operation timeout (timeout_create / timeout_clone / timeout_migrate) is used instead.""")
        if timeout_move_disk is not None:
            pulumi.set(__self__, "timeout_move_disk", timeout_move_disk)
        if timeout_reboot is not None:
            pulumi.set(__self__, "timeout_reboot", timeout_reboot)
        if timeout_shutdown_vm is not None:
            pulumi.set(__self__, "timeout_shutdown_vm", timeout_shutdown_vm)
        if timeout_start_vm is not None:
            pulumi.set(__self__, "timeout_start_vm", timeout_start_vm)
        if timeout_stop_vm is not None:
            pulumi.set(__self__, "timeout_stop_vm", timeout_stop_vm)
        if tpm_state is not None:
            pulumi.set(__self__, "tpm_state", tpm_state)
        if usbs is not None:
            pulumi.set(__self__, "usbs", usbs)
        if vga is not None:
            pulumi.set(__self__, "vga", vga)
        if vm_id is not None:
            pulumi.set(__self__, "vm_id", vm_id)
        if watchdog is not None:
            pulumi.set(__self__, "watchdog", watchdog)

    @property
    @pulumi.getter
    def acpi(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to enable ACPI (defaults to `true`).
        """
        return pulumi.get(self, "acpi")

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

    @property
    @pulumi.getter
    def agent(self) -> Optional[pulumi.Input['VirtualMachineAgentArgs']]:
        """
        The QEMU agent configuration.
        """
        return pulumi.get(self, "agent")

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

    @property
    @pulumi.getter(name="audioDevice")
    def audio_device(self) -> Optional[pulumi.Input['VirtualMachineAudioDeviceArgs']]:
        """
        An audio device.
        """
        return pulumi.get(self, "audio_device")

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

    @property
    @pulumi.getter
    def bios(self) -> Optional[pulumi.Input[str]]:
        """
        The BIOS implementation (defaults to `seabios`).
        """
        return pulumi.get(self, "bios")

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

    @property
    @pulumi.getter(name="bootOrders")
    def boot_orders(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specify a list of devices to boot from in the order
        they appear in the list (defaults to `[]`).
        """
        return pulumi.get(self, "boot_orders")

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

    @property
    @pulumi.getter
    def cdrom(self) -> Optional[pulumi.Input['VirtualMachineCdromArgs']]:
        """
        The CDROM configuration.
        """
        return pulumi.get(self, "cdrom")

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

    @property
    @pulumi.getter
    def clone(self) -> Optional[pulumi.Input['VirtualMachineCloneArgs']]:
        """
        The cloning configuration.
        """
        return pulumi.get(self, "clone")

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

    @property
    @pulumi.getter
    def cpu(self) -> Optional[pulumi.Input['VirtualMachineCpuArgs']]:
        """
        The CPU configuration.
        """
        return pulumi.get(self, "cpu")

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

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

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

    @property
    @pulumi.getter
    def disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineDiskArgs']]]]:
        """
        A disk (multiple blocks supported).
        """
        return pulumi.get(self, "disks")

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

    @property
    @pulumi.getter(name="efiDisk")
    def efi_disk(self) -> Optional[pulumi.Input['VirtualMachineEfiDiskArgs']]:
        """
        The efi disk device (required if `bios` is set
        to `ovmf`)
        """
        return pulumi.get(self, "efi_disk")

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

    @property
    @pulumi.getter(name="hookScriptFileId")
    def hook_script_file_id(self) -> Optional[pulumi.Input[str]]:
        """
        The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).
        """
        return pulumi.get(self, "hook_script_file_id")

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

    @property
    @pulumi.getter
    def hostpcis(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineHostpciArgs']]]]:
        """
        A host PCI device mapping (multiple blocks supported).
        """
        return pulumi.get(self, "hostpcis")

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

    @property
    @pulumi.getter
    def initialization(self) -> Optional[pulumi.Input['VirtualMachineInitializationArgs']]:
        """
        The cloud-init configuration.
        """
        return pulumi.get(self, "initialization")

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

    @property
    @pulumi.getter(name="ipv4Addresses")
    def ipv4_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[Sequence[pulumi.Input[str]]]]]]:
        """
        The IPv4 addresses per network interface published by the
        QEMU agent (empty list when `agent.enabled` is `false`)
        """
        return pulumi.get(self, "ipv4_addresses")

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

    @property
    @pulumi.getter(name="ipv6Addresses")
    def ipv6_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[Sequence[pulumi.Input[str]]]]]]:
        """
        The IPv6 addresses per network interface published by the
        QEMU agent (empty list when `agent.enabled` is `false`)
        """
        return pulumi.get(self, "ipv6_addresses")

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

    @property
    @pulumi.getter(name="keyboardLayout")
    def keyboard_layout(self) -> Optional[pulumi.Input[str]]:
        """
        The keyboard layout (defaults to `en-us`).
        """
        return pulumi.get(self, "keyboard_layout")

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

    @property
    @pulumi.getter(name="kvmArguments")
    def kvm_arguments(self) -> Optional[pulumi.Input[str]]:
        """
        Arbitrary arguments passed to kvm.
        """
        return pulumi.get(self, "kvm_arguments")

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

    @property
    @pulumi.getter(name="macAddresses")
    def mac_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The MAC addresses published by the QEMU agent with fallback
        to the network device configuration, if the agent is disabled
        """
        return pulumi.get(self, "mac_addresses")

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

    @property
    @pulumi.getter
    def machine(self) -> Optional[pulumi.Input[str]]:
        """
        The VM machine type (defaults to `pc`).
        """
        return pulumi.get(self, "machine")

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

    @property
    @pulumi.getter
    def memory(self) -> Optional[pulumi.Input['VirtualMachineMemoryArgs']]:
        """
        The memory configuration.
        """
        return pulumi.get(self, "memory")

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

    @property
    @pulumi.getter
    def migrate(self) -> Optional[pulumi.Input[bool]]:
        """
        Migrate the VM on node change instead of re-creating
        it (defaults to `false`).
        """
        return pulumi.get(self, "migrate")

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

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

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

    @property
    @pulumi.getter(name="networkDevices")
    def network_devices(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineNetworkDeviceArgs']]]]:
        """
        A network device (multiple blocks supported).
        """
        return pulumi.get(self, "network_devices")

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

    @property
    @pulumi.getter(name="networkInterfaceNames")
    def network_interface_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The network interface names published by the QEMU
        agent (empty list when `agent.enabled` is `false`)
        """
        return pulumi.get(self, "network_interface_names")

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

    @property
    @pulumi.getter(name="nodeName")
    def node_name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the node to assign the virtual machine
        to.
        """
        return pulumi.get(self, "node_name")

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

    @property
    @pulumi.getter
    def numas(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineNumaArgs']]]]:
        """
        The NUMA configuration.
        """
        return pulumi.get(self, "numas")

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

    @property
    @pulumi.getter(name="onBoot")
    def on_boot(self) -> Optional[pulumi.Input[bool]]:
        """
        Specifies whether a VM will be started during system
        boot. (defaults to `true`)
        """
        return pulumi.get(self, "on_boot")

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

    @property
    @pulumi.getter(name="operatingSystem")
    def operating_system(self) -> Optional[pulumi.Input['VirtualMachineOperatingSystemArgs']]:
        """
        The Operating System configuration.
        """
        return pulumi.get(self, "operating_system")

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

    @property
    @pulumi.getter(name="poolId")
    def pool_id(self) -> Optional[pulumi.Input[str]]:
        """
        The identifier for a pool to assign the virtual machine to.
        """
        return pulumi.get(self, "pool_id")

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

    @property
    @pulumi.getter
    def protection(self) -> Optional[pulumi.Input[bool]]:
        """
        Sets the protection flag of the VM. This will disable the remove VM and remove disk operations (defaults to `false`).
        """
        return pulumi.get(self, "protection")

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

    @property
    @pulumi.getter
    def reboot(self) -> Optional[pulumi.Input[bool]]:
        """
        Reboot the VM after initial creation. (defaults to `false`)
        """
        return pulumi.get(self, "reboot")

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

    @property
    @pulumi.getter(name="scsiHardware")
    def scsi_hardware(self) -> Optional[pulumi.Input[str]]:
        """
        The SCSI hardware type (defaults to
        `virtio-scsi-pci`).
        """
        return pulumi.get(self, "scsi_hardware")

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

    @property
    @pulumi.getter(name="serialDevices")
    def serial_devices(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineSerialDeviceArgs']]]]:
        """
        A serial device (multiple blocks supported).
        """
        return pulumi.get(self, "serial_devices")

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

    @property
    @pulumi.getter
    def smbios(self) -> Optional[pulumi.Input['VirtualMachineSmbiosArgs']]:
        """
        The SMBIOS (type1) settings for the VM.
        """
        return pulumi.get(self, "smbios")

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

    @property
    @pulumi.getter
    def started(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to start the virtual machine (defaults
        to `true`).
        """
        return pulumi.get(self, "started")

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

    @property
    @pulumi.getter
    def startup(self) -> Optional[pulumi.Input['VirtualMachineStartupArgs']]:
        """
        Defines startup and shutdown behavior of the VM.
        """
        return pulumi.get(self, "startup")

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

    @property
    @pulumi.getter(name="stopOnDestroy")
    def stop_on_destroy(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to stop rather than shutdown on VM destroy (defaults to `false`)
        """
        return pulumi.get(self, "stop_on_destroy")

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

    @property
    @pulumi.getter(name="tabletDevice")
    def tablet_device(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to enable the USB tablet device (defaults
        to `true`).
        """
        return pulumi.get(self, "tablet_device")

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

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of tags of the VM. This is only meta information (
        defaults to `[]`). Note: Proxmox always sorts the VM tags. If the list in
        template is not sorted, then Proxmox will always report a difference on the
        resource. You may use the `ignore_changes` lifecycle meta-argument to ignore
        changes to this attribute.
        """
        return pulumi.get(self, "tags")

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

    @property
    @pulumi.getter
    def template(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to create a template (defaults to `false`).
        """
        return pulumi.get(self, "template")

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

    @property
    @pulumi.getter(name="timeoutClone")
    def timeout_clone(self) -> Optional[pulumi.Input[int]]:
        """
        Timeout for cloning a VM in seconds (defaults to
        1800).
        """
        return pulumi.get(self, "timeout_clone")

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

    @property
    @pulumi.getter(name="timeoutCreate")
    def timeout_create(self) -> Optional[pulumi.Input[int]]:
        """
        Timeout for creating a VM in seconds (defaults to
        1800).
        """
        return pulumi.get(self, "timeout_create")

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

    @property
    @pulumi.getter(name="timeoutMigrate")
    def timeout_migrate(self) -> Optional[pulumi.Input[int]]:
        """
        Timeout for migrating the VM (defaults to
        1800).
        """
        return pulumi.get(self, "timeout_migrate")

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

    @property
    @pulumi.getter(name="timeoutMoveDisk")
    @_utilities.deprecated("""This field is deprecated and will be removed in a future release. An overall operation timeout (timeout_create / timeout_clone / timeout_migrate) is used instead.""")
    def timeout_move_disk(self) -> Optional[pulumi.Input[int]]:
        """
        MoveDisk timeout
        """
        return pulumi.get(self, "timeout_move_disk")

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

    @property
    @pulumi.getter(name="timeoutReboot")
    def timeout_reboot(self) -> Optional[pulumi.Input[int]]:
        """
        Timeout for rebooting a VM in seconds (defaults
        to 1800).
        """
        return pulumi.get(self, "timeout_reboot")

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

    @property
    @pulumi.getter(name="timeoutShutdownVm")
    def timeout_shutdown_vm(self) -> Optional[pulumi.Input[int]]:
        """
        Timeout for shutting down a VM in seconds (
        defaults to 1800).
        """
        return pulumi.get(self, "timeout_shutdown_vm")

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

    @property
    @pulumi.getter(name="timeoutStartVm")
    def timeout_start_vm(self) -> Optional[pulumi.Input[int]]:
        """
        Timeout for starting a VM in seconds (defaults
        to 1800).
        """
        return pulumi.get(self, "timeout_start_vm")

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

    @property
    @pulumi.getter(name="timeoutStopVm")
    def timeout_stop_vm(self) -> Optional[pulumi.Input[int]]:
        """
        Timeout for stopping a VM in seconds (defaults
        to 300).
        """
        return pulumi.get(self, "timeout_stop_vm")

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

    @property
    @pulumi.getter(name="tpmState")
    def tpm_state(self) -> Optional[pulumi.Input['VirtualMachineTpmStateArgs']]:
        """
        The TPM state device.
        """
        return pulumi.get(self, "tpm_state")

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

    @property
    @pulumi.getter
    def usbs(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineUsbArgs']]]]:
        """
        A host USB device mapping (multiple blocks supported).
        """
        return pulumi.get(self, "usbs")

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

    @property
    @pulumi.getter
    def vga(self) -> Optional[pulumi.Input['VirtualMachineVgaArgs']]:
        """
        The VGA configuration.
        """
        return pulumi.get(self, "vga")

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

    @property
    @pulumi.getter(name="vmId")
    def vm_id(self) -> Optional[pulumi.Input[int]]:
        """
        The VM identifier.
        """
        return pulumi.get(self, "vm_id")

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

    @property
    @pulumi.getter
    def watchdog(self) -> Optional[pulumi.Input['VirtualMachineWatchdogArgs']]:
        """
        The watchdog configuration. Once enabled (by a guest action), the watchdog must be periodically polled by an agent inside the guest or else the watchdog will reset the guest (or execute the respective action specified).
        """
        return pulumi.get(self, "watchdog")

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


class VirtualMachine(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 acpi: Optional[pulumi.Input[bool]] = None,
                 agent: Optional[pulumi.Input[Union['VirtualMachineAgentArgs', 'VirtualMachineAgentArgsDict']]] = None,
                 audio_device: Optional[pulumi.Input[Union['VirtualMachineAudioDeviceArgs', 'VirtualMachineAudioDeviceArgsDict']]] = None,
                 bios: Optional[pulumi.Input[str]] = None,
                 boot_orders: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 cdrom: Optional[pulumi.Input[Union['VirtualMachineCdromArgs', 'VirtualMachineCdromArgsDict']]] = None,
                 clone: Optional[pulumi.Input[Union['VirtualMachineCloneArgs', 'VirtualMachineCloneArgsDict']]] = None,
                 cpu: Optional[pulumi.Input[Union['VirtualMachineCpuArgs', 'VirtualMachineCpuArgsDict']]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 disks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineDiskArgs', 'VirtualMachineDiskArgsDict']]]]] = None,
                 efi_disk: Optional[pulumi.Input[Union['VirtualMachineEfiDiskArgs', 'VirtualMachineEfiDiskArgsDict']]] = None,
                 hook_script_file_id: Optional[pulumi.Input[str]] = None,
                 hostpcis: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineHostpciArgs', 'VirtualMachineHostpciArgsDict']]]]] = None,
                 initialization: Optional[pulumi.Input[Union['VirtualMachineInitializationArgs', 'VirtualMachineInitializationArgsDict']]] = None,
                 keyboard_layout: Optional[pulumi.Input[str]] = None,
                 kvm_arguments: Optional[pulumi.Input[str]] = None,
                 mac_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 machine: Optional[pulumi.Input[str]] = None,
                 memory: Optional[pulumi.Input[Union['VirtualMachineMemoryArgs', 'VirtualMachineMemoryArgsDict']]] = None,
                 migrate: Optional[pulumi.Input[bool]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 network_devices: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineNetworkDeviceArgs', 'VirtualMachineNetworkDeviceArgsDict']]]]] = None,
                 node_name: Optional[pulumi.Input[str]] = None,
                 numas: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineNumaArgs', 'VirtualMachineNumaArgsDict']]]]] = None,
                 on_boot: Optional[pulumi.Input[bool]] = None,
                 operating_system: Optional[pulumi.Input[Union['VirtualMachineOperatingSystemArgs', 'VirtualMachineOperatingSystemArgsDict']]] = None,
                 pool_id: Optional[pulumi.Input[str]] = None,
                 protection: Optional[pulumi.Input[bool]] = None,
                 reboot: Optional[pulumi.Input[bool]] = None,
                 scsi_hardware: Optional[pulumi.Input[str]] = None,
                 serial_devices: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineSerialDeviceArgs', 'VirtualMachineSerialDeviceArgsDict']]]]] = None,
                 smbios: Optional[pulumi.Input[Union['VirtualMachineSmbiosArgs', 'VirtualMachineSmbiosArgsDict']]] = None,
                 started: Optional[pulumi.Input[bool]] = None,
                 startup: Optional[pulumi.Input[Union['VirtualMachineStartupArgs', 'VirtualMachineStartupArgsDict']]] = None,
                 stop_on_destroy: Optional[pulumi.Input[bool]] = None,
                 tablet_device: Optional[pulumi.Input[bool]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 template: Optional[pulumi.Input[bool]] = None,
                 timeout_clone: Optional[pulumi.Input[int]] = None,
                 timeout_create: Optional[pulumi.Input[int]] = None,
                 timeout_migrate: Optional[pulumi.Input[int]] = None,
                 timeout_move_disk: Optional[pulumi.Input[int]] = None,
                 timeout_reboot: Optional[pulumi.Input[int]] = None,
                 timeout_shutdown_vm: Optional[pulumi.Input[int]] = None,
                 timeout_start_vm: Optional[pulumi.Input[int]] = None,
                 timeout_stop_vm: Optional[pulumi.Input[int]] = None,
                 tpm_state: Optional[pulumi.Input[Union['VirtualMachineTpmStateArgs', 'VirtualMachineTpmStateArgsDict']]] = None,
                 usbs: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineUsbArgs', 'VirtualMachineUsbArgsDict']]]]] = None,
                 vga: Optional[pulumi.Input[Union['VirtualMachineVgaArgs', 'VirtualMachineVgaArgsDict']]] = None,
                 vm_id: Optional[pulumi.Input[int]] = None,
                 watchdog: Optional[pulumi.Input[Union['VirtualMachineWatchdogArgs', 'VirtualMachineWatchdogArgsDict']]] = None,
                 __props__=None):
        """
        Manages a virtual machine.

        > This resource uses SSH access to the node. You might need to configure the `ssh` option in the `provider` section.

        ## Import

        Instances can be imported using the `node_name` and the `vm_id`, e.g.,

        bash

        ```sh
        $ pulumi import proxmoxve:VM/virtualMachine:VirtualMachine ubuntu_vm first-node/4321
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[bool] acpi: Whether to enable ACPI (defaults to `true`).
        :param pulumi.Input[Union['VirtualMachineAgentArgs', 'VirtualMachineAgentArgsDict']] agent: The QEMU agent configuration.
        :param pulumi.Input[Union['VirtualMachineAudioDeviceArgs', 'VirtualMachineAudioDeviceArgsDict']] audio_device: An audio device.
        :param pulumi.Input[str] bios: The BIOS implementation (defaults to `seabios`).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] boot_orders: Specify a list of devices to boot from in the order
               they appear in the list (defaults to `[]`).
        :param pulumi.Input[Union['VirtualMachineCdromArgs', 'VirtualMachineCdromArgsDict']] cdrom: The CDROM configuration.
        :param pulumi.Input[Union['VirtualMachineCloneArgs', 'VirtualMachineCloneArgsDict']] clone: The cloning configuration.
        :param pulumi.Input[Union['VirtualMachineCpuArgs', 'VirtualMachineCpuArgsDict']] cpu: The CPU configuration.
        :param pulumi.Input[str] description: The description.
        :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineDiskArgs', 'VirtualMachineDiskArgsDict']]]] disks: A disk (multiple blocks supported).
        :param pulumi.Input[Union['VirtualMachineEfiDiskArgs', 'VirtualMachineEfiDiskArgsDict']] efi_disk: The efi disk device (required if `bios` is set
               to `ovmf`)
        :param pulumi.Input[str] hook_script_file_id: The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).
        :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineHostpciArgs', 'VirtualMachineHostpciArgsDict']]]] hostpcis: A host PCI device mapping (multiple blocks supported).
        :param pulumi.Input[Union['VirtualMachineInitializationArgs', 'VirtualMachineInitializationArgsDict']] initialization: The cloud-init configuration.
        :param pulumi.Input[str] keyboard_layout: The keyboard layout (defaults to `en-us`).
        :param pulumi.Input[str] kvm_arguments: Arbitrary arguments passed to kvm.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] mac_addresses: The MAC addresses published by the QEMU agent with fallback
               to the network device configuration, if the agent is disabled
        :param pulumi.Input[str] machine: The VM machine type (defaults to `pc`).
        :param pulumi.Input[Union['VirtualMachineMemoryArgs', 'VirtualMachineMemoryArgsDict']] memory: The memory configuration.
        :param pulumi.Input[bool] migrate: Migrate the VM on node change instead of re-creating
               it (defaults to `false`).
        :param pulumi.Input[str] name: The virtual machine name.
        :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineNetworkDeviceArgs', 'VirtualMachineNetworkDeviceArgsDict']]]] network_devices: A network device (multiple blocks supported).
        :param pulumi.Input[str] node_name: The name of the node to assign the virtual machine
               to.
        :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineNumaArgs', 'VirtualMachineNumaArgsDict']]]] numas: The NUMA configuration.
        :param pulumi.Input[bool] on_boot: Specifies whether a VM will be started during system
               boot. (defaults to `true`)
        :param pulumi.Input[Union['VirtualMachineOperatingSystemArgs', 'VirtualMachineOperatingSystemArgsDict']] operating_system: The Operating System configuration.
        :param pulumi.Input[str] pool_id: The identifier for a pool to assign the virtual machine to.
        :param pulumi.Input[bool] protection: Sets the protection flag of the VM. This will disable the remove VM and remove disk operations (defaults to `false`).
        :param pulumi.Input[bool] reboot: Reboot the VM after initial creation. (defaults to `false`)
        :param pulumi.Input[str] scsi_hardware: The SCSI hardware type (defaults to
               `virtio-scsi-pci`).
        :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineSerialDeviceArgs', 'VirtualMachineSerialDeviceArgsDict']]]] serial_devices: A serial device (multiple blocks supported).
        :param pulumi.Input[Union['VirtualMachineSmbiosArgs', 'VirtualMachineSmbiosArgsDict']] smbios: The SMBIOS (type1) settings for the VM.
        :param pulumi.Input[bool] started: Whether to start the virtual machine (defaults
               to `true`).
        :param pulumi.Input[Union['VirtualMachineStartupArgs', 'VirtualMachineStartupArgsDict']] startup: Defines startup and shutdown behavior of the VM.
        :param pulumi.Input[bool] stop_on_destroy: Whether to stop rather than shutdown on VM destroy (defaults to `false`)
        :param pulumi.Input[bool] tablet_device: Whether to enable the USB tablet device (defaults
               to `true`).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: A list of tags of the VM. This is only meta information (
               defaults to `[]`). Note: Proxmox always sorts the VM tags. If the list in
               template is not sorted, then Proxmox will always report a difference on the
               resource. You may use the `ignore_changes` lifecycle meta-argument to ignore
               changes to this attribute.
        :param pulumi.Input[bool] template: Whether to create a template (defaults to `false`).
        :param pulumi.Input[int] timeout_clone: Timeout for cloning a VM in seconds (defaults to
               1800).
        :param pulumi.Input[int] timeout_create: Timeout for creating a VM in seconds (defaults to
               1800).
        :param pulumi.Input[int] timeout_migrate: Timeout for migrating the VM (defaults to
               1800).
        :param pulumi.Input[int] timeout_move_disk: MoveDisk timeout
        :param pulumi.Input[int] timeout_reboot: Timeout for rebooting a VM in seconds (defaults
               to 1800).
        :param pulumi.Input[int] timeout_shutdown_vm: Timeout for shutting down a VM in seconds (
               defaults to 1800).
        :param pulumi.Input[int] timeout_start_vm: Timeout for starting a VM in seconds (defaults
               to 1800).
        :param pulumi.Input[int] timeout_stop_vm: Timeout for stopping a VM in seconds (defaults
               to 300).
        :param pulumi.Input[Union['VirtualMachineTpmStateArgs', 'VirtualMachineTpmStateArgsDict']] tpm_state: The TPM state device.
        :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineUsbArgs', 'VirtualMachineUsbArgsDict']]]] usbs: A host USB device mapping (multiple blocks supported).
        :param pulumi.Input[Union['VirtualMachineVgaArgs', 'VirtualMachineVgaArgsDict']] vga: The VGA configuration.
        :param pulumi.Input[int] vm_id: The VM identifier.
        :param pulumi.Input[Union['VirtualMachineWatchdogArgs', 'VirtualMachineWatchdogArgsDict']] watchdog: The watchdog configuration. Once enabled (by a guest action), the watchdog must be periodically polled by an agent inside the guest or else the watchdog will reset the guest (or execute the respective action specified).
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: VirtualMachineArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Manages a virtual machine.

        > This resource uses SSH access to the node. You might need to configure the `ssh` option in the `provider` section.

        ## Import

        Instances can be imported using the `node_name` and the `vm_id`, e.g.,

        bash

        ```sh
        $ pulumi import proxmoxve:VM/virtualMachine:VirtualMachine ubuntu_vm first-node/4321
        ```

        :param str resource_name: The name of the resource.
        :param VirtualMachineArgs 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(VirtualMachineArgs, 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,
                 acpi: Optional[pulumi.Input[bool]] = None,
                 agent: Optional[pulumi.Input[Union['VirtualMachineAgentArgs', 'VirtualMachineAgentArgsDict']]] = None,
                 audio_device: Optional[pulumi.Input[Union['VirtualMachineAudioDeviceArgs', 'VirtualMachineAudioDeviceArgsDict']]] = None,
                 bios: Optional[pulumi.Input[str]] = None,
                 boot_orders: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 cdrom: Optional[pulumi.Input[Union['VirtualMachineCdromArgs', 'VirtualMachineCdromArgsDict']]] = None,
                 clone: Optional[pulumi.Input[Union['VirtualMachineCloneArgs', 'VirtualMachineCloneArgsDict']]] = None,
                 cpu: Optional[pulumi.Input[Union['VirtualMachineCpuArgs', 'VirtualMachineCpuArgsDict']]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 disks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineDiskArgs', 'VirtualMachineDiskArgsDict']]]]] = None,
                 efi_disk: Optional[pulumi.Input[Union['VirtualMachineEfiDiskArgs', 'VirtualMachineEfiDiskArgsDict']]] = None,
                 hook_script_file_id: Optional[pulumi.Input[str]] = None,
                 hostpcis: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineHostpciArgs', 'VirtualMachineHostpciArgsDict']]]]] = None,
                 initialization: Optional[pulumi.Input[Union['VirtualMachineInitializationArgs', 'VirtualMachineInitializationArgsDict']]] = None,
                 keyboard_layout: Optional[pulumi.Input[str]] = None,
                 kvm_arguments: Optional[pulumi.Input[str]] = None,
                 mac_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 machine: Optional[pulumi.Input[str]] = None,
                 memory: Optional[pulumi.Input[Union['VirtualMachineMemoryArgs', 'VirtualMachineMemoryArgsDict']]] = None,
                 migrate: Optional[pulumi.Input[bool]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 network_devices: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineNetworkDeviceArgs', 'VirtualMachineNetworkDeviceArgsDict']]]]] = None,
                 node_name: Optional[pulumi.Input[str]] = None,
                 numas: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineNumaArgs', 'VirtualMachineNumaArgsDict']]]]] = None,
                 on_boot: Optional[pulumi.Input[bool]] = None,
                 operating_system: Optional[pulumi.Input[Union['VirtualMachineOperatingSystemArgs', 'VirtualMachineOperatingSystemArgsDict']]] = None,
                 pool_id: Optional[pulumi.Input[str]] = None,
                 protection: Optional[pulumi.Input[bool]] = None,
                 reboot: Optional[pulumi.Input[bool]] = None,
                 scsi_hardware: Optional[pulumi.Input[str]] = None,
                 serial_devices: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineSerialDeviceArgs', 'VirtualMachineSerialDeviceArgsDict']]]]] = None,
                 smbios: Optional[pulumi.Input[Union['VirtualMachineSmbiosArgs', 'VirtualMachineSmbiosArgsDict']]] = None,
                 started: Optional[pulumi.Input[bool]] = None,
                 startup: Optional[pulumi.Input[Union['VirtualMachineStartupArgs', 'VirtualMachineStartupArgsDict']]] = None,
                 stop_on_destroy: Optional[pulumi.Input[bool]] = None,
                 tablet_device: Optional[pulumi.Input[bool]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 template: Optional[pulumi.Input[bool]] = None,
                 timeout_clone: Optional[pulumi.Input[int]] = None,
                 timeout_create: Optional[pulumi.Input[int]] = None,
                 timeout_migrate: Optional[pulumi.Input[int]] = None,
                 timeout_move_disk: Optional[pulumi.Input[int]] = None,
                 timeout_reboot: Optional[pulumi.Input[int]] = None,
                 timeout_shutdown_vm: Optional[pulumi.Input[int]] = None,
                 timeout_start_vm: Optional[pulumi.Input[int]] = None,
                 timeout_stop_vm: Optional[pulumi.Input[int]] = None,
                 tpm_state: Optional[pulumi.Input[Union['VirtualMachineTpmStateArgs', 'VirtualMachineTpmStateArgsDict']]] = None,
                 usbs: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineUsbArgs', 'VirtualMachineUsbArgsDict']]]]] = None,
                 vga: Optional[pulumi.Input[Union['VirtualMachineVgaArgs', 'VirtualMachineVgaArgsDict']]] = None,
                 vm_id: Optional[pulumi.Input[int]] = None,
                 watchdog: Optional[pulumi.Input[Union['VirtualMachineWatchdogArgs', 'VirtualMachineWatchdogArgsDict']]] = 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__ = VirtualMachineArgs.__new__(VirtualMachineArgs)

            __props__.__dict__["acpi"] = acpi
            __props__.__dict__["agent"] = agent
            __props__.__dict__["audio_device"] = audio_device
            __props__.__dict__["bios"] = bios
            __props__.__dict__["boot_orders"] = boot_orders
            __props__.__dict__["cdrom"] = cdrom
            __props__.__dict__["clone"] = clone
            __props__.__dict__["cpu"] = cpu
            __props__.__dict__["description"] = description
            __props__.__dict__["disks"] = disks
            __props__.__dict__["efi_disk"] = efi_disk
            __props__.__dict__["hook_script_file_id"] = hook_script_file_id
            __props__.__dict__["hostpcis"] = hostpcis
            __props__.__dict__["initialization"] = initialization
            __props__.__dict__["keyboard_layout"] = keyboard_layout
            __props__.__dict__["kvm_arguments"] = kvm_arguments
            __props__.__dict__["mac_addresses"] = mac_addresses
            __props__.__dict__["machine"] = machine
            __props__.__dict__["memory"] = memory
            __props__.__dict__["migrate"] = migrate
            __props__.__dict__["name"] = name
            __props__.__dict__["network_devices"] = network_devices
            if node_name is None and not opts.urn:
                raise TypeError("Missing required property 'node_name'")
            __props__.__dict__["node_name"] = node_name
            __props__.__dict__["numas"] = numas
            __props__.__dict__["on_boot"] = on_boot
            __props__.__dict__["operating_system"] = operating_system
            __props__.__dict__["pool_id"] = pool_id
            __props__.__dict__["protection"] = protection
            __props__.__dict__["reboot"] = reboot
            __props__.__dict__["scsi_hardware"] = scsi_hardware
            __props__.__dict__["serial_devices"] = serial_devices
            __props__.__dict__["smbios"] = smbios
            __props__.__dict__["started"] = started
            __props__.__dict__["startup"] = startup
            __props__.__dict__["stop_on_destroy"] = stop_on_destroy
            __props__.__dict__["tablet_device"] = tablet_device
            __props__.__dict__["tags"] = tags
            __props__.__dict__["template"] = template
            __props__.__dict__["timeout_clone"] = timeout_clone
            __props__.__dict__["timeout_create"] = timeout_create
            __props__.__dict__["timeout_migrate"] = timeout_migrate
            __props__.__dict__["timeout_move_disk"] = timeout_move_disk
            __props__.__dict__["timeout_reboot"] = timeout_reboot
            __props__.__dict__["timeout_shutdown_vm"] = timeout_shutdown_vm
            __props__.__dict__["timeout_start_vm"] = timeout_start_vm
            __props__.__dict__["timeout_stop_vm"] = timeout_stop_vm
            __props__.__dict__["tpm_state"] = tpm_state
            __props__.__dict__["usbs"] = usbs
            __props__.__dict__["vga"] = vga
            __props__.__dict__["vm_id"] = vm_id
            __props__.__dict__["watchdog"] = watchdog
            __props__.__dict__["ipv4_addresses"] = None
            __props__.__dict__["ipv6_addresses"] = None
            __props__.__dict__["network_interface_names"] = None
        super(VirtualMachine, __self__).__init__(
            'proxmoxve:VM/virtualMachine:VirtualMachine',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            acpi: Optional[pulumi.Input[bool]] = None,
            agent: Optional[pulumi.Input[Union['VirtualMachineAgentArgs', 'VirtualMachineAgentArgsDict']]] = None,
            audio_device: Optional[pulumi.Input[Union['VirtualMachineAudioDeviceArgs', 'VirtualMachineAudioDeviceArgsDict']]] = None,
            bios: Optional[pulumi.Input[str]] = None,
            boot_orders: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            cdrom: Optional[pulumi.Input[Union['VirtualMachineCdromArgs', 'VirtualMachineCdromArgsDict']]] = None,
            clone: Optional[pulumi.Input[Union['VirtualMachineCloneArgs', 'VirtualMachineCloneArgsDict']]] = None,
            cpu: Optional[pulumi.Input[Union['VirtualMachineCpuArgs', 'VirtualMachineCpuArgsDict']]] = None,
            description: Optional[pulumi.Input[str]] = None,
            disks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineDiskArgs', 'VirtualMachineDiskArgsDict']]]]] = None,
            efi_disk: Optional[pulumi.Input[Union['VirtualMachineEfiDiskArgs', 'VirtualMachineEfiDiskArgsDict']]] = None,
            hook_script_file_id: Optional[pulumi.Input[str]] = None,
            hostpcis: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineHostpciArgs', 'VirtualMachineHostpciArgsDict']]]]] = None,
            initialization: Optional[pulumi.Input[Union['VirtualMachineInitializationArgs', 'VirtualMachineInitializationArgsDict']]] = None,
            ipv4_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[Sequence[pulumi.Input[str]]]]]] = None,
            ipv6_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[Sequence[pulumi.Input[str]]]]]] = None,
            keyboard_layout: Optional[pulumi.Input[str]] = None,
            kvm_arguments: Optional[pulumi.Input[str]] = None,
            mac_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            machine: Optional[pulumi.Input[str]] = None,
            memory: Optional[pulumi.Input[Union['VirtualMachineMemoryArgs', 'VirtualMachineMemoryArgsDict']]] = None,
            migrate: Optional[pulumi.Input[bool]] = None,
            name: Optional[pulumi.Input[str]] = None,
            network_devices: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineNetworkDeviceArgs', 'VirtualMachineNetworkDeviceArgsDict']]]]] = None,
            network_interface_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            node_name: Optional[pulumi.Input[str]] = None,
            numas: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineNumaArgs', 'VirtualMachineNumaArgsDict']]]]] = None,
            on_boot: Optional[pulumi.Input[bool]] = None,
            operating_system: Optional[pulumi.Input[Union['VirtualMachineOperatingSystemArgs', 'VirtualMachineOperatingSystemArgsDict']]] = None,
            pool_id: Optional[pulumi.Input[str]] = None,
            protection: Optional[pulumi.Input[bool]] = None,
            reboot: Optional[pulumi.Input[bool]] = None,
            scsi_hardware: Optional[pulumi.Input[str]] = None,
            serial_devices: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineSerialDeviceArgs', 'VirtualMachineSerialDeviceArgsDict']]]]] = None,
            smbios: Optional[pulumi.Input[Union['VirtualMachineSmbiosArgs', 'VirtualMachineSmbiosArgsDict']]] = None,
            started: Optional[pulumi.Input[bool]] = None,
            startup: Optional[pulumi.Input[Union['VirtualMachineStartupArgs', 'VirtualMachineStartupArgsDict']]] = None,
            stop_on_destroy: Optional[pulumi.Input[bool]] = None,
            tablet_device: Optional[pulumi.Input[bool]] = None,
            tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            template: Optional[pulumi.Input[bool]] = None,
            timeout_clone: Optional[pulumi.Input[int]] = None,
            timeout_create: Optional[pulumi.Input[int]] = None,
            timeout_migrate: Optional[pulumi.Input[int]] = None,
            timeout_move_disk: Optional[pulumi.Input[int]] = None,
            timeout_reboot: Optional[pulumi.Input[int]] = None,
            timeout_shutdown_vm: Optional[pulumi.Input[int]] = None,
            timeout_start_vm: Optional[pulumi.Input[int]] = None,
            timeout_stop_vm: Optional[pulumi.Input[int]] = None,
            tpm_state: Optional[pulumi.Input[Union['VirtualMachineTpmStateArgs', 'VirtualMachineTpmStateArgsDict']]] = None,
            usbs: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineUsbArgs', 'VirtualMachineUsbArgsDict']]]]] = None,
            vga: Optional[pulumi.Input[Union['VirtualMachineVgaArgs', 'VirtualMachineVgaArgsDict']]] = None,
            vm_id: Optional[pulumi.Input[int]] = None,
            watchdog: Optional[pulumi.Input[Union['VirtualMachineWatchdogArgs', 'VirtualMachineWatchdogArgsDict']]] = None) -> 'VirtualMachine':
        """
        Get an existing VirtualMachine resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[bool] acpi: Whether to enable ACPI (defaults to `true`).
        :param pulumi.Input[Union['VirtualMachineAgentArgs', 'VirtualMachineAgentArgsDict']] agent: The QEMU agent configuration.
        :param pulumi.Input[Union['VirtualMachineAudioDeviceArgs', 'VirtualMachineAudioDeviceArgsDict']] audio_device: An audio device.
        :param pulumi.Input[str] bios: The BIOS implementation (defaults to `seabios`).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] boot_orders: Specify a list of devices to boot from in the order
               they appear in the list (defaults to `[]`).
        :param pulumi.Input[Union['VirtualMachineCdromArgs', 'VirtualMachineCdromArgsDict']] cdrom: The CDROM configuration.
        :param pulumi.Input[Union['VirtualMachineCloneArgs', 'VirtualMachineCloneArgsDict']] clone: The cloning configuration.
        :param pulumi.Input[Union['VirtualMachineCpuArgs', 'VirtualMachineCpuArgsDict']] cpu: The CPU configuration.
        :param pulumi.Input[str] description: The description.
        :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineDiskArgs', 'VirtualMachineDiskArgsDict']]]] disks: A disk (multiple blocks supported).
        :param pulumi.Input[Union['VirtualMachineEfiDiskArgs', 'VirtualMachineEfiDiskArgsDict']] efi_disk: The efi disk device (required if `bios` is set
               to `ovmf`)
        :param pulumi.Input[str] hook_script_file_id: The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).
        :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineHostpciArgs', 'VirtualMachineHostpciArgsDict']]]] hostpcis: A host PCI device mapping (multiple blocks supported).
        :param pulumi.Input[Union['VirtualMachineInitializationArgs', 'VirtualMachineInitializationArgsDict']] initialization: The cloud-init configuration.
        :param pulumi.Input[Sequence[pulumi.Input[Sequence[pulumi.Input[str]]]]] ipv4_addresses: The IPv4 addresses per network interface published by the
               QEMU agent (empty list when `agent.enabled` is `false`)
        :param pulumi.Input[Sequence[pulumi.Input[Sequence[pulumi.Input[str]]]]] ipv6_addresses: The IPv6 addresses per network interface published by the
               QEMU agent (empty list when `agent.enabled` is `false`)
        :param pulumi.Input[str] keyboard_layout: The keyboard layout (defaults to `en-us`).
        :param pulumi.Input[str] kvm_arguments: Arbitrary arguments passed to kvm.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] mac_addresses: The MAC addresses published by the QEMU agent with fallback
               to the network device configuration, if the agent is disabled
        :param pulumi.Input[str] machine: The VM machine type (defaults to `pc`).
        :param pulumi.Input[Union['VirtualMachineMemoryArgs', 'VirtualMachineMemoryArgsDict']] memory: The memory configuration.
        :param pulumi.Input[bool] migrate: Migrate the VM on node change instead of re-creating
               it (defaults to `false`).
        :param pulumi.Input[str] name: The virtual machine name.
        :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineNetworkDeviceArgs', 'VirtualMachineNetworkDeviceArgsDict']]]] network_devices: A network device (multiple blocks supported).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] network_interface_names: The network interface names published by the QEMU
               agent (empty list when `agent.enabled` is `false`)
        :param pulumi.Input[str] node_name: The name of the node to assign the virtual machine
               to.
        :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineNumaArgs', 'VirtualMachineNumaArgsDict']]]] numas: The NUMA configuration.
        :param pulumi.Input[bool] on_boot: Specifies whether a VM will be started during system
               boot. (defaults to `true`)
        :param pulumi.Input[Union['VirtualMachineOperatingSystemArgs', 'VirtualMachineOperatingSystemArgsDict']] operating_system: The Operating System configuration.
        :param pulumi.Input[str] pool_id: The identifier for a pool to assign the virtual machine to.
        :param pulumi.Input[bool] protection: Sets the protection flag of the VM. This will disable the remove VM and remove disk operations (defaults to `false`).
        :param pulumi.Input[bool] reboot: Reboot the VM after initial creation. (defaults to `false`)
        :param pulumi.Input[str] scsi_hardware: The SCSI hardware type (defaults to
               `virtio-scsi-pci`).
        :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineSerialDeviceArgs', 'VirtualMachineSerialDeviceArgsDict']]]] serial_devices: A serial device (multiple blocks supported).
        :param pulumi.Input[Union['VirtualMachineSmbiosArgs', 'VirtualMachineSmbiosArgsDict']] smbios: The SMBIOS (type1) settings for the VM.
        :param pulumi.Input[bool] started: Whether to start the virtual machine (defaults
               to `true`).
        :param pulumi.Input[Union['VirtualMachineStartupArgs', 'VirtualMachineStartupArgsDict']] startup: Defines startup and shutdown behavior of the VM.
        :param pulumi.Input[bool] stop_on_destroy: Whether to stop rather than shutdown on VM destroy (defaults to `false`)
        :param pulumi.Input[bool] tablet_device: Whether to enable the USB tablet device (defaults
               to `true`).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: A list of tags of the VM. This is only meta information (
               defaults to `[]`). Note: Proxmox always sorts the VM tags. If the list in
               template is not sorted, then Proxmox will always report a difference on the
               resource. You may use the `ignore_changes` lifecycle meta-argument to ignore
               changes to this attribute.
        :param pulumi.Input[bool] template: Whether to create a template (defaults to `false`).
        :param pulumi.Input[int] timeout_clone: Timeout for cloning a VM in seconds (defaults to
               1800).
        :param pulumi.Input[int] timeout_create: Timeout for creating a VM in seconds (defaults to
               1800).
        :param pulumi.Input[int] timeout_migrate: Timeout for migrating the VM (defaults to
               1800).
        :param pulumi.Input[int] timeout_move_disk: MoveDisk timeout
        :param pulumi.Input[int] timeout_reboot: Timeout for rebooting a VM in seconds (defaults
               to 1800).
        :param pulumi.Input[int] timeout_shutdown_vm: Timeout for shutting down a VM in seconds (
               defaults to 1800).
        :param pulumi.Input[int] timeout_start_vm: Timeout for starting a VM in seconds (defaults
               to 1800).
        :param pulumi.Input[int] timeout_stop_vm: Timeout for stopping a VM in seconds (defaults
               to 300).
        :param pulumi.Input[Union['VirtualMachineTpmStateArgs', 'VirtualMachineTpmStateArgsDict']] tpm_state: The TPM state device.
        :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineUsbArgs', 'VirtualMachineUsbArgsDict']]]] usbs: A host USB device mapping (multiple blocks supported).
        :param pulumi.Input[Union['VirtualMachineVgaArgs', 'VirtualMachineVgaArgsDict']] vga: The VGA configuration.
        :param pulumi.Input[int] vm_id: The VM identifier.
        :param pulumi.Input[Union['VirtualMachineWatchdogArgs', 'VirtualMachineWatchdogArgsDict']] watchdog: The watchdog configuration. Once enabled (by a guest action), the watchdog must be periodically polled by an agent inside the guest or else the watchdog will reset the guest (or execute the respective action specified).
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _VirtualMachineState.__new__(_VirtualMachineState)

        __props__.__dict__["acpi"] = acpi
        __props__.__dict__["agent"] = agent
        __props__.__dict__["audio_device"] = audio_device
        __props__.__dict__["bios"] = bios
        __props__.__dict__["boot_orders"] = boot_orders
        __props__.__dict__["cdrom"] = cdrom
        __props__.__dict__["clone"] = clone
        __props__.__dict__["cpu"] = cpu
        __props__.__dict__["description"] = description
        __props__.__dict__["disks"] = disks
        __props__.__dict__["efi_disk"] = efi_disk
        __props__.__dict__["hook_script_file_id"] = hook_script_file_id
        __props__.__dict__["hostpcis"] = hostpcis
        __props__.__dict__["initialization"] = initialization
        __props__.__dict__["ipv4_addresses"] = ipv4_addresses
        __props__.__dict__["ipv6_addresses"] = ipv6_addresses
        __props__.__dict__["keyboard_layout"] = keyboard_layout
        __props__.__dict__["kvm_arguments"] = kvm_arguments
        __props__.__dict__["mac_addresses"] = mac_addresses
        __props__.__dict__["machine"] = machine
        __props__.__dict__["memory"] = memory
        __props__.__dict__["migrate"] = migrate
        __props__.__dict__["name"] = name
        __props__.__dict__["network_devices"] = network_devices
        __props__.__dict__["network_interface_names"] = network_interface_names
        __props__.__dict__["node_name"] = node_name
        __props__.__dict__["numas"] = numas
        __props__.__dict__["on_boot"] = on_boot
        __props__.__dict__["operating_system"] = operating_system
        __props__.__dict__["pool_id"] = pool_id
        __props__.__dict__["protection"] = protection
        __props__.__dict__["reboot"] = reboot
        __props__.__dict__["scsi_hardware"] = scsi_hardware
        __props__.__dict__["serial_devices"] = serial_devices
        __props__.__dict__["smbios"] = smbios
        __props__.__dict__["started"] = started
        __props__.__dict__["startup"] = startup
        __props__.__dict__["stop_on_destroy"] = stop_on_destroy
        __props__.__dict__["tablet_device"] = tablet_device
        __props__.__dict__["tags"] = tags
        __props__.__dict__["template"] = template
        __props__.__dict__["timeout_clone"] = timeout_clone
        __props__.__dict__["timeout_create"] = timeout_create
        __props__.__dict__["timeout_migrate"] = timeout_migrate
        __props__.__dict__["timeout_move_disk"] = timeout_move_disk
        __props__.__dict__["timeout_reboot"] = timeout_reboot
        __props__.__dict__["timeout_shutdown_vm"] = timeout_shutdown_vm
        __props__.__dict__["timeout_start_vm"] = timeout_start_vm
        __props__.__dict__["timeout_stop_vm"] = timeout_stop_vm
        __props__.__dict__["tpm_state"] = tpm_state
        __props__.__dict__["usbs"] = usbs
        __props__.__dict__["vga"] = vga
        __props__.__dict__["vm_id"] = vm_id
        __props__.__dict__["watchdog"] = watchdog
        return VirtualMachine(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter
    def acpi(self) -> pulumi.Output[Optional[bool]]:
        """
        Whether to enable ACPI (defaults to `true`).
        """
        return pulumi.get(self, "acpi")

    @property
    @pulumi.getter
    def agent(self) -> pulumi.Output[Optional['outputs.VirtualMachineAgent']]:
        """
        The QEMU agent configuration.
        """
        return pulumi.get(self, "agent")

    @property
    @pulumi.getter(name="audioDevice")
    def audio_device(self) -> pulumi.Output[Optional['outputs.VirtualMachineAudioDevice']]:
        """
        An audio device.
        """
        return pulumi.get(self, "audio_device")

    @property
    @pulumi.getter
    def bios(self) -> pulumi.Output[Optional[str]]:
        """
        The BIOS implementation (defaults to `seabios`).
        """
        return pulumi.get(self, "bios")

    @property
    @pulumi.getter(name="bootOrders")
    def boot_orders(self) -> pulumi.Output[Optional[Sequence[str]]]:
        """
        Specify a list of devices to boot from in the order
        they appear in the list (defaults to `[]`).
        """
        return pulumi.get(self, "boot_orders")

    @property
    @pulumi.getter
    def cdrom(self) -> pulumi.Output[Optional['outputs.VirtualMachineCdrom']]:
        """
        The CDROM configuration.
        """
        return pulumi.get(self, "cdrom")

    @property
    @pulumi.getter
    def clone(self) -> pulumi.Output[Optional['outputs.VirtualMachineClone']]:
        """
        The cloning configuration.
        """
        return pulumi.get(self, "clone")

    @property
    @pulumi.getter
    def cpu(self) -> pulumi.Output[Optional['outputs.VirtualMachineCpu']]:
        """
        The CPU configuration.
        """
        return pulumi.get(self, "cpu")

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

    @property
    @pulumi.getter
    def disks(self) -> pulumi.Output[Optional[Sequence['outputs.VirtualMachineDisk']]]:
        """
        A disk (multiple blocks supported).
        """
        return pulumi.get(self, "disks")

    @property
    @pulumi.getter(name="efiDisk")
    def efi_disk(self) -> pulumi.Output[Optional['outputs.VirtualMachineEfiDisk']]:
        """
        The efi disk device (required if `bios` is set
        to `ovmf`)
        """
        return pulumi.get(self, "efi_disk")

    @property
    @pulumi.getter(name="hookScriptFileId")
    def hook_script_file_id(self) -> pulumi.Output[Optional[str]]:
        """
        The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).
        """
        return pulumi.get(self, "hook_script_file_id")

    @property
    @pulumi.getter
    def hostpcis(self) -> pulumi.Output[Optional[Sequence['outputs.VirtualMachineHostpci']]]:
        """
        A host PCI device mapping (multiple blocks supported).
        """
        return pulumi.get(self, "hostpcis")

    @property
    @pulumi.getter
    def initialization(self) -> pulumi.Output[Optional['outputs.VirtualMachineInitialization']]:
        """
        The cloud-init configuration.
        """
        return pulumi.get(self, "initialization")

    @property
    @pulumi.getter(name="ipv4Addresses")
    def ipv4_addresses(self) -> pulumi.Output[Sequence[Sequence[str]]]:
        """
        The IPv4 addresses per network interface published by the
        QEMU agent (empty list when `agent.enabled` is `false`)
        """
        return pulumi.get(self, "ipv4_addresses")

    @property
    @pulumi.getter(name="ipv6Addresses")
    def ipv6_addresses(self) -> pulumi.Output[Sequence[Sequence[str]]]:
        """
        The IPv6 addresses per network interface published by the
        QEMU agent (empty list when `agent.enabled` is `false`)
        """
        return pulumi.get(self, "ipv6_addresses")

    @property
    @pulumi.getter(name="keyboardLayout")
    def keyboard_layout(self) -> pulumi.Output[Optional[str]]:
        """
        The keyboard layout (defaults to `en-us`).
        """
        return pulumi.get(self, "keyboard_layout")

    @property
    @pulumi.getter(name="kvmArguments")
    def kvm_arguments(self) -> pulumi.Output[Optional[str]]:
        """
        Arbitrary arguments passed to kvm.
        """
        return pulumi.get(self, "kvm_arguments")

    @property
    @pulumi.getter(name="macAddresses")
    def mac_addresses(self) -> pulumi.Output[Sequence[str]]:
        """
        The MAC addresses published by the QEMU agent with fallback
        to the network device configuration, if the agent is disabled
        """
        return pulumi.get(self, "mac_addresses")

    @property
    @pulumi.getter
    def machine(self) -> pulumi.Output[Optional[str]]:
        """
        The VM machine type (defaults to `pc`).
        """
        return pulumi.get(self, "machine")

    @property
    @pulumi.getter
    def memory(self) -> pulumi.Output[Optional['outputs.VirtualMachineMemory']]:
        """
        The memory configuration.
        """
        return pulumi.get(self, "memory")

    @property
    @pulumi.getter
    def migrate(self) -> pulumi.Output[Optional[bool]]:
        """
        Migrate the VM on node change instead of re-creating
        it (defaults to `false`).
        """
        return pulumi.get(self, "migrate")

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

    @property
    @pulumi.getter(name="networkDevices")
    def network_devices(self) -> pulumi.Output[Optional[Sequence['outputs.VirtualMachineNetworkDevice']]]:
        """
        A network device (multiple blocks supported).
        """
        return pulumi.get(self, "network_devices")

    @property
    @pulumi.getter(name="networkInterfaceNames")
    def network_interface_names(self) -> pulumi.Output[Sequence[str]]:
        """
        The network interface names published by the QEMU
        agent (empty list when `agent.enabled` is `false`)
        """
        return pulumi.get(self, "network_interface_names")

    @property
    @pulumi.getter(name="nodeName")
    def node_name(self) -> pulumi.Output[str]:
        """
        The name of the node to assign the virtual machine
        to.
        """
        return pulumi.get(self, "node_name")

    @property
    @pulumi.getter
    def numas(self) -> pulumi.Output[Optional[Sequence['outputs.VirtualMachineNuma']]]:
        """
        The NUMA configuration.
        """
        return pulumi.get(self, "numas")

    @property
    @pulumi.getter(name="onBoot")
    def on_boot(self) -> pulumi.Output[Optional[bool]]:
        """
        Specifies whether a VM will be started during system
        boot. (defaults to `true`)
        """
        return pulumi.get(self, "on_boot")

    @property
    @pulumi.getter(name="operatingSystem")
    def operating_system(self) -> pulumi.Output[Optional['outputs.VirtualMachineOperatingSystem']]:
        """
        The Operating System configuration.
        """
        return pulumi.get(self, "operating_system")

    @property
    @pulumi.getter(name="poolId")
    def pool_id(self) -> pulumi.Output[Optional[str]]:
        """
        The identifier for a pool to assign the virtual machine to.
        """
        return pulumi.get(self, "pool_id")

    @property
    @pulumi.getter
    def protection(self) -> pulumi.Output[Optional[bool]]:
        """
        Sets the protection flag of the VM. This will disable the remove VM and remove disk operations (defaults to `false`).
        """
        return pulumi.get(self, "protection")

    @property
    @pulumi.getter
    def reboot(self) -> pulumi.Output[Optional[bool]]:
        """
        Reboot the VM after initial creation. (defaults to `false`)
        """
        return pulumi.get(self, "reboot")

    @property
    @pulumi.getter(name="scsiHardware")
    def scsi_hardware(self) -> pulumi.Output[Optional[str]]:
        """
        The SCSI hardware type (defaults to
        `virtio-scsi-pci`).
        """
        return pulumi.get(self, "scsi_hardware")

    @property
    @pulumi.getter(name="serialDevices")
    def serial_devices(self) -> pulumi.Output[Optional[Sequence['outputs.VirtualMachineSerialDevice']]]:
        """
        A serial device (multiple blocks supported).
        """
        return pulumi.get(self, "serial_devices")

    @property
    @pulumi.getter
    def smbios(self) -> pulumi.Output[Optional['outputs.VirtualMachineSmbios']]:
        """
        The SMBIOS (type1) settings for the VM.
        """
        return pulumi.get(self, "smbios")

    @property
    @pulumi.getter
    def started(self) -> pulumi.Output[Optional[bool]]:
        """
        Whether to start the virtual machine (defaults
        to `true`).
        """
        return pulumi.get(self, "started")

    @property
    @pulumi.getter
    def startup(self) -> pulumi.Output[Optional['outputs.VirtualMachineStartup']]:
        """
        Defines startup and shutdown behavior of the VM.
        """
        return pulumi.get(self, "startup")

    @property
    @pulumi.getter(name="stopOnDestroy")
    def stop_on_destroy(self) -> pulumi.Output[Optional[bool]]:
        """
        Whether to stop rather than shutdown on VM destroy (defaults to `false`)
        """
        return pulumi.get(self, "stop_on_destroy")

    @property
    @pulumi.getter(name="tabletDevice")
    def tablet_device(self) -> pulumi.Output[Optional[bool]]:
        """
        Whether to enable the USB tablet device (defaults
        to `true`).
        """
        return pulumi.get(self, "tablet_device")

    @property
    @pulumi.getter
    def tags(self) -> pulumi.Output[Optional[Sequence[str]]]:
        """
        A list of tags of the VM. This is only meta information (
        defaults to `[]`). Note: Proxmox always sorts the VM tags. If the list in
        template is not sorted, then Proxmox will always report a difference on the
        resource. You may use the `ignore_changes` lifecycle meta-argument to ignore
        changes to this attribute.
        """
        return pulumi.get(self, "tags")

    @property
    @pulumi.getter
    def template(self) -> pulumi.Output[Optional[bool]]:
        """
        Whether to create a template (defaults to `false`).
        """
        return pulumi.get(self, "template")

    @property
    @pulumi.getter(name="timeoutClone")
    def timeout_clone(self) -> pulumi.Output[Optional[int]]:
        """
        Timeout for cloning a VM in seconds (defaults to
        1800).
        """
        return pulumi.get(self, "timeout_clone")

    @property
    @pulumi.getter(name="timeoutCreate")
    def timeout_create(self) -> pulumi.Output[Optional[int]]:
        """
        Timeout for creating a VM in seconds (defaults to
        1800).
        """
        return pulumi.get(self, "timeout_create")

    @property
    @pulumi.getter(name="timeoutMigrate")
    def timeout_migrate(self) -> pulumi.Output[Optional[int]]:
        """
        Timeout for migrating the VM (defaults to
        1800).
        """
        return pulumi.get(self, "timeout_migrate")

    @property
    @pulumi.getter(name="timeoutMoveDisk")
    @_utilities.deprecated("""This field is deprecated and will be removed in a future release. An overall operation timeout (timeout_create / timeout_clone / timeout_migrate) is used instead.""")
    def timeout_move_disk(self) -> pulumi.Output[Optional[int]]:
        """
        MoveDisk timeout
        """
        return pulumi.get(self, "timeout_move_disk")

    @property
    @pulumi.getter(name="timeoutReboot")
    def timeout_reboot(self) -> pulumi.Output[Optional[int]]:
        """
        Timeout for rebooting a VM in seconds (defaults
        to 1800).
        """
        return pulumi.get(self, "timeout_reboot")

    @property
    @pulumi.getter(name="timeoutShutdownVm")
    def timeout_shutdown_vm(self) -> pulumi.Output[Optional[int]]:
        """
        Timeout for shutting down a VM in seconds (
        defaults to 1800).
        """
        return pulumi.get(self, "timeout_shutdown_vm")

    @property
    @pulumi.getter(name="timeoutStartVm")
    def timeout_start_vm(self) -> pulumi.Output[Optional[int]]:
        """
        Timeout for starting a VM in seconds (defaults
        to 1800).
        """
        return pulumi.get(self, "timeout_start_vm")

    @property
    @pulumi.getter(name="timeoutStopVm")
    def timeout_stop_vm(self) -> pulumi.Output[Optional[int]]:
        """
        Timeout for stopping a VM in seconds (defaults
        to 300).
        """
        return pulumi.get(self, "timeout_stop_vm")

    @property
    @pulumi.getter(name="tpmState")
    def tpm_state(self) -> pulumi.Output[Optional['outputs.VirtualMachineTpmState']]:
        """
        The TPM state device.
        """
        return pulumi.get(self, "tpm_state")

    @property
    @pulumi.getter
    def usbs(self) -> pulumi.Output[Optional[Sequence['outputs.VirtualMachineUsb']]]:
        """
        A host USB device mapping (multiple blocks supported).
        """
        return pulumi.get(self, "usbs")

    @property
    @pulumi.getter
    def vga(self) -> pulumi.Output[Optional['outputs.VirtualMachineVga']]:
        """
        The VGA configuration.
        """
        return pulumi.get(self, "vga")

    @property
    @pulumi.getter(name="vmId")
    def vm_id(self) -> pulumi.Output[int]:
        """
        The VM identifier.
        """
        return pulumi.get(self, "vm_id")

    @property
    @pulumi.getter
    def watchdog(self) -> pulumi.Output[Optional['outputs.VirtualMachineWatchdog']]:
        """
        The watchdog configuration. Once enabled (by a guest action), the watchdog must be periodically polled by an agent inside the guest or else the watchdog will reset the guest (or execute the respective action specified).
        """
        return pulumi.get(self, "watchdog")

