# 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 pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from . import _utilities
from . import outputs
from ._inputs import *

__all__ = ['VirtualMachineArgs', 'VirtualMachine']

@pulumi.input_type
class VirtualMachineArgs:
    def __init__(__self__, *,
                 resource_pool_id: pulumi.Input[str],
                 alternate_guest_name: Optional[pulumi.Input[str]] = None,
                 annotation: Optional[pulumi.Input[str]] = None,
                 boot_delay: Optional[pulumi.Input[int]] = None,
                 boot_retry_delay: Optional[pulumi.Input[int]] = None,
                 boot_retry_enabled: Optional[pulumi.Input[bool]] = None,
                 cdroms: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineCdromArgs']]]] = None,
                 clone: Optional[pulumi.Input['VirtualMachineCloneArgs']] = None,
                 cpu_hot_add_enabled: Optional[pulumi.Input[bool]] = None,
                 cpu_hot_remove_enabled: Optional[pulumi.Input[bool]] = None,
                 cpu_limit: Optional[pulumi.Input[int]] = None,
                 cpu_performance_counters_enabled: Optional[pulumi.Input[bool]] = None,
                 cpu_reservation: Optional[pulumi.Input[int]] = None,
                 cpu_share_count: Optional[pulumi.Input[int]] = None,
                 cpu_share_level: Optional[pulumi.Input[str]] = None,
                 custom_attributes: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 datacenter_id: Optional[pulumi.Input[str]] = None,
                 datastore_cluster_id: Optional[pulumi.Input[str]] = None,
                 datastore_id: Optional[pulumi.Input[str]] = None,
                 disks: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineDiskArgs']]]] = None,
                 efi_secure_boot_enabled: Optional[pulumi.Input[bool]] = None,
                 enable_disk_uuid: Optional[pulumi.Input[bool]] = None,
                 enable_logging: Optional[pulumi.Input[bool]] = None,
                 ept_rvi_mode: Optional[pulumi.Input[str]] = None,
                 extra_config: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 extra_config_reboot_required: Optional[pulumi.Input[bool]] = None,
                 firmware: Optional[pulumi.Input[str]] = None,
                 folder: Optional[pulumi.Input[str]] = None,
                 force_power_off: Optional[pulumi.Input[bool]] = None,
                 guest_id: Optional[pulumi.Input[str]] = None,
                 hardware_version: Optional[pulumi.Input[int]] = None,
                 host_system_id: Optional[pulumi.Input[str]] = None,
                 hv_mode: Optional[pulumi.Input[str]] = None,
                 ide_controller_count: Optional[pulumi.Input[int]] = None,
                 ignored_guest_ips: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 latency_sensitivity: Optional[pulumi.Input[str]] = None,
                 memory: Optional[pulumi.Input[int]] = None,
                 memory_hot_add_enabled: Optional[pulumi.Input[bool]] = None,
                 memory_limit: Optional[pulumi.Input[int]] = None,
                 memory_reservation: Optional[pulumi.Input[int]] = None,
                 memory_share_count: Optional[pulumi.Input[int]] = None,
                 memory_share_level: Optional[pulumi.Input[str]] = None,
                 migrate_wait_timeout: Optional[pulumi.Input[int]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 nested_hv_enabled: Optional[pulumi.Input[bool]] = None,
                 network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineNetworkInterfaceArgs']]]] = None,
                 num_cores_per_socket: Optional[pulumi.Input[int]] = None,
                 num_cpus: Optional[pulumi.Input[int]] = None,
                 ovf_deploy: Optional[pulumi.Input['VirtualMachineOvfDeployArgs']] = None,
                 pci_device_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 poweron_timeout: Optional[pulumi.Input[int]] = None,
                 replace_trigger: Optional[pulumi.Input[str]] = None,
                 run_tools_scripts_after_power_on: Optional[pulumi.Input[bool]] = None,
                 run_tools_scripts_after_resume: Optional[pulumi.Input[bool]] = None,
                 run_tools_scripts_before_guest_reboot: Optional[pulumi.Input[bool]] = None,
                 run_tools_scripts_before_guest_shutdown: Optional[pulumi.Input[bool]] = None,
                 run_tools_scripts_before_guest_standby: Optional[pulumi.Input[bool]] = None,
                 sata_controller_count: Optional[pulumi.Input[int]] = None,
                 scsi_bus_sharing: Optional[pulumi.Input[str]] = None,
                 scsi_controller_count: Optional[pulumi.Input[int]] = None,
                 scsi_type: Optional[pulumi.Input[str]] = None,
                 shutdown_wait_timeout: Optional[pulumi.Input[int]] = None,
                 storage_policy_id: Optional[pulumi.Input[str]] = None,
                 swap_placement_policy: Optional[pulumi.Input[str]] = None,
                 sync_time_with_host: Optional[pulumi.Input[bool]] = None,
                 sync_time_with_host_periodically: Optional[pulumi.Input[bool]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 tools_upgrade_policy: Optional[pulumi.Input[str]] = None,
                 vapp: Optional[pulumi.Input['VirtualMachineVappArgs']] = None,
                 vbs_enabled: Optional[pulumi.Input[bool]] = None,
                 vvtd_enabled: Optional[pulumi.Input[bool]] = None,
                 wait_for_guest_ip_timeout: Optional[pulumi.Input[int]] = None,
                 wait_for_guest_net_routable: Optional[pulumi.Input[bool]] = None,
                 wait_for_guest_net_timeout: Optional[pulumi.Input[int]] = None):
        """
        The set of arguments for constructing a VirtualMachine resource.
        :param pulumi.Input[str] resource_pool_id: The managed object reference ID of the resource pool in which to place the virtual machine. See the Virtual Machine Migration section for more information on modifying this value.
               
               > **NOTE:** All clusters and standalone hosts have a default root resource pool. This resource argument does not directly accept the cluster or standalone host resource. For more information, see the section on specifying the Root Resource Pool in the `ResourcePool` data source documentation on using the root resource pool.
        :param pulumi.Input[str] alternate_guest_name: The guest name for the operating system when `guest_id` is `otherGuest` or `otherGuest64`.
        :param pulumi.Input[str] annotation: A user-provided description of the virtual machine.
        :param pulumi.Input[int] boot_delay: The number of milliseconds to wait before starting the boot sequence. The default is no delay.
        :param pulumi.Input[int] boot_retry_delay: The number of milliseconds to wait before retrying the boot sequence. This option is only valid if `boot_retry_enabled` is `true`. Default: `10000` (10 seconds).
        :param pulumi.Input[bool] boot_retry_enabled: If set to `true`, a virtual machine that fails to boot will try again after the delay defined in `boot_retry_delay`. Default: `false`.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineCdromArgs']]] cdroms: A specification for a CD-ROM device on the virtual machine. See CD-ROM options for more information.
        :param pulumi.Input['VirtualMachineCloneArgs'] clone: When specified, the virtual machine will be created as a clone of a specified template. Optional customization options can be submitted for the resource. See creating a virtual machine from a template for more information.
        :param pulumi.Input[bool] cpu_hot_add_enabled: Allow CPUs to be added to the virtual machine while it is powered on.
        :param pulumi.Input[bool] cpu_hot_remove_enabled: Allow CPUs to be removed to the virtual machine while it is powered on.
        :param pulumi.Input[int] cpu_limit: The maximum amount of CPU (in MHz) that the virtual machine can consume, regardless of available resources. The default is no limit.
        :param pulumi.Input[bool] cpu_performance_counters_enabled: Enable CPU performance counters on the virtual machine. Default: `false`.
        :param pulumi.Input[int] cpu_reservation: The amount of CPU (in MHz) that the virtual machine is guaranteed. The default is no reservation.
        :param pulumi.Input[int] cpu_share_count: The number of CPU shares allocated to the virtual machine when the `cpu_share_level` is `custom`.
        :param pulumi.Input[str] cpu_share_level: The allocation level for the virtual machine CPU resources. One of `high`, `low`, `normal`, or `custom`. Default: `custom`.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] custom_attributes: Map of custom attribute ids to attribute value strings to set for virtual machine. Please refer to the `vsphere_custom_attributes` resource for more information on setting custom attributes.
               
               > **NOTE:** Custom attributes requires vCenter Server and is not supported on direct ESXi host connections.
        :param pulumi.Input[str] datacenter_id: The datacenter ID. Required only when deploying an OVF/OVA template.
        :param pulumi.Input[str] datastore_cluster_id: The managed object reference ID of the datastore cluster in which to place the virtual machine. This setting applies to entire virtual machine and implies that you wish to use vSphere Storage DRS with the virtual machine. See the section on virtual machine migration for more information on modifying this value.
               
               > **NOTE:** One of `datastore_id` or `datastore_cluster_id` must be specified.
               
               > **NOTE:** Use of `datastore_cluster_id` requires vSphere Storage DRS to be enabled on the specified datastore cluster.
               
               > **NOTE:** The `datastore_cluster_id` setting applies to the entire virtual machine resource. You cannot assign individual individual disks to datastore clusters. In addition, you cannot use the `attach` setting to attach external disks on virtual machines that are assigned to datastore clusters.
        :param pulumi.Input[str] datastore_id: The managed object reference ID of the datastore in which to place the virtual machine. The virtual machine configuration files is placed here, along with any virtual disks that are created where a datastore is not explicitly specified. See the section on virtual machine migration for more information on modifying this value.
               
               > **NOTE:** Datastores cannot be assigned to individual disks when `datastore_cluster_id` is used.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineDiskArgs']]] disks: A specification for a virtual disk device on the virtual machine. See disk options for more information.
        :param pulumi.Input[bool] efi_secure_boot_enabled: Use this option to enable EFI secure boot when the `firmware` type is set to is `efi`. Default: `false`.
               
               > **NOTE:** EFI secure boot is only available on vSphere 6.5 and later.
        :param pulumi.Input[bool] enable_disk_uuid: Expose the UUIDs of attached virtual disks to the virtual machine, allowing access to them in the guest. Default: `false`.
        :param pulumi.Input[bool] enable_logging: Enable logging of virtual machine events to a log file stored in the virtual machine directory. Default: `false`.
        :param pulumi.Input[str] ept_rvi_mode: The EPT/RVI (hardware memory virtualization) setting for the virtual machine. One of `automatic`, `on`, or `off`. Default: `automatic`.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] extra_config: Extra configuration data for the virtual machine. Can be used to supply advanced parameters not normally in configuration, such as instance metadata and userdata.
               
               > **NOTE:** Do not use `extra_config` when working with a template imported from OVF/OVA as your settings may be ignored. Use the `vapp` block `properties` section as described in Using vApp Properties for OVF/OVA Configuration.
        :param pulumi.Input[bool] extra_config_reboot_required: Allow the virtual machine to be rebooted when a change to `extra_config` occurs. Default: `true`.
        :param pulumi.Input[str] firmware: The firmware for the virtual machine. One of `bios` or `efi`.
        :param pulumi.Input[str] folder: The path to the virtual machine folder in which to place the virtual machine, relative to the datacenter path (`/<datacenter-name>/vm`).  For example, `/dc-01/vm/foo`
        :param pulumi.Input[bool] force_power_off: If a guest shutdown failed or times out while updating or destroying (see `shutdown_wait_timeout`), force the power-off of the virtual machine. Default: `true`.
        :param pulumi.Input[str] guest_id: The guest ID for the operating system type. For a full list of possible values, see [here][vmware-docs-guest-ids]. Default: `otherGuest64`.
               
               [vmware-docs-guest-ids]: https://vdc-download.vmware.com/vmwb-repository/dcr-public/b50dcbbf-051d-4204-a3e7-e1b618c1e384/538cf2ec-b34f-4bae-a332-3820ef9e7773/vim.vm.GuestOsDescriptor.GuestOsIdentifier.html
        :param pulumi.Input[int] hardware_version: The hardware version number. Valid range is from 4 to 19. The hardware version cannot be downgraded. See [virtual machine hardware compatibility][virtual-machine-hardware-compatibility] for more information.
               
               [virtual-machine-hardware-compatibility]: https://kb.vmware.com/s/article/2007240
        :param pulumi.Input[str] host_system_id: The managed object reference ID of a host on which to place the virtual machine. See the section on virtual machine migration for more information on modifying this value. When using a vSphere cluster, if a `host_system_id` is not supplied, vSphere will select a host in the cluster to place the virtual machine, according to any defaults or vSphere DRS placement policies.
        :param pulumi.Input[str] hv_mode: The hardware virtualization (non-nested) setting for the virtual machine. One of `hvAuto`, `hvOn`, or `hvOff`. Default: `hvAuto`.
        :param pulumi.Input[int] ide_controller_count: The number of IDE controllers that the virtual machine. This directly affects the number of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers. Default: `2`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ignored_guest_ips: List of IP addresses and CIDR networks to ignore while waiting for an available IP address using either of the waiters. Any IP addresses in this list will be ignored so that the waiter will continue to wait for a valid IP address. Default: `[]`.
        :param pulumi.Input[str] latency_sensitivity: Controls the scheduling delay of the virtual machine. Use a higher sensitivity for applications that require lower latency, such as VOIP, media player applications, or applications that require frequent access to mouse or keyboard devices. One of `low`, `normal`, `medium`, or `high`.
               
               > **NOTE:** On higher sensitivities, you may need to adjust the `memory_reservation` to the full amount of memory provisioned for the virtual machine.
        :param pulumi.Input[int] memory: The memory size to assign to the virtual machine, in MB. Default: `1024` (1 GB).
        :param pulumi.Input[bool] memory_hot_add_enabled: Allow memory to be added to the virtual machine while it is powered on.
               
               > **NOTE:** CPU and memory hot add options are not available on all guest operating systems. Please refer to the [VMware Guest OS Compatibility Guide][vmware-docs-compat-guide] to which settings are allow for your guest operating system. In addition, at least one `pulumi up` must be run before you are able to use CPU and memory hot add.
               
               [vmware-docs-compat-guide]: http://partnerweb.vmware.com/comp_guide2/pdf/VMware_GOS_Compatibility_Guide.pdf
               
               > **NOTE:** For Linux 64-bit guest operating systems with less than or equal to 3GB, the virtual machine must powered off to add memory beyond 3GB. Subsequent hot add of memory does not require the virtual machine to be powered-off to apply the plan. Please refer to [VMware KB 2008405][vmware-kb-2008405].
               
               [vmware-kb-2008405]: https://kb.vmware.com/s/article/2008405
        :param pulumi.Input[int] memory_limit: The maximum amount of memory (in MB) that th virtual machine can consume, regardless of available resources. The default is no limit.
        :param pulumi.Input[int] memory_reservation: The amount of memory (in MB) that the virtual machine is guaranteed. The default is no reservation.
        :param pulumi.Input[int] memory_share_count: The number of memory shares allocated to the virtual machine when the `memory_share_level` is `custom`.
        :param pulumi.Input[str] memory_share_level: The allocation level for the virtual machine memory resources. One of `high`, `low`, `normal`, or `custom`. Default: `custom`.
        :param pulumi.Input[int] migrate_wait_timeout: The amount of time, in minutes, to wait for a virtual machine migration to complete before failing. Default: `10` minutes. See the section on virtual machine migration for more information.
        :param pulumi.Input[str] name: The name of the virtual machine.
        :param pulumi.Input[bool] nested_hv_enabled: Enable nested hardware virtualization on the virtual machine, facilitating nested virtualization in the guest operating system. Default: `false`.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineNetworkInterfaceArgs']]] network_interfaces: A specification for a virtual NIC on the virtual machine. See network interface options for more information.
        :param pulumi.Input[int] num_cores_per_socket: The number of cores per socket in the virtual machine. The number of vCPUs on the virtual machine will be `num_cpus` divided by `num_cores_per_socket`. If specified, the value supplied to `num_cpus` must be evenly divisible by this value. Default: `1`.
        :param pulumi.Input[int] num_cpus: The total number of virtual processor cores to assign to the virtual machine. Default: `1`.
        :param pulumi.Input['VirtualMachineOvfDeployArgs'] ovf_deploy: When specified, the virtual machine will be deployed from the provided OVF/OVA template. See creating a virtual machine from an OVF/OVA template for more information.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] pci_device_ids: List of host PCI device IDs in which to create PCI passthroughs.
               
               > **NOTE:** Cloning requires vCenter Server and is not supported on direct ESXi host connections.
        :param pulumi.Input[int] poweron_timeout: The amount of time, in seconds, that we will be trying to power on a VM
        :param pulumi.Input[str] replace_trigger: Triggers replacement of resource whenever it changes.
               
               For example, `replace_trigger = sha256(format("%s-%s",data.template_file.cloud_init_metadata.rendered,data.template_file.cloud_init_userdata.rendered))` will fingerprint the changes in cloud-init metadata and userdata templates. This will enable a replacement of the resource whenever the dependant template renders a new configuration. (Forces a replacement.)
        :param pulumi.Input[bool] run_tools_scripts_after_power_on: Enable post-power-on scripts to run when VMware Tools is installed. Default: `true`.
        :param pulumi.Input[bool] run_tools_scripts_after_resume: Enable ost-resume scripts to run when VMware Tools is installed. Default: `true`.
        :param pulumi.Input[bool] run_tools_scripts_before_guest_reboot: Enable pre-reboot scripts to run when VMware Tools is installed. Default: `false`.
        :param pulumi.Input[bool] run_tools_scripts_before_guest_shutdown: Enable pre-shutdown scripts to run when VMware Tools is installed. Default: `true`.
        :param pulumi.Input[bool] run_tools_scripts_before_guest_standby: Enable pre-standby scripts to run when VMware Tools is installed. Default: `true`.
        :param pulumi.Input[int] sata_controller_count: The number of SATA controllers that Terraform manages on this virtual machine. This directly affects the amount of disks
               you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove
               controllers.
        :param pulumi.Input[str] scsi_bus_sharing: The type of SCSI bus sharing for the virtual machine SCSI controller. One of `physicalSharing`, `virtualSharing`, and `noSharing`. Default: `noSharing`.
        :param pulumi.Input[int] scsi_controller_count: The number of SCSI controllers that Terraform manages on this virtual machine. This directly affects the amount of disks
               you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove
               controllers.
        :param pulumi.Input[str] scsi_type: The SCSI controller type for the virtual machine. One of `lsilogic` (LSI Logic Parallel), `lsilogic-sas` (LSI Logic SAS) or `pvscsi` (VMware Paravirtual). Default: `pvscsi`.
        :param pulumi.Input[int] shutdown_wait_timeout: The amount of time, in minutes, to wait for a graceful guest shutdown when making necessary updates to the virtual machine. If `force_power_off` is set to `true`, the virtual machine will be forced to power-off after the timeout, otherwise an error is returned. Default: `3` minutes.
        :param pulumi.Input[str] storage_policy_id: The ID of the storage policy to assign to the home directory of a virtual machine.
        :param pulumi.Input[str] swap_placement_policy: The swap file placement policy for the virtual machine. One of `inherit`, `hostLocal`, or `vmDirectory`. Default: `inherit`.
        :param pulumi.Input[bool] sync_time_with_host: Enable the guest operating system to synchronization its clock with the host when the virtual machine is powered on or resumed. Requires vSphere 7.0 Update 1 and later. Requires VMware Tools to be installed. Default: `false`.
        :param pulumi.Input[bool] sync_time_with_host_periodically: Enable the guest operating system to periodically synchronize its clock with the host. Requires vSphere 7.0 Update 1 and later. On previous versions, setting `sync_time_with_host` is will enable periodic synchronization. Requires VMware Tools to be installed. Default: `false`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: The IDs of any tags to attach to this resource. Please refer to the `Tag` resource for more information on applying tags to virtual machine resources.
               
               > **NOTE:** Tagging support is unsupported on direct ESXi host connections and requires vCenter Server instance.
        :param pulumi.Input[str] tools_upgrade_policy: Enable automatic upgrade of the VMware Tools version when the virtual machine is rebooted. If necessary, VMware Tools is upgraded to the latest version supported by the host on which the virtual machine is running. Requires VMware Tools to be installed. One of `manual` or `upgradeAtPowerCycle`. Default: `manual`.
        :param pulumi.Input['VirtualMachineVappArgs'] vapp: Used for vApp configurations. The only sub-key available is `properties`, which is a key/value map of properties for virtual machines imported from and OVF/OVA. See Using vApp Properties for OVF/OVA Configuration for more information.
        :param pulumi.Input[bool] vbs_enabled: Enable Virtualization Based Security. Requires `firmware` to be `efi`. In addition, `vvtd_enabled`, `nested_hv_enabled`, and `efi_secure_boot_enabled` must all have a value of `true`. Supported on vSphere 6.7 and later. Default: `false`.
        :param pulumi.Input[bool] vvtd_enabled: Enable Intel Virtualization Technology for Directed I/O for the virtual machine (_I/O MMU_ in the vSphere Client). Supported on vSphere 6.7 and later. Default: `false`.
        :param pulumi.Input[int] wait_for_guest_ip_timeout: The amount of time, in minutes, to wait for an available guest IP address on the virtual machine. This should only be used if the version VMware Tools does not allow the `wait_for_guest_net_timeout` waiter to be used. A value less than `1` disables the waiter. Default: `0`.
        :param pulumi.Input[bool] wait_for_guest_net_routable: Controls whether or not the guest network waiter waits for a routable address. When `false`, the waiter does not wait for a default gateway, nor are IP addresses checked against any discovered default gateways as part of its success criteria. This property is ignored if the `wait_for_guest_ip_timeout` waiter is used. Default: `true`.
        :param pulumi.Input[int] wait_for_guest_net_timeout: The amount of time, in minutes, to wait for an available guest IP address on the virtual machine. Older versions of VMware Tools do not populate this property. In those cases, this waiter can be disabled and the `wait_for_guest_ip_timeout` waiter can be used instead. A value less than `1` disables the waiter. Default: `5` minutes.
        """
        pulumi.set(__self__, "resource_pool_id", resource_pool_id)
        if alternate_guest_name is not None:
            pulumi.set(__self__, "alternate_guest_name", alternate_guest_name)
        if annotation is not None:
            pulumi.set(__self__, "annotation", annotation)
        if boot_delay is not None:
            pulumi.set(__self__, "boot_delay", boot_delay)
        if boot_retry_delay is not None:
            pulumi.set(__self__, "boot_retry_delay", boot_retry_delay)
        if boot_retry_enabled is not None:
            pulumi.set(__self__, "boot_retry_enabled", boot_retry_enabled)
        if cdroms is not None:
            pulumi.set(__self__, "cdroms", cdroms)
        if clone is not None:
            pulumi.set(__self__, "clone", clone)
        if cpu_hot_add_enabled is not None:
            pulumi.set(__self__, "cpu_hot_add_enabled", cpu_hot_add_enabled)
        if cpu_hot_remove_enabled is not None:
            pulumi.set(__self__, "cpu_hot_remove_enabled", cpu_hot_remove_enabled)
        if cpu_limit is not None:
            pulumi.set(__self__, "cpu_limit", cpu_limit)
        if cpu_performance_counters_enabled is not None:
            pulumi.set(__self__, "cpu_performance_counters_enabled", cpu_performance_counters_enabled)
        if cpu_reservation is not None:
            pulumi.set(__self__, "cpu_reservation", cpu_reservation)
        if cpu_share_count is not None:
            pulumi.set(__self__, "cpu_share_count", cpu_share_count)
        if cpu_share_level is not None:
            pulumi.set(__self__, "cpu_share_level", cpu_share_level)
        if custom_attributes is not None:
            pulumi.set(__self__, "custom_attributes", custom_attributes)
        if datacenter_id is not None:
            pulumi.set(__self__, "datacenter_id", datacenter_id)
        if datastore_cluster_id is not None:
            pulumi.set(__self__, "datastore_cluster_id", datastore_cluster_id)
        if datastore_id is not None:
            pulumi.set(__self__, "datastore_id", datastore_id)
        if disks is not None:
            pulumi.set(__self__, "disks", disks)
        if efi_secure_boot_enabled is not None:
            pulumi.set(__self__, "efi_secure_boot_enabled", efi_secure_boot_enabled)
        if enable_disk_uuid is not None:
            pulumi.set(__self__, "enable_disk_uuid", enable_disk_uuid)
        if enable_logging is not None:
            pulumi.set(__self__, "enable_logging", enable_logging)
        if ept_rvi_mode is not None:
            pulumi.set(__self__, "ept_rvi_mode", ept_rvi_mode)
        if extra_config is not None:
            pulumi.set(__self__, "extra_config", extra_config)
        if extra_config_reboot_required is not None:
            pulumi.set(__self__, "extra_config_reboot_required", extra_config_reboot_required)
        if firmware is not None:
            pulumi.set(__self__, "firmware", firmware)
        if folder is not None:
            pulumi.set(__self__, "folder", folder)
        if force_power_off is not None:
            pulumi.set(__self__, "force_power_off", force_power_off)
        if guest_id is not None:
            pulumi.set(__self__, "guest_id", guest_id)
        if hardware_version is not None:
            pulumi.set(__self__, "hardware_version", hardware_version)
        if host_system_id is not None:
            pulumi.set(__self__, "host_system_id", host_system_id)
        if hv_mode is not None:
            pulumi.set(__self__, "hv_mode", hv_mode)
        if ide_controller_count is not None:
            pulumi.set(__self__, "ide_controller_count", ide_controller_count)
        if ignored_guest_ips is not None:
            pulumi.set(__self__, "ignored_guest_ips", ignored_guest_ips)
        if latency_sensitivity is not None:
            pulumi.set(__self__, "latency_sensitivity", latency_sensitivity)
        if memory is not None:
            pulumi.set(__self__, "memory", memory)
        if memory_hot_add_enabled is not None:
            pulumi.set(__self__, "memory_hot_add_enabled", memory_hot_add_enabled)
        if memory_limit is not None:
            pulumi.set(__self__, "memory_limit", memory_limit)
        if memory_reservation is not None:
            pulumi.set(__self__, "memory_reservation", memory_reservation)
        if memory_share_count is not None:
            pulumi.set(__self__, "memory_share_count", memory_share_count)
        if memory_share_level is not None:
            pulumi.set(__self__, "memory_share_level", memory_share_level)
        if migrate_wait_timeout is not None:
            pulumi.set(__self__, "migrate_wait_timeout", migrate_wait_timeout)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if nested_hv_enabled is not None:
            pulumi.set(__self__, "nested_hv_enabled", nested_hv_enabled)
        if network_interfaces is not None:
            pulumi.set(__self__, "network_interfaces", network_interfaces)
        if num_cores_per_socket is not None:
            pulumi.set(__self__, "num_cores_per_socket", num_cores_per_socket)
        if num_cpus is not None:
            pulumi.set(__self__, "num_cpus", num_cpus)
        if ovf_deploy is not None:
            pulumi.set(__self__, "ovf_deploy", ovf_deploy)
        if pci_device_ids is not None:
            pulumi.set(__self__, "pci_device_ids", pci_device_ids)
        if poweron_timeout is not None:
            pulumi.set(__self__, "poweron_timeout", poweron_timeout)
        if replace_trigger is not None:
            pulumi.set(__self__, "replace_trigger", replace_trigger)
        if run_tools_scripts_after_power_on is not None:
            pulumi.set(__self__, "run_tools_scripts_after_power_on", run_tools_scripts_after_power_on)
        if run_tools_scripts_after_resume is not None:
            pulumi.set(__self__, "run_tools_scripts_after_resume", run_tools_scripts_after_resume)
        if run_tools_scripts_before_guest_reboot is not None:
            pulumi.set(__self__, "run_tools_scripts_before_guest_reboot", run_tools_scripts_before_guest_reboot)
        if run_tools_scripts_before_guest_shutdown is not None:
            pulumi.set(__self__, "run_tools_scripts_before_guest_shutdown", run_tools_scripts_before_guest_shutdown)
        if run_tools_scripts_before_guest_standby is not None:
            pulumi.set(__self__, "run_tools_scripts_before_guest_standby", run_tools_scripts_before_guest_standby)
        if sata_controller_count is not None:
            pulumi.set(__self__, "sata_controller_count", sata_controller_count)
        if scsi_bus_sharing is not None:
            pulumi.set(__self__, "scsi_bus_sharing", scsi_bus_sharing)
        if scsi_controller_count is not None:
            pulumi.set(__self__, "scsi_controller_count", scsi_controller_count)
        if scsi_type is not None:
            pulumi.set(__self__, "scsi_type", scsi_type)
        if shutdown_wait_timeout is not None:
            pulumi.set(__self__, "shutdown_wait_timeout", shutdown_wait_timeout)
        if storage_policy_id is not None:
            pulumi.set(__self__, "storage_policy_id", storage_policy_id)
        if swap_placement_policy is not None:
            pulumi.set(__self__, "swap_placement_policy", swap_placement_policy)
        if sync_time_with_host is not None:
            pulumi.set(__self__, "sync_time_with_host", sync_time_with_host)
        if sync_time_with_host_periodically is not None:
            pulumi.set(__self__, "sync_time_with_host_periodically", sync_time_with_host_periodically)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if tools_upgrade_policy is not None:
            pulumi.set(__self__, "tools_upgrade_policy", tools_upgrade_policy)
        if vapp is not None:
            pulumi.set(__self__, "vapp", vapp)
        if vbs_enabled is not None:
            pulumi.set(__self__, "vbs_enabled", vbs_enabled)
        if vvtd_enabled is not None:
            pulumi.set(__self__, "vvtd_enabled", vvtd_enabled)
        if wait_for_guest_ip_timeout is not None:
            pulumi.set(__self__, "wait_for_guest_ip_timeout", wait_for_guest_ip_timeout)
        if wait_for_guest_net_routable is not None:
            pulumi.set(__self__, "wait_for_guest_net_routable", wait_for_guest_net_routable)
        if wait_for_guest_net_timeout is not None:
            pulumi.set(__self__, "wait_for_guest_net_timeout", wait_for_guest_net_timeout)

    @property
    @pulumi.getter(name="resourcePoolId")
    def resource_pool_id(self) -> pulumi.Input[str]:
        """
        The managed object reference ID of the resource pool in which to place the virtual machine. See the Virtual Machine Migration section for more information on modifying this value.

        > **NOTE:** All clusters and standalone hosts have a default root resource pool. This resource argument does not directly accept the cluster or standalone host resource. For more information, see the section on specifying the Root Resource Pool in the `ResourcePool` data source documentation on using the root resource pool.
        """
        return pulumi.get(self, "resource_pool_id")

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

    @property
    @pulumi.getter(name="alternateGuestName")
    def alternate_guest_name(self) -> Optional[pulumi.Input[str]]:
        """
        The guest name for the operating system when `guest_id` is `otherGuest` or `otherGuest64`.
        """
        return pulumi.get(self, "alternate_guest_name")

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

    @property
    @pulumi.getter
    def annotation(self) -> Optional[pulumi.Input[str]]:
        """
        A user-provided description of the virtual machine.
        """
        return pulumi.get(self, "annotation")

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

    @property
    @pulumi.getter(name="bootDelay")
    def boot_delay(self) -> Optional[pulumi.Input[int]]:
        """
        The number of milliseconds to wait before starting the boot sequence. The default is no delay.
        """
        return pulumi.get(self, "boot_delay")

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

    @property
    @pulumi.getter(name="bootRetryDelay")
    def boot_retry_delay(self) -> Optional[pulumi.Input[int]]:
        """
        The number of milliseconds to wait before retrying the boot sequence. This option is only valid if `boot_retry_enabled` is `true`. Default: `10000` (10 seconds).
        """
        return pulumi.get(self, "boot_retry_delay")

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

    @property
    @pulumi.getter(name="bootRetryEnabled")
    def boot_retry_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        If set to `true`, a virtual machine that fails to boot will try again after the delay defined in `boot_retry_delay`. Default: `false`.
        """
        return pulumi.get(self, "boot_retry_enabled")

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

    @property
    @pulumi.getter
    def cdroms(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineCdromArgs']]]]:
        """
        A specification for a CD-ROM device on the virtual machine. See CD-ROM options for more information.
        """
        return pulumi.get(self, "cdroms")

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

    @property
    @pulumi.getter
    def clone(self) -> Optional[pulumi.Input['VirtualMachineCloneArgs']]:
        """
        When specified, the virtual machine will be created as a clone of a specified template. Optional customization options can be submitted for the resource. See creating a virtual machine from a template for more information.
        """
        return pulumi.get(self, "clone")

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

    @property
    @pulumi.getter(name="cpuHotAddEnabled")
    def cpu_hot_add_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Allow CPUs to be added to the virtual machine while it is powered on.
        """
        return pulumi.get(self, "cpu_hot_add_enabled")

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

    @property
    @pulumi.getter(name="cpuHotRemoveEnabled")
    def cpu_hot_remove_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Allow CPUs to be removed to the virtual machine while it is powered on.
        """
        return pulumi.get(self, "cpu_hot_remove_enabled")

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

    @property
    @pulumi.getter(name="cpuLimit")
    def cpu_limit(self) -> Optional[pulumi.Input[int]]:
        """
        The maximum amount of CPU (in MHz) that the virtual machine can consume, regardless of available resources. The default is no limit.
        """
        return pulumi.get(self, "cpu_limit")

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

    @property
    @pulumi.getter(name="cpuPerformanceCountersEnabled")
    def cpu_performance_counters_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable CPU performance counters on the virtual machine. Default: `false`.
        """
        return pulumi.get(self, "cpu_performance_counters_enabled")

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

    @property
    @pulumi.getter(name="cpuReservation")
    def cpu_reservation(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of CPU (in MHz) that the virtual machine is guaranteed. The default is no reservation.
        """
        return pulumi.get(self, "cpu_reservation")

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

    @property
    @pulumi.getter(name="cpuShareCount")
    def cpu_share_count(self) -> Optional[pulumi.Input[int]]:
        """
        The number of CPU shares allocated to the virtual machine when the `cpu_share_level` is `custom`.
        """
        return pulumi.get(self, "cpu_share_count")

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

    @property
    @pulumi.getter(name="cpuShareLevel")
    def cpu_share_level(self) -> Optional[pulumi.Input[str]]:
        """
        The allocation level for the virtual machine CPU resources. One of `high`, `low`, `normal`, or `custom`. Default: `custom`.
        """
        return pulumi.get(self, "cpu_share_level")

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

    @property
    @pulumi.getter(name="customAttributes")
    def custom_attributes(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        Map of custom attribute ids to attribute value strings to set for virtual machine. Please refer to the `vsphere_custom_attributes` resource for more information on setting custom attributes.

        > **NOTE:** Custom attributes requires vCenter Server and is not supported on direct ESXi host connections.
        """
        return pulumi.get(self, "custom_attributes")

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

    @property
    @pulumi.getter(name="datacenterId")
    def datacenter_id(self) -> Optional[pulumi.Input[str]]:
        """
        The datacenter ID. Required only when deploying an OVF/OVA template.
        """
        return pulumi.get(self, "datacenter_id")

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

    @property
    @pulumi.getter(name="datastoreClusterId")
    def datastore_cluster_id(self) -> Optional[pulumi.Input[str]]:
        """
        The managed object reference ID of the datastore cluster in which to place the virtual machine. This setting applies to entire virtual machine and implies that you wish to use vSphere Storage DRS with the virtual machine. See the section on virtual machine migration for more information on modifying this value.

        > **NOTE:** One of `datastore_id` or `datastore_cluster_id` must be specified.

        > **NOTE:** Use of `datastore_cluster_id` requires vSphere Storage DRS to be enabled on the specified datastore cluster.

        > **NOTE:** The `datastore_cluster_id` setting applies to the entire virtual machine resource. You cannot assign individual individual disks to datastore clusters. In addition, you cannot use the `attach` setting to attach external disks on virtual machines that are assigned to datastore clusters.
        """
        return pulumi.get(self, "datastore_cluster_id")

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

    @property
    @pulumi.getter(name="datastoreId")
    def datastore_id(self) -> Optional[pulumi.Input[str]]:
        """
        The managed object reference ID of the datastore in which to place the virtual machine. The virtual machine configuration files is placed here, along with any virtual disks that are created where a datastore is not explicitly specified. See the section on virtual machine migration for more information on modifying this value.

        > **NOTE:** Datastores cannot be assigned to individual disks when `datastore_cluster_id` is used.
        """
        return pulumi.get(self, "datastore_id")

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

    @property
    @pulumi.getter
    def disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineDiskArgs']]]]:
        """
        A specification for a virtual disk device on the virtual machine. See disk options for more information.
        """
        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="efiSecureBootEnabled")
    def efi_secure_boot_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Use this option to enable EFI secure boot when the `firmware` type is set to is `efi`. Default: `false`.

        > **NOTE:** EFI secure boot is only available on vSphere 6.5 and later.
        """
        return pulumi.get(self, "efi_secure_boot_enabled")

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

    @property
    @pulumi.getter(name="enableDiskUuid")
    def enable_disk_uuid(self) -> Optional[pulumi.Input[bool]]:
        """
        Expose the UUIDs of attached virtual disks to the virtual machine, allowing access to them in the guest. Default: `false`.
        """
        return pulumi.get(self, "enable_disk_uuid")

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

    @property
    @pulumi.getter(name="enableLogging")
    def enable_logging(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable logging of virtual machine events to a log file stored in the virtual machine directory. Default: `false`.
        """
        return pulumi.get(self, "enable_logging")

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

    @property
    @pulumi.getter(name="eptRviMode")
    def ept_rvi_mode(self) -> Optional[pulumi.Input[str]]:
        """
        The EPT/RVI (hardware memory virtualization) setting for the virtual machine. One of `automatic`, `on`, or `off`. Default: `automatic`.
        """
        return pulumi.get(self, "ept_rvi_mode")

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

    @property
    @pulumi.getter(name="extraConfig")
    def extra_config(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        Extra configuration data for the virtual machine. Can be used to supply advanced parameters not normally in configuration, such as instance metadata and userdata.

        > **NOTE:** Do not use `extra_config` when working with a template imported from OVF/OVA as your settings may be ignored. Use the `vapp` block `properties` section as described in Using vApp Properties for OVF/OVA Configuration.
        """
        return pulumi.get(self, "extra_config")

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

    @property
    @pulumi.getter(name="extraConfigRebootRequired")
    def extra_config_reboot_required(self) -> Optional[pulumi.Input[bool]]:
        """
        Allow the virtual machine to be rebooted when a change to `extra_config` occurs. Default: `true`.
        """
        return pulumi.get(self, "extra_config_reboot_required")

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

    @property
    @pulumi.getter
    def firmware(self) -> Optional[pulumi.Input[str]]:
        """
        The firmware for the virtual machine. One of `bios` or `efi`.
        """
        return pulumi.get(self, "firmware")

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

    @property
    @pulumi.getter
    def folder(self) -> Optional[pulumi.Input[str]]:
        """
        The path to the virtual machine folder in which to place the virtual machine, relative to the datacenter path (`/<datacenter-name>/vm`).  For example, `/dc-01/vm/foo`
        """
        return pulumi.get(self, "folder")

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

    @property
    @pulumi.getter(name="forcePowerOff")
    def force_power_off(self) -> Optional[pulumi.Input[bool]]:
        """
        If a guest shutdown failed or times out while updating or destroying (see `shutdown_wait_timeout`), force the power-off of the virtual machine. Default: `true`.
        """
        return pulumi.get(self, "force_power_off")

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

    @property
    @pulumi.getter(name="guestId")
    def guest_id(self) -> Optional[pulumi.Input[str]]:
        """
        The guest ID for the operating system type. For a full list of possible values, see [here][vmware-docs-guest-ids]. Default: `otherGuest64`.

        [vmware-docs-guest-ids]: https://vdc-download.vmware.com/vmwb-repository/dcr-public/b50dcbbf-051d-4204-a3e7-e1b618c1e384/538cf2ec-b34f-4bae-a332-3820ef9e7773/vim.vm.GuestOsDescriptor.GuestOsIdentifier.html
        """
        return pulumi.get(self, "guest_id")

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

    @property
    @pulumi.getter(name="hardwareVersion")
    def hardware_version(self) -> Optional[pulumi.Input[int]]:
        """
        The hardware version number. Valid range is from 4 to 19. The hardware version cannot be downgraded. See [virtual machine hardware compatibility][virtual-machine-hardware-compatibility] for more information.

        [virtual-machine-hardware-compatibility]: https://kb.vmware.com/s/article/2007240
        """
        return pulumi.get(self, "hardware_version")

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

    @property
    @pulumi.getter(name="hostSystemId")
    def host_system_id(self) -> Optional[pulumi.Input[str]]:
        """
        The managed object reference ID of a host on which to place the virtual machine. See the section on virtual machine migration for more information on modifying this value. When using a vSphere cluster, if a `host_system_id` is not supplied, vSphere will select a host in the cluster to place the virtual machine, according to any defaults or vSphere DRS placement policies.
        """
        return pulumi.get(self, "host_system_id")

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

    @property
    @pulumi.getter(name="hvMode")
    def hv_mode(self) -> Optional[pulumi.Input[str]]:
        """
        The hardware virtualization (non-nested) setting for the virtual machine. One of `hvAuto`, `hvOn`, or `hvOff`. Default: `hvAuto`.
        """
        return pulumi.get(self, "hv_mode")

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

    @property
    @pulumi.getter(name="ideControllerCount")
    def ide_controller_count(self) -> Optional[pulumi.Input[int]]:
        """
        The number of IDE controllers that the virtual machine. This directly affects the number of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers. Default: `2`.
        """
        return pulumi.get(self, "ide_controller_count")

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

    @property
    @pulumi.getter(name="ignoredGuestIps")
    def ignored_guest_ips(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of IP addresses and CIDR networks to ignore while waiting for an available IP address using either of the waiters. Any IP addresses in this list will be ignored so that the waiter will continue to wait for a valid IP address. Default: `[]`.
        """
        return pulumi.get(self, "ignored_guest_ips")

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

    @property
    @pulumi.getter(name="latencySensitivity")
    def latency_sensitivity(self) -> Optional[pulumi.Input[str]]:
        """
        Controls the scheduling delay of the virtual machine. Use a higher sensitivity for applications that require lower latency, such as VOIP, media player applications, or applications that require frequent access to mouse or keyboard devices. One of `low`, `normal`, `medium`, or `high`.

        > **NOTE:** On higher sensitivities, you may need to adjust the `memory_reservation` to the full amount of memory provisioned for the virtual machine.
        """
        return pulumi.get(self, "latency_sensitivity")

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

    @property
    @pulumi.getter
    def memory(self) -> Optional[pulumi.Input[int]]:
        """
        The memory size to assign to the virtual machine, in MB. Default: `1024` (1 GB).
        """
        return pulumi.get(self, "memory")

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

    @property
    @pulumi.getter(name="memoryHotAddEnabled")
    def memory_hot_add_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Allow memory to be added to the virtual machine while it is powered on.

        > **NOTE:** CPU and memory hot add options are not available on all guest operating systems. Please refer to the [VMware Guest OS Compatibility Guide][vmware-docs-compat-guide] to which settings are allow for your guest operating system. In addition, at least one `pulumi up` must be run before you are able to use CPU and memory hot add.

        [vmware-docs-compat-guide]: http://partnerweb.vmware.com/comp_guide2/pdf/VMware_GOS_Compatibility_Guide.pdf

        > **NOTE:** For Linux 64-bit guest operating systems with less than or equal to 3GB, the virtual machine must powered off to add memory beyond 3GB. Subsequent hot add of memory does not require the virtual machine to be powered-off to apply the plan. Please refer to [VMware KB 2008405][vmware-kb-2008405].

        [vmware-kb-2008405]: https://kb.vmware.com/s/article/2008405
        """
        return pulumi.get(self, "memory_hot_add_enabled")

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

    @property
    @pulumi.getter(name="memoryLimit")
    def memory_limit(self) -> Optional[pulumi.Input[int]]:
        """
        The maximum amount of memory (in MB) that th virtual machine can consume, regardless of available resources. The default is no limit.
        """
        return pulumi.get(self, "memory_limit")

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

    @property
    @pulumi.getter(name="memoryReservation")
    def memory_reservation(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of memory (in MB) that the virtual machine is guaranteed. The default is no reservation.
        """
        return pulumi.get(self, "memory_reservation")

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

    @property
    @pulumi.getter(name="memoryShareCount")
    def memory_share_count(self) -> Optional[pulumi.Input[int]]:
        """
        The number of memory shares allocated to the virtual machine when the `memory_share_level` is `custom`.
        """
        return pulumi.get(self, "memory_share_count")

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

    @property
    @pulumi.getter(name="memoryShareLevel")
    def memory_share_level(self) -> Optional[pulumi.Input[str]]:
        """
        The allocation level for the virtual machine memory resources. One of `high`, `low`, `normal`, or `custom`. Default: `custom`.
        """
        return pulumi.get(self, "memory_share_level")

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

    @property
    @pulumi.getter(name="migrateWaitTimeout")
    def migrate_wait_timeout(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of time, in minutes, to wait for a virtual machine migration to complete before failing. Default: `10` minutes. See the section on virtual machine migration for more information.
        """
        return pulumi.get(self, "migrate_wait_timeout")

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

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

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

    @property
    @pulumi.getter(name="nestedHvEnabled")
    def nested_hv_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable nested hardware virtualization on the virtual machine, facilitating nested virtualization in the guest operating system. Default: `false`.
        """
        return pulumi.get(self, "nested_hv_enabled")

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

    @property
    @pulumi.getter(name="networkInterfaces")
    def network_interfaces(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineNetworkInterfaceArgs']]]]:
        """
        A specification for a virtual NIC on the virtual machine. See network interface options for more information.
        """
        return pulumi.get(self, "network_interfaces")

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

    @property
    @pulumi.getter(name="numCoresPerSocket")
    def num_cores_per_socket(self) -> Optional[pulumi.Input[int]]:
        """
        The number of cores per socket in the virtual machine. The number of vCPUs on the virtual machine will be `num_cpus` divided by `num_cores_per_socket`. If specified, the value supplied to `num_cpus` must be evenly divisible by this value. Default: `1`.
        """
        return pulumi.get(self, "num_cores_per_socket")

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

    @property
    @pulumi.getter(name="numCpus")
    def num_cpus(self) -> Optional[pulumi.Input[int]]:
        """
        The total number of virtual processor cores to assign to the virtual machine. Default: `1`.
        """
        return pulumi.get(self, "num_cpus")

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

    @property
    @pulumi.getter(name="ovfDeploy")
    def ovf_deploy(self) -> Optional[pulumi.Input['VirtualMachineOvfDeployArgs']]:
        """
        When specified, the virtual machine will be deployed from the provided OVF/OVA template. See creating a virtual machine from an OVF/OVA template for more information.
        """
        return pulumi.get(self, "ovf_deploy")

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

    @property
    @pulumi.getter(name="pciDeviceIds")
    def pci_device_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of host PCI device IDs in which to create PCI passthroughs.

        > **NOTE:** Cloning requires vCenter Server and is not supported on direct ESXi host connections.
        """
        return pulumi.get(self, "pci_device_ids")

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

    @property
    @pulumi.getter(name="poweronTimeout")
    def poweron_timeout(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of time, in seconds, that we will be trying to power on a VM
        """
        return pulumi.get(self, "poweron_timeout")

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

    @property
    @pulumi.getter(name="replaceTrigger")
    def replace_trigger(self) -> Optional[pulumi.Input[str]]:
        """
        Triggers replacement of resource whenever it changes.

        For example, `replace_trigger = sha256(format("%s-%s",data.template_file.cloud_init_metadata.rendered,data.template_file.cloud_init_userdata.rendered))` will fingerprint the changes in cloud-init metadata and userdata templates. This will enable a replacement of the resource whenever the dependant template renders a new configuration. (Forces a replacement.)
        """
        return pulumi.get(self, "replace_trigger")

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

    @property
    @pulumi.getter(name="runToolsScriptsAfterPowerOn")
    def run_tools_scripts_after_power_on(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable post-power-on scripts to run when VMware Tools is installed. Default: `true`.
        """
        return pulumi.get(self, "run_tools_scripts_after_power_on")

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

    @property
    @pulumi.getter(name="runToolsScriptsAfterResume")
    def run_tools_scripts_after_resume(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable ost-resume scripts to run when VMware Tools is installed. Default: `true`.
        """
        return pulumi.get(self, "run_tools_scripts_after_resume")

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

    @property
    @pulumi.getter(name="runToolsScriptsBeforeGuestReboot")
    def run_tools_scripts_before_guest_reboot(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable pre-reboot scripts to run when VMware Tools is installed. Default: `false`.
        """
        return pulumi.get(self, "run_tools_scripts_before_guest_reboot")

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

    @property
    @pulumi.getter(name="runToolsScriptsBeforeGuestShutdown")
    def run_tools_scripts_before_guest_shutdown(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable pre-shutdown scripts to run when VMware Tools is installed. Default: `true`.
        """
        return pulumi.get(self, "run_tools_scripts_before_guest_shutdown")

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

    @property
    @pulumi.getter(name="runToolsScriptsBeforeGuestStandby")
    def run_tools_scripts_before_guest_standby(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable pre-standby scripts to run when VMware Tools is installed. Default: `true`.
        """
        return pulumi.get(self, "run_tools_scripts_before_guest_standby")

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

    @property
    @pulumi.getter(name="sataControllerCount")
    def sata_controller_count(self) -> Optional[pulumi.Input[int]]:
        """
        The number of SATA controllers that Terraform manages on this virtual machine. This directly affects the amount of disks
        you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove
        controllers.
        """
        return pulumi.get(self, "sata_controller_count")

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

    @property
    @pulumi.getter(name="scsiBusSharing")
    def scsi_bus_sharing(self) -> Optional[pulumi.Input[str]]:
        """
        The type of SCSI bus sharing for the virtual machine SCSI controller. One of `physicalSharing`, `virtualSharing`, and `noSharing`. Default: `noSharing`.
        """
        return pulumi.get(self, "scsi_bus_sharing")

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

    @property
    @pulumi.getter(name="scsiControllerCount")
    def scsi_controller_count(self) -> Optional[pulumi.Input[int]]:
        """
        The number of SCSI controllers that Terraform manages on this virtual machine. This directly affects the amount of disks
        you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove
        controllers.
        """
        return pulumi.get(self, "scsi_controller_count")

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

    @property
    @pulumi.getter(name="scsiType")
    def scsi_type(self) -> Optional[pulumi.Input[str]]:
        """
        The SCSI controller type for the virtual machine. One of `lsilogic` (LSI Logic Parallel), `lsilogic-sas` (LSI Logic SAS) or `pvscsi` (VMware Paravirtual). Default: `pvscsi`.
        """
        return pulumi.get(self, "scsi_type")

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

    @property
    @pulumi.getter(name="shutdownWaitTimeout")
    def shutdown_wait_timeout(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of time, in minutes, to wait for a graceful guest shutdown when making necessary updates to the virtual machine. If `force_power_off` is set to `true`, the virtual machine will be forced to power-off after the timeout, otherwise an error is returned. Default: `3` minutes.
        """
        return pulumi.get(self, "shutdown_wait_timeout")

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

    @property
    @pulumi.getter(name="storagePolicyId")
    def storage_policy_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the storage policy to assign to the home directory of a virtual machine.
        """
        return pulumi.get(self, "storage_policy_id")

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

    @property
    @pulumi.getter(name="swapPlacementPolicy")
    def swap_placement_policy(self) -> Optional[pulumi.Input[str]]:
        """
        The swap file placement policy for the virtual machine. One of `inherit`, `hostLocal`, or `vmDirectory`. Default: `inherit`.
        """
        return pulumi.get(self, "swap_placement_policy")

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

    @property
    @pulumi.getter(name="syncTimeWithHost")
    def sync_time_with_host(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable the guest operating system to synchronization its clock with the host when the virtual machine is powered on or resumed. Requires vSphere 7.0 Update 1 and later. Requires VMware Tools to be installed. Default: `false`.
        """
        return pulumi.get(self, "sync_time_with_host")

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

    @property
    @pulumi.getter(name="syncTimeWithHostPeriodically")
    def sync_time_with_host_periodically(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable the guest operating system to periodically synchronize its clock with the host. Requires vSphere 7.0 Update 1 and later. On previous versions, setting `sync_time_with_host` is will enable periodic synchronization. Requires VMware Tools to be installed. Default: `false`.
        """
        return pulumi.get(self, "sync_time_with_host_periodically")

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

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The IDs of any tags to attach to this resource. Please refer to the `Tag` resource for more information on applying tags to virtual machine resources.

        > **NOTE:** Tagging support is unsupported on direct ESXi host connections and requires vCenter Server instance.
        """
        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(name="toolsUpgradePolicy")
    def tools_upgrade_policy(self) -> Optional[pulumi.Input[str]]:
        """
        Enable automatic upgrade of the VMware Tools version when the virtual machine is rebooted. If necessary, VMware Tools is upgraded to the latest version supported by the host on which the virtual machine is running. Requires VMware Tools to be installed. One of `manual` or `upgradeAtPowerCycle`. Default: `manual`.
        """
        return pulumi.get(self, "tools_upgrade_policy")

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

    @property
    @pulumi.getter
    def vapp(self) -> Optional[pulumi.Input['VirtualMachineVappArgs']]:
        """
        Used for vApp configurations. The only sub-key available is `properties`, which is a key/value map of properties for virtual machines imported from and OVF/OVA. See Using vApp Properties for OVF/OVA Configuration for more information.
        """
        return pulumi.get(self, "vapp")

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

    @property
    @pulumi.getter(name="vbsEnabled")
    def vbs_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable Virtualization Based Security. Requires `firmware` to be `efi`. In addition, `vvtd_enabled`, `nested_hv_enabled`, and `efi_secure_boot_enabled` must all have a value of `true`. Supported on vSphere 6.7 and later. Default: `false`.
        """
        return pulumi.get(self, "vbs_enabled")

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

    @property
    @pulumi.getter(name="vvtdEnabled")
    def vvtd_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable Intel Virtualization Technology for Directed I/O for the virtual machine (_I/O MMU_ in the vSphere Client). Supported on vSphere 6.7 and later. Default: `false`.
        """
        return pulumi.get(self, "vvtd_enabled")

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

    @property
    @pulumi.getter(name="waitForGuestIpTimeout")
    def wait_for_guest_ip_timeout(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of time, in minutes, to wait for an available guest IP address on the virtual machine. This should only be used if the version VMware Tools does not allow the `wait_for_guest_net_timeout` waiter to be used. A value less than `1` disables the waiter. Default: `0`.
        """
        return pulumi.get(self, "wait_for_guest_ip_timeout")

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

    @property
    @pulumi.getter(name="waitForGuestNetRoutable")
    def wait_for_guest_net_routable(self) -> Optional[pulumi.Input[bool]]:
        """
        Controls whether or not the guest network waiter waits for a routable address. When `false`, the waiter does not wait for a default gateway, nor are IP addresses checked against any discovered default gateways as part of its success criteria. This property is ignored if the `wait_for_guest_ip_timeout` waiter is used. Default: `true`.
        """
        return pulumi.get(self, "wait_for_guest_net_routable")

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

    @property
    @pulumi.getter(name="waitForGuestNetTimeout")
    def wait_for_guest_net_timeout(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of time, in minutes, to wait for an available guest IP address on the virtual machine. Older versions of VMware Tools do not populate this property. In those cases, this waiter can be disabled and the `wait_for_guest_ip_timeout` waiter can be used instead. A value less than `1` disables the waiter. Default: `5` minutes.
        """
        return pulumi.get(self, "wait_for_guest_net_timeout")

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


@pulumi.input_type
class _VirtualMachineState:
    def __init__(__self__, *,
                 alternate_guest_name: Optional[pulumi.Input[str]] = None,
                 annotation: Optional[pulumi.Input[str]] = None,
                 boot_delay: Optional[pulumi.Input[int]] = None,
                 boot_retry_delay: Optional[pulumi.Input[int]] = None,
                 boot_retry_enabled: Optional[pulumi.Input[bool]] = None,
                 cdroms: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineCdromArgs']]]] = None,
                 change_version: Optional[pulumi.Input[str]] = None,
                 clone: Optional[pulumi.Input['VirtualMachineCloneArgs']] = None,
                 cpu_hot_add_enabled: Optional[pulumi.Input[bool]] = None,
                 cpu_hot_remove_enabled: Optional[pulumi.Input[bool]] = None,
                 cpu_limit: Optional[pulumi.Input[int]] = None,
                 cpu_performance_counters_enabled: Optional[pulumi.Input[bool]] = None,
                 cpu_reservation: Optional[pulumi.Input[int]] = None,
                 cpu_share_count: Optional[pulumi.Input[int]] = None,
                 cpu_share_level: Optional[pulumi.Input[str]] = None,
                 custom_attributes: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 datacenter_id: Optional[pulumi.Input[str]] = None,
                 datastore_cluster_id: Optional[pulumi.Input[str]] = None,
                 datastore_id: Optional[pulumi.Input[str]] = None,
                 default_ip_address: Optional[pulumi.Input[str]] = None,
                 disks: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineDiskArgs']]]] = None,
                 efi_secure_boot_enabled: Optional[pulumi.Input[bool]] = None,
                 enable_disk_uuid: Optional[pulumi.Input[bool]] = None,
                 enable_logging: Optional[pulumi.Input[bool]] = None,
                 ept_rvi_mode: Optional[pulumi.Input[str]] = None,
                 extra_config: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 extra_config_reboot_required: Optional[pulumi.Input[bool]] = None,
                 firmware: Optional[pulumi.Input[str]] = None,
                 folder: Optional[pulumi.Input[str]] = None,
                 force_power_off: Optional[pulumi.Input[bool]] = None,
                 guest_id: Optional[pulumi.Input[str]] = None,
                 guest_ip_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 hardware_version: Optional[pulumi.Input[int]] = None,
                 host_system_id: Optional[pulumi.Input[str]] = None,
                 hv_mode: Optional[pulumi.Input[str]] = None,
                 ide_controller_count: Optional[pulumi.Input[int]] = None,
                 ignored_guest_ips: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 imported: Optional[pulumi.Input[bool]] = None,
                 latency_sensitivity: Optional[pulumi.Input[str]] = None,
                 memory: Optional[pulumi.Input[int]] = None,
                 memory_hot_add_enabled: Optional[pulumi.Input[bool]] = None,
                 memory_limit: Optional[pulumi.Input[int]] = None,
                 memory_reservation: Optional[pulumi.Input[int]] = None,
                 memory_share_count: Optional[pulumi.Input[int]] = None,
                 memory_share_level: Optional[pulumi.Input[str]] = None,
                 migrate_wait_timeout: Optional[pulumi.Input[int]] = None,
                 moid: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 nested_hv_enabled: Optional[pulumi.Input[bool]] = None,
                 network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineNetworkInterfaceArgs']]]] = None,
                 num_cores_per_socket: Optional[pulumi.Input[int]] = None,
                 num_cpus: Optional[pulumi.Input[int]] = None,
                 ovf_deploy: Optional[pulumi.Input['VirtualMachineOvfDeployArgs']] = None,
                 pci_device_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 power_state: Optional[pulumi.Input[str]] = None,
                 poweron_timeout: Optional[pulumi.Input[int]] = None,
                 reboot_required: Optional[pulumi.Input[bool]] = None,
                 replace_trigger: Optional[pulumi.Input[str]] = None,
                 resource_pool_id: Optional[pulumi.Input[str]] = None,
                 run_tools_scripts_after_power_on: Optional[pulumi.Input[bool]] = None,
                 run_tools_scripts_after_resume: Optional[pulumi.Input[bool]] = None,
                 run_tools_scripts_before_guest_reboot: Optional[pulumi.Input[bool]] = None,
                 run_tools_scripts_before_guest_shutdown: Optional[pulumi.Input[bool]] = None,
                 run_tools_scripts_before_guest_standby: Optional[pulumi.Input[bool]] = None,
                 sata_controller_count: Optional[pulumi.Input[int]] = None,
                 scsi_bus_sharing: Optional[pulumi.Input[str]] = None,
                 scsi_controller_count: Optional[pulumi.Input[int]] = None,
                 scsi_type: Optional[pulumi.Input[str]] = None,
                 shutdown_wait_timeout: Optional[pulumi.Input[int]] = None,
                 storage_policy_id: Optional[pulumi.Input[str]] = None,
                 swap_placement_policy: Optional[pulumi.Input[str]] = None,
                 sync_time_with_host: Optional[pulumi.Input[bool]] = None,
                 sync_time_with_host_periodically: Optional[pulumi.Input[bool]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 tools_upgrade_policy: Optional[pulumi.Input[str]] = None,
                 uuid: Optional[pulumi.Input[str]] = None,
                 vapp: Optional[pulumi.Input['VirtualMachineVappArgs']] = None,
                 vapp_transports: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 vbs_enabled: Optional[pulumi.Input[bool]] = None,
                 vmware_tools_status: Optional[pulumi.Input[str]] = None,
                 vmx_path: Optional[pulumi.Input[str]] = None,
                 vvtd_enabled: Optional[pulumi.Input[bool]] = None,
                 wait_for_guest_ip_timeout: Optional[pulumi.Input[int]] = None,
                 wait_for_guest_net_routable: Optional[pulumi.Input[bool]] = None,
                 wait_for_guest_net_timeout: Optional[pulumi.Input[int]] = None):
        """
        Input properties used for looking up and filtering VirtualMachine resources.
        :param pulumi.Input[str] alternate_guest_name: The guest name for the operating system when `guest_id` is `otherGuest` or `otherGuest64`.
        :param pulumi.Input[str] annotation: A user-provided description of the virtual machine.
        :param pulumi.Input[int] boot_delay: The number of milliseconds to wait before starting the boot sequence. The default is no delay.
        :param pulumi.Input[int] boot_retry_delay: The number of milliseconds to wait before retrying the boot sequence. This option is only valid if `boot_retry_enabled` is `true`. Default: `10000` (10 seconds).
        :param pulumi.Input[bool] boot_retry_enabled: If set to `true`, a virtual machine that fails to boot will try again after the delay defined in `boot_retry_delay`. Default: `false`.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineCdromArgs']]] cdroms: A specification for a CD-ROM device on the virtual machine. See CD-ROM options for more information.
        :param pulumi.Input[str] change_version: A unique identifier for a given version of the last configuration was applied.
        :param pulumi.Input['VirtualMachineCloneArgs'] clone: When specified, the virtual machine will be created as a clone of a specified template. Optional customization options can be submitted for the resource. See creating a virtual machine from a template for more information.
        :param pulumi.Input[bool] cpu_hot_add_enabled: Allow CPUs to be added to the virtual machine while it is powered on.
        :param pulumi.Input[bool] cpu_hot_remove_enabled: Allow CPUs to be removed to the virtual machine while it is powered on.
        :param pulumi.Input[int] cpu_limit: The maximum amount of CPU (in MHz) that the virtual machine can consume, regardless of available resources. The default is no limit.
        :param pulumi.Input[bool] cpu_performance_counters_enabled: Enable CPU performance counters on the virtual machine. Default: `false`.
        :param pulumi.Input[int] cpu_reservation: The amount of CPU (in MHz) that the virtual machine is guaranteed. The default is no reservation.
        :param pulumi.Input[int] cpu_share_count: The number of CPU shares allocated to the virtual machine when the `cpu_share_level` is `custom`.
        :param pulumi.Input[str] cpu_share_level: The allocation level for the virtual machine CPU resources. One of `high`, `low`, `normal`, or `custom`. Default: `custom`.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] custom_attributes: Map of custom attribute ids to attribute value strings to set for virtual machine. Please refer to the `vsphere_custom_attributes` resource for more information on setting custom attributes.
               
               > **NOTE:** Custom attributes requires vCenter Server and is not supported on direct ESXi host connections.
        :param pulumi.Input[str] datacenter_id: The datacenter ID. Required only when deploying an OVF/OVA template.
        :param pulumi.Input[str] datastore_cluster_id: The managed object reference ID of the datastore cluster in which to place the virtual machine. This setting applies to entire virtual machine and implies that you wish to use vSphere Storage DRS with the virtual machine. See the section on virtual machine migration for more information on modifying this value.
               
               > **NOTE:** One of `datastore_id` or `datastore_cluster_id` must be specified.
               
               > **NOTE:** Use of `datastore_cluster_id` requires vSphere Storage DRS to be enabled on the specified datastore cluster.
               
               > **NOTE:** The `datastore_cluster_id` setting applies to the entire virtual machine resource. You cannot assign individual individual disks to datastore clusters. In addition, you cannot use the `attach` setting to attach external disks on virtual machines that are assigned to datastore clusters.
        :param pulumi.Input[str] datastore_id: The managed object reference ID of the datastore in which to place the virtual machine. The virtual machine configuration files is placed here, along with any virtual disks that are created where a datastore is not explicitly specified. See the section on virtual machine migration for more information on modifying this value.
               
               > **NOTE:** Datastores cannot be assigned to individual disks when `datastore_cluster_id` is used.
        :param pulumi.Input[str] default_ip_address: The IP address selected by the provider to be used with any provisioners configured on this resource. When possible, this is the first IPv4 address that is reachable through the default gateway configured on the machine, then the first reachable IPv6 address, and then the first general discovered address if neither exists. If  VMware Tools is not running on the virtual machine, or if the virtual machine is powered off, this value will be blank.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineDiskArgs']]] disks: A specification for a virtual disk device on the virtual machine. See disk options for more information.
        :param pulumi.Input[bool] efi_secure_boot_enabled: Use this option to enable EFI secure boot when the `firmware` type is set to is `efi`. Default: `false`.
               
               > **NOTE:** EFI secure boot is only available on vSphere 6.5 and later.
        :param pulumi.Input[bool] enable_disk_uuid: Expose the UUIDs of attached virtual disks to the virtual machine, allowing access to them in the guest. Default: `false`.
        :param pulumi.Input[bool] enable_logging: Enable logging of virtual machine events to a log file stored in the virtual machine directory. Default: `false`.
        :param pulumi.Input[str] ept_rvi_mode: The EPT/RVI (hardware memory virtualization) setting for the virtual machine. One of `automatic`, `on`, or `off`. Default: `automatic`.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] extra_config: Extra configuration data for the virtual machine. Can be used to supply advanced parameters not normally in configuration, such as instance metadata and userdata.
               
               > **NOTE:** Do not use `extra_config` when working with a template imported from OVF/OVA as your settings may be ignored. Use the `vapp` block `properties` section as described in Using vApp Properties for OVF/OVA Configuration.
        :param pulumi.Input[bool] extra_config_reboot_required: Allow the virtual machine to be rebooted when a change to `extra_config` occurs. Default: `true`.
        :param pulumi.Input[str] firmware: The firmware for the virtual machine. One of `bios` or `efi`.
        :param pulumi.Input[str] folder: The path to the virtual machine folder in which to place the virtual machine, relative to the datacenter path (`/<datacenter-name>/vm`).  For example, `/dc-01/vm/foo`
        :param pulumi.Input[bool] force_power_off: If a guest shutdown failed or times out while updating or destroying (see `shutdown_wait_timeout`), force the power-off of the virtual machine. Default: `true`.
        :param pulumi.Input[str] guest_id: The guest ID for the operating system type. For a full list of possible values, see [here][vmware-docs-guest-ids]. Default: `otherGuest64`.
               
               [vmware-docs-guest-ids]: https://vdc-download.vmware.com/vmwb-repository/dcr-public/b50dcbbf-051d-4204-a3e7-e1b618c1e384/538cf2ec-b34f-4bae-a332-3820ef9e7773/vim.vm.GuestOsDescriptor.GuestOsIdentifier.html
        :param pulumi.Input[Sequence[pulumi.Input[str]]] guest_ip_addresses: The current list of IP addresses on this machine, including the value of `default_ip_address`. If VMware Tools is not running on the virtual machine, or if the virtul machine is powered off, this list will be empty.
        :param pulumi.Input[int] hardware_version: The hardware version number. Valid range is from 4 to 19. The hardware version cannot be downgraded. See [virtual machine hardware compatibility][virtual-machine-hardware-compatibility] for more information.
               
               [virtual-machine-hardware-compatibility]: https://kb.vmware.com/s/article/2007240
        :param pulumi.Input[str] host_system_id: The managed object reference ID of a host on which to place the virtual machine. See the section on virtual machine migration for more information on modifying this value. When using a vSphere cluster, if a `host_system_id` is not supplied, vSphere will select a host in the cluster to place the virtual machine, according to any defaults or vSphere DRS placement policies.
        :param pulumi.Input[str] hv_mode: The hardware virtualization (non-nested) setting for the virtual machine. One of `hvAuto`, `hvOn`, or `hvOff`. Default: `hvAuto`.
        :param pulumi.Input[int] ide_controller_count: The number of IDE controllers that the virtual machine. This directly affects the number of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers. Default: `2`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ignored_guest_ips: List of IP addresses and CIDR networks to ignore while waiting for an available IP address using either of the waiters. Any IP addresses in this list will be ignored so that the waiter will continue to wait for a valid IP address. Default: `[]`.
        :param pulumi.Input[bool] imported: Indicates if the virtual machine resource has been imported, or if the state has been migrated from a previous version of the resource. It influences the behavior of the first post-import apply operation. See the section on importing below.
        :param pulumi.Input[str] latency_sensitivity: Controls the scheduling delay of the virtual machine. Use a higher sensitivity for applications that require lower latency, such as VOIP, media player applications, or applications that require frequent access to mouse or keyboard devices. One of `low`, `normal`, `medium`, or `high`.
               
               > **NOTE:** On higher sensitivities, you may need to adjust the `memory_reservation` to the full amount of memory provisioned for the virtual machine.
        :param pulumi.Input[int] memory: The memory size to assign to the virtual machine, in MB. Default: `1024` (1 GB).
        :param pulumi.Input[bool] memory_hot_add_enabled: Allow memory to be added to the virtual machine while it is powered on.
               
               > **NOTE:** CPU and memory hot add options are not available on all guest operating systems. Please refer to the [VMware Guest OS Compatibility Guide][vmware-docs-compat-guide] to which settings are allow for your guest operating system. In addition, at least one `pulumi up` must be run before you are able to use CPU and memory hot add.
               
               [vmware-docs-compat-guide]: http://partnerweb.vmware.com/comp_guide2/pdf/VMware_GOS_Compatibility_Guide.pdf
               
               > **NOTE:** For Linux 64-bit guest operating systems with less than or equal to 3GB, the virtual machine must powered off to add memory beyond 3GB. Subsequent hot add of memory does not require the virtual machine to be powered-off to apply the plan. Please refer to [VMware KB 2008405][vmware-kb-2008405].
               
               [vmware-kb-2008405]: https://kb.vmware.com/s/article/2008405
        :param pulumi.Input[int] memory_limit: The maximum amount of memory (in MB) that th virtual machine can consume, regardless of available resources. The default is no limit.
        :param pulumi.Input[int] memory_reservation: The amount of memory (in MB) that the virtual machine is guaranteed. The default is no reservation.
        :param pulumi.Input[int] memory_share_count: The number of memory shares allocated to the virtual machine when the `memory_share_level` is `custom`.
        :param pulumi.Input[str] memory_share_level: The allocation level for the virtual machine memory resources. One of `high`, `low`, `normal`, or `custom`. Default: `custom`.
        :param pulumi.Input[int] migrate_wait_timeout: The amount of time, in minutes, to wait for a virtual machine migration to complete before failing. Default: `10` minutes. See the section on virtual machine migration for more information.
        :param pulumi.Input[str] moid: The managed object reference ID of the created virtual machine.
        :param pulumi.Input[str] name: The name of the virtual machine.
        :param pulumi.Input[bool] nested_hv_enabled: Enable nested hardware virtualization on the virtual machine, facilitating nested virtualization in the guest operating system. Default: `false`.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineNetworkInterfaceArgs']]] network_interfaces: A specification for a virtual NIC on the virtual machine. See network interface options for more information.
        :param pulumi.Input[int] num_cores_per_socket: The number of cores per socket in the virtual machine. The number of vCPUs on the virtual machine will be `num_cpus` divided by `num_cores_per_socket`. If specified, the value supplied to `num_cpus` must be evenly divisible by this value. Default: `1`.
        :param pulumi.Input[int] num_cpus: The total number of virtual processor cores to assign to the virtual machine. Default: `1`.
        :param pulumi.Input['VirtualMachineOvfDeployArgs'] ovf_deploy: When specified, the virtual machine will be deployed from the provided OVF/OVA template. See creating a virtual machine from an OVF/OVA template for more information.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] pci_device_ids: List of host PCI device IDs in which to create PCI passthroughs.
               
               > **NOTE:** Cloning requires vCenter Server and is not supported on direct ESXi host connections.
        :param pulumi.Input[str] power_state: A computed value for the current power state of the virtual machine. One of `on`, `off`, or `suspended`.
        :param pulumi.Input[int] poweron_timeout: The amount of time, in seconds, that we will be trying to power on a VM
        :param pulumi.Input[bool] reboot_required: Value internal to Terraform used to determine if a configuration set change requires a reboot.
        :param pulumi.Input[str] replace_trigger: Triggers replacement of resource whenever it changes.
               
               For example, `replace_trigger = sha256(format("%s-%s",data.template_file.cloud_init_metadata.rendered,data.template_file.cloud_init_userdata.rendered))` will fingerprint the changes in cloud-init metadata and userdata templates. This will enable a replacement of the resource whenever the dependant template renders a new configuration. (Forces a replacement.)
        :param pulumi.Input[str] resource_pool_id: The managed object reference ID of the resource pool in which to place the virtual machine. See the Virtual Machine Migration section for more information on modifying this value.
               
               > **NOTE:** All clusters and standalone hosts have a default root resource pool. This resource argument does not directly accept the cluster or standalone host resource. For more information, see the section on specifying the Root Resource Pool in the `ResourcePool` data source documentation on using the root resource pool.
        :param pulumi.Input[bool] run_tools_scripts_after_power_on: Enable post-power-on scripts to run when VMware Tools is installed. Default: `true`.
        :param pulumi.Input[bool] run_tools_scripts_after_resume: Enable ost-resume scripts to run when VMware Tools is installed. Default: `true`.
        :param pulumi.Input[bool] run_tools_scripts_before_guest_reboot: Enable pre-reboot scripts to run when VMware Tools is installed. Default: `false`.
        :param pulumi.Input[bool] run_tools_scripts_before_guest_shutdown: Enable pre-shutdown scripts to run when VMware Tools is installed. Default: `true`.
        :param pulumi.Input[bool] run_tools_scripts_before_guest_standby: Enable pre-standby scripts to run when VMware Tools is installed. Default: `true`.
        :param pulumi.Input[int] sata_controller_count: The number of SATA controllers that Terraform manages on this virtual machine. This directly affects the amount of disks
               you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove
               controllers.
        :param pulumi.Input[str] scsi_bus_sharing: The type of SCSI bus sharing for the virtual machine SCSI controller. One of `physicalSharing`, `virtualSharing`, and `noSharing`. Default: `noSharing`.
        :param pulumi.Input[int] scsi_controller_count: The number of SCSI controllers that Terraform manages on this virtual machine. This directly affects the amount of disks
               you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove
               controllers.
        :param pulumi.Input[str] scsi_type: The SCSI controller type for the virtual machine. One of `lsilogic` (LSI Logic Parallel), `lsilogic-sas` (LSI Logic SAS) or `pvscsi` (VMware Paravirtual). Default: `pvscsi`.
        :param pulumi.Input[int] shutdown_wait_timeout: The amount of time, in minutes, to wait for a graceful guest shutdown when making necessary updates to the virtual machine. If `force_power_off` is set to `true`, the virtual machine will be forced to power-off after the timeout, otherwise an error is returned. Default: `3` minutes.
        :param pulumi.Input[str] storage_policy_id: The ID of the storage policy to assign to the home directory of a virtual machine.
        :param pulumi.Input[str] swap_placement_policy: The swap file placement policy for the virtual machine. One of `inherit`, `hostLocal`, or `vmDirectory`. Default: `inherit`.
        :param pulumi.Input[bool] sync_time_with_host: Enable the guest operating system to synchronization its clock with the host when the virtual machine is powered on or resumed. Requires vSphere 7.0 Update 1 and later. Requires VMware Tools to be installed. Default: `false`.
        :param pulumi.Input[bool] sync_time_with_host_periodically: Enable the guest operating system to periodically synchronize its clock with the host. Requires vSphere 7.0 Update 1 and later. On previous versions, setting `sync_time_with_host` is will enable periodic synchronization. Requires VMware Tools to be installed. Default: `false`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: The IDs of any tags to attach to this resource. Please refer to the `Tag` resource for more information on applying tags to virtual machine resources.
               
               > **NOTE:** Tagging support is unsupported on direct ESXi host connections and requires vCenter Server instance.
        :param pulumi.Input[str] tools_upgrade_policy: Enable automatic upgrade of the VMware Tools version when the virtual machine is rebooted. If necessary, VMware Tools is upgraded to the latest version supported by the host on which the virtual machine is running. Requires VMware Tools to be installed. One of `manual` or `upgradeAtPowerCycle`. Default: `manual`.
        :param pulumi.Input[str] uuid: The UUID of the virtual disk VMDK file. This is used to track the virtual disk on the virtual machine.
        :param pulumi.Input['VirtualMachineVappArgs'] vapp: Used for vApp configurations. The only sub-key available is `properties`, which is a key/value map of properties for virtual machines imported from and OVF/OVA. See Using vApp Properties for OVF/OVA Configuration for more information.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] vapp_transports: Computed value which is only valid for cloned virtual machines. A list of vApp transport methods supported by the source virtual machine or template.
        :param pulumi.Input[bool] vbs_enabled: Enable Virtualization Based Security. Requires `firmware` to be `efi`. In addition, `vvtd_enabled`, `nested_hv_enabled`, and `efi_secure_boot_enabled` must all have a value of `true`. Supported on vSphere 6.7 and later. Default: `false`.
        :param pulumi.Input[str] vmware_tools_status: The state of  VMware Tools in the guest. This will determine the proper course of action for some device operations.
        :param pulumi.Input[str] vmx_path: The path of the virtual machine configuration file on the datastore in which the virtual machine is placed.
        :param pulumi.Input[bool] vvtd_enabled: Enable Intel Virtualization Technology for Directed I/O for the virtual machine (_I/O MMU_ in the vSphere Client). Supported on vSphere 6.7 and later. Default: `false`.
        :param pulumi.Input[int] wait_for_guest_ip_timeout: The amount of time, in minutes, to wait for an available guest IP address on the virtual machine. This should only be used if the version VMware Tools does not allow the `wait_for_guest_net_timeout` waiter to be used. A value less than `1` disables the waiter. Default: `0`.
        :param pulumi.Input[bool] wait_for_guest_net_routable: Controls whether or not the guest network waiter waits for a routable address. When `false`, the waiter does not wait for a default gateway, nor are IP addresses checked against any discovered default gateways as part of its success criteria. This property is ignored if the `wait_for_guest_ip_timeout` waiter is used. Default: `true`.
        :param pulumi.Input[int] wait_for_guest_net_timeout: The amount of time, in minutes, to wait for an available guest IP address on the virtual machine. Older versions of VMware Tools do not populate this property. In those cases, this waiter can be disabled and the `wait_for_guest_ip_timeout` waiter can be used instead. A value less than `1` disables the waiter. Default: `5` minutes.
        """
        if alternate_guest_name is not None:
            pulumi.set(__self__, "alternate_guest_name", alternate_guest_name)
        if annotation is not None:
            pulumi.set(__self__, "annotation", annotation)
        if boot_delay is not None:
            pulumi.set(__self__, "boot_delay", boot_delay)
        if boot_retry_delay is not None:
            pulumi.set(__self__, "boot_retry_delay", boot_retry_delay)
        if boot_retry_enabled is not None:
            pulumi.set(__self__, "boot_retry_enabled", boot_retry_enabled)
        if cdroms is not None:
            pulumi.set(__self__, "cdroms", cdroms)
        if change_version is not None:
            pulumi.set(__self__, "change_version", change_version)
        if clone is not None:
            pulumi.set(__self__, "clone", clone)
        if cpu_hot_add_enabled is not None:
            pulumi.set(__self__, "cpu_hot_add_enabled", cpu_hot_add_enabled)
        if cpu_hot_remove_enabled is not None:
            pulumi.set(__self__, "cpu_hot_remove_enabled", cpu_hot_remove_enabled)
        if cpu_limit is not None:
            pulumi.set(__self__, "cpu_limit", cpu_limit)
        if cpu_performance_counters_enabled is not None:
            pulumi.set(__self__, "cpu_performance_counters_enabled", cpu_performance_counters_enabled)
        if cpu_reservation is not None:
            pulumi.set(__self__, "cpu_reservation", cpu_reservation)
        if cpu_share_count is not None:
            pulumi.set(__self__, "cpu_share_count", cpu_share_count)
        if cpu_share_level is not None:
            pulumi.set(__self__, "cpu_share_level", cpu_share_level)
        if custom_attributes is not None:
            pulumi.set(__self__, "custom_attributes", custom_attributes)
        if datacenter_id is not None:
            pulumi.set(__self__, "datacenter_id", datacenter_id)
        if datastore_cluster_id is not None:
            pulumi.set(__self__, "datastore_cluster_id", datastore_cluster_id)
        if datastore_id is not None:
            pulumi.set(__self__, "datastore_id", datastore_id)
        if default_ip_address is not None:
            pulumi.set(__self__, "default_ip_address", default_ip_address)
        if disks is not None:
            pulumi.set(__self__, "disks", disks)
        if efi_secure_boot_enabled is not None:
            pulumi.set(__self__, "efi_secure_boot_enabled", efi_secure_boot_enabled)
        if enable_disk_uuid is not None:
            pulumi.set(__self__, "enable_disk_uuid", enable_disk_uuid)
        if enable_logging is not None:
            pulumi.set(__self__, "enable_logging", enable_logging)
        if ept_rvi_mode is not None:
            pulumi.set(__self__, "ept_rvi_mode", ept_rvi_mode)
        if extra_config is not None:
            pulumi.set(__self__, "extra_config", extra_config)
        if extra_config_reboot_required is not None:
            pulumi.set(__self__, "extra_config_reboot_required", extra_config_reboot_required)
        if firmware is not None:
            pulumi.set(__self__, "firmware", firmware)
        if folder is not None:
            pulumi.set(__self__, "folder", folder)
        if force_power_off is not None:
            pulumi.set(__self__, "force_power_off", force_power_off)
        if guest_id is not None:
            pulumi.set(__self__, "guest_id", guest_id)
        if guest_ip_addresses is not None:
            pulumi.set(__self__, "guest_ip_addresses", guest_ip_addresses)
        if hardware_version is not None:
            pulumi.set(__self__, "hardware_version", hardware_version)
        if host_system_id is not None:
            pulumi.set(__self__, "host_system_id", host_system_id)
        if hv_mode is not None:
            pulumi.set(__self__, "hv_mode", hv_mode)
        if ide_controller_count is not None:
            pulumi.set(__self__, "ide_controller_count", ide_controller_count)
        if ignored_guest_ips is not None:
            pulumi.set(__self__, "ignored_guest_ips", ignored_guest_ips)
        if imported is not None:
            pulumi.set(__self__, "imported", imported)
        if latency_sensitivity is not None:
            pulumi.set(__self__, "latency_sensitivity", latency_sensitivity)
        if memory is not None:
            pulumi.set(__self__, "memory", memory)
        if memory_hot_add_enabled is not None:
            pulumi.set(__self__, "memory_hot_add_enabled", memory_hot_add_enabled)
        if memory_limit is not None:
            pulumi.set(__self__, "memory_limit", memory_limit)
        if memory_reservation is not None:
            pulumi.set(__self__, "memory_reservation", memory_reservation)
        if memory_share_count is not None:
            pulumi.set(__self__, "memory_share_count", memory_share_count)
        if memory_share_level is not None:
            pulumi.set(__self__, "memory_share_level", memory_share_level)
        if migrate_wait_timeout is not None:
            pulumi.set(__self__, "migrate_wait_timeout", migrate_wait_timeout)
        if moid is not None:
            pulumi.set(__self__, "moid", moid)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if nested_hv_enabled is not None:
            pulumi.set(__self__, "nested_hv_enabled", nested_hv_enabled)
        if network_interfaces is not None:
            pulumi.set(__self__, "network_interfaces", network_interfaces)
        if num_cores_per_socket is not None:
            pulumi.set(__self__, "num_cores_per_socket", num_cores_per_socket)
        if num_cpus is not None:
            pulumi.set(__self__, "num_cpus", num_cpus)
        if ovf_deploy is not None:
            pulumi.set(__self__, "ovf_deploy", ovf_deploy)
        if pci_device_ids is not None:
            pulumi.set(__self__, "pci_device_ids", pci_device_ids)
        if power_state is not None:
            pulumi.set(__self__, "power_state", power_state)
        if poweron_timeout is not None:
            pulumi.set(__self__, "poweron_timeout", poweron_timeout)
        if reboot_required is not None:
            pulumi.set(__self__, "reboot_required", reboot_required)
        if replace_trigger is not None:
            pulumi.set(__self__, "replace_trigger", replace_trigger)
        if resource_pool_id is not None:
            pulumi.set(__self__, "resource_pool_id", resource_pool_id)
        if run_tools_scripts_after_power_on is not None:
            pulumi.set(__self__, "run_tools_scripts_after_power_on", run_tools_scripts_after_power_on)
        if run_tools_scripts_after_resume is not None:
            pulumi.set(__self__, "run_tools_scripts_after_resume", run_tools_scripts_after_resume)
        if run_tools_scripts_before_guest_reboot is not None:
            pulumi.set(__self__, "run_tools_scripts_before_guest_reboot", run_tools_scripts_before_guest_reboot)
        if run_tools_scripts_before_guest_shutdown is not None:
            pulumi.set(__self__, "run_tools_scripts_before_guest_shutdown", run_tools_scripts_before_guest_shutdown)
        if run_tools_scripts_before_guest_standby is not None:
            pulumi.set(__self__, "run_tools_scripts_before_guest_standby", run_tools_scripts_before_guest_standby)
        if sata_controller_count is not None:
            pulumi.set(__self__, "sata_controller_count", sata_controller_count)
        if scsi_bus_sharing is not None:
            pulumi.set(__self__, "scsi_bus_sharing", scsi_bus_sharing)
        if scsi_controller_count is not None:
            pulumi.set(__self__, "scsi_controller_count", scsi_controller_count)
        if scsi_type is not None:
            pulumi.set(__self__, "scsi_type", scsi_type)
        if shutdown_wait_timeout is not None:
            pulumi.set(__self__, "shutdown_wait_timeout", shutdown_wait_timeout)
        if storage_policy_id is not None:
            pulumi.set(__self__, "storage_policy_id", storage_policy_id)
        if swap_placement_policy is not None:
            pulumi.set(__self__, "swap_placement_policy", swap_placement_policy)
        if sync_time_with_host is not None:
            pulumi.set(__self__, "sync_time_with_host", sync_time_with_host)
        if sync_time_with_host_periodically is not None:
            pulumi.set(__self__, "sync_time_with_host_periodically", sync_time_with_host_periodically)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if tools_upgrade_policy is not None:
            pulumi.set(__self__, "tools_upgrade_policy", tools_upgrade_policy)
        if uuid is not None:
            pulumi.set(__self__, "uuid", uuid)
        if vapp is not None:
            pulumi.set(__self__, "vapp", vapp)
        if vapp_transports is not None:
            pulumi.set(__self__, "vapp_transports", vapp_transports)
        if vbs_enabled is not None:
            pulumi.set(__self__, "vbs_enabled", vbs_enabled)
        if vmware_tools_status is not None:
            pulumi.set(__self__, "vmware_tools_status", vmware_tools_status)
        if vmx_path is not None:
            pulumi.set(__self__, "vmx_path", vmx_path)
        if vvtd_enabled is not None:
            pulumi.set(__self__, "vvtd_enabled", vvtd_enabled)
        if wait_for_guest_ip_timeout is not None:
            pulumi.set(__self__, "wait_for_guest_ip_timeout", wait_for_guest_ip_timeout)
        if wait_for_guest_net_routable is not None:
            pulumi.set(__self__, "wait_for_guest_net_routable", wait_for_guest_net_routable)
        if wait_for_guest_net_timeout is not None:
            pulumi.set(__self__, "wait_for_guest_net_timeout", wait_for_guest_net_timeout)

    @property
    @pulumi.getter(name="alternateGuestName")
    def alternate_guest_name(self) -> Optional[pulumi.Input[str]]:
        """
        The guest name for the operating system when `guest_id` is `otherGuest` or `otherGuest64`.
        """
        return pulumi.get(self, "alternate_guest_name")

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

    @property
    @pulumi.getter
    def annotation(self) -> Optional[pulumi.Input[str]]:
        """
        A user-provided description of the virtual machine.
        """
        return pulumi.get(self, "annotation")

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

    @property
    @pulumi.getter(name="bootDelay")
    def boot_delay(self) -> Optional[pulumi.Input[int]]:
        """
        The number of milliseconds to wait before starting the boot sequence. The default is no delay.
        """
        return pulumi.get(self, "boot_delay")

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

    @property
    @pulumi.getter(name="bootRetryDelay")
    def boot_retry_delay(self) -> Optional[pulumi.Input[int]]:
        """
        The number of milliseconds to wait before retrying the boot sequence. This option is only valid if `boot_retry_enabled` is `true`. Default: `10000` (10 seconds).
        """
        return pulumi.get(self, "boot_retry_delay")

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

    @property
    @pulumi.getter(name="bootRetryEnabled")
    def boot_retry_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        If set to `true`, a virtual machine that fails to boot will try again after the delay defined in `boot_retry_delay`. Default: `false`.
        """
        return pulumi.get(self, "boot_retry_enabled")

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

    @property
    @pulumi.getter
    def cdroms(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineCdromArgs']]]]:
        """
        A specification for a CD-ROM device on the virtual machine. See CD-ROM options for more information.
        """
        return pulumi.get(self, "cdroms")

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

    @property
    @pulumi.getter(name="changeVersion")
    def change_version(self) -> Optional[pulumi.Input[str]]:
        """
        A unique identifier for a given version of the last configuration was applied.
        """
        return pulumi.get(self, "change_version")

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

    @property
    @pulumi.getter
    def clone(self) -> Optional[pulumi.Input['VirtualMachineCloneArgs']]:
        """
        When specified, the virtual machine will be created as a clone of a specified template. Optional customization options can be submitted for the resource. See creating a virtual machine from a template for more information.
        """
        return pulumi.get(self, "clone")

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

    @property
    @pulumi.getter(name="cpuHotAddEnabled")
    def cpu_hot_add_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Allow CPUs to be added to the virtual machine while it is powered on.
        """
        return pulumi.get(self, "cpu_hot_add_enabled")

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

    @property
    @pulumi.getter(name="cpuHotRemoveEnabled")
    def cpu_hot_remove_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Allow CPUs to be removed to the virtual machine while it is powered on.
        """
        return pulumi.get(self, "cpu_hot_remove_enabled")

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

    @property
    @pulumi.getter(name="cpuLimit")
    def cpu_limit(self) -> Optional[pulumi.Input[int]]:
        """
        The maximum amount of CPU (in MHz) that the virtual machine can consume, regardless of available resources. The default is no limit.
        """
        return pulumi.get(self, "cpu_limit")

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

    @property
    @pulumi.getter(name="cpuPerformanceCountersEnabled")
    def cpu_performance_counters_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable CPU performance counters on the virtual machine. Default: `false`.
        """
        return pulumi.get(self, "cpu_performance_counters_enabled")

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

    @property
    @pulumi.getter(name="cpuReservation")
    def cpu_reservation(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of CPU (in MHz) that the virtual machine is guaranteed. The default is no reservation.
        """
        return pulumi.get(self, "cpu_reservation")

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

    @property
    @pulumi.getter(name="cpuShareCount")
    def cpu_share_count(self) -> Optional[pulumi.Input[int]]:
        """
        The number of CPU shares allocated to the virtual machine when the `cpu_share_level` is `custom`.
        """
        return pulumi.get(self, "cpu_share_count")

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

    @property
    @pulumi.getter(name="cpuShareLevel")
    def cpu_share_level(self) -> Optional[pulumi.Input[str]]:
        """
        The allocation level for the virtual machine CPU resources. One of `high`, `low`, `normal`, or `custom`. Default: `custom`.
        """
        return pulumi.get(self, "cpu_share_level")

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

    @property
    @pulumi.getter(name="customAttributes")
    def custom_attributes(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        Map of custom attribute ids to attribute value strings to set for virtual machine. Please refer to the `vsphere_custom_attributes` resource for more information on setting custom attributes.

        > **NOTE:** Custom attributes requires vCenter Server and is not supported on direct ESXi host connections.
        """
        return pulumi.get(self, "custom_attributes")

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

    @property
    @pulumi.getter(name="datacenterId")
    def datacenter_id(self) -> Optional[pulumi.Input[str]]:
        """
        The datacenter ID. Required only when deploying an OVF/OVA template.
        """
        return pulumi.get(self, "datacenter_id")

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

    @property
    @pulumi.getter(name="datastoreClusterId")
    def datastore_cluster_id(self) -> Optional[pulumi.Input[str]]:
        """
        The managed object reference ID of the datastore cluster in which to place the virtual machine. This setting applies to entire virtual machine and implies that you wish to use vSphere Storage DRS with the virtual machine. See the section on virtual machine migration for more information on modifying this value.

        > **NOTE:** One of `datastore_id` or `datastore_cluster_id` must be specified.

        > **NOTE:** Use of `datastore_cluster_id` requires vSphere Storage DRS to be enabled on the specified datastore cluster.

        > **NOTE:** The `datastore_cluster_id` setting applies to the entire virtual machine resource. You cannot assign individual individual disks to datastore clusters. In addition, you cannot use the `attach` setting to attach external disks on virtual machines that are assigned to datastore clusters.
        """
        return pulumi.get(self, "datastore_cluster_id")

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

    @property
    @pulumi.getter(name="datastoreId")
    def datastore_id(self) -> Optional[pulumi.Input[str]]:
        """
        The managed object reference ID of the datastore in which to place the virtual machine. The virtual machine configuration files is placed here, along with any virtual disks that are created where a datastore is not explicitly specified. See the section on virtual machine migration for more information on modifying this value.

        > **NOTE:** Datastores cannot be assigned to individual disks when `datastore_cluster_id` is used.
        """
        return pulumi.get(self, "datastore_id")

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

    @property
    @pulumi.getter(name="defaultIpAddress")
    def default_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The IP address selected by the provider to be used with any provisioners configured on this resource. When possible, this is the first IPv4 address that is reachable through the default gateway configured on the machine, then the first reachable IPv6 address, and then the first general discovered address if neither exists. If  VMware Tools is not running on the virtual machine, or if the virtual machine is powered off, this value will be blank.
        """
        return pulumi.get(self, "default_ip_address")

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

    @property
    @pulumi.getter
    def disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineDiskArgs']]]]:
        """
        A specification for a virtual disk device on the virtual machine. See disk options for more information.
        """
        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="efiSecureBootEnabled")
    def efi_secure_boot_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Use this option to enable EFI secure boot when the `firmware` type is set to is `efi`. Default: `false`.

        > **NOTE:** EFI secure boot is only available on vSphere 6.5 and later.
        """
        return pulumi.get(self, "efi_secure_boot_enabled")

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

    @property
    @pulumi.getter(name="enableDiskUuid")
    def enable_disk_uuid(self) -> Optional[pulumi.Input[bool]]:
        """
        Expose the UUIDs of attached virtual disks to the virtual machine, allowing access to them in the guest. Default: `false`.
        """
        return pulumi.get(self, "enable_disk_uuid")

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

    @property
    @pulumi.getter(name="enableLogging")
    def enable_logging(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable logging of virtual machine events to a log file stored in the virtual machine directory. Default: `false`.
        """
        return pulumi.get(self, "enable_logging")

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

    @property
    @pulumi.getter(name="eptRviMode")
    def ept_rvi_mode(self) -> Optional[pulumi.Input[str]]:
        """
        The EPT/RVI (hardware memory virtualization) setting for the virtual machine. One of `automatic`, `on`, or `off`. Default: `automatic`.
        """
        return pulumi.get(self, "ept_rvi_mode")

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

    @property
    @pulumi.getter(name="extraConfig")
    def extra_config(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        Extra configuration data for the virtual machine. Can be used to supply advanced parameters not normally in configuration, such as instance metadata and userdata.

        > **NOTE:** Do not use `extra_config` when working with a template imported from OVF/OVA as your settings may be ignored. Use the `vapp` block `properties` section as described in Using vApp Properties for OVF/OVA Configuration.
        """
        return pulumi.get(self, "extra_config")

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

    @property
    @pulumi.getter(name="extraConfigRebootRequired")
    def extra_config_reboot_required(self) -> Optional[pulumi.Input[bool]]:
        """
        Allow the virtual machine to be rebooted when a change to `extra_config` occurs. Default: `true`.
        """
        return pulumi.get(self, "extra_config_reboot_required")

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

    @property
    @pulumi.getter
    def firmware(self) -> Optional[pulumi.Input[str]]:
        """
        The firmware for the virtual machine. One of `bios` or `efi`.
        """
        return pulumi.get(self, "firmware")

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

    @property
    @pulumi.getter
    def folder(self) -> Optional[pulumi.Input[str]]:
        """
        The path to the virtual machine folder in which to place the virtual machine, relative to the datacenter path (`/<datacenter-name>/vm`).  For example, `/dc-01/vm/foo`
        """
        return pulumi.get(self, "folder")

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

    @property
    @pulumi.getter(name="forcePowerOff")
    def force_power_off(self) -> Optional[pulumi.Input[bool]]:
        """
        If a guest shutdown failed or times out while updating or destroying (see `shutdown_wait_timeout`), force the power-off of the virtual machine. Default: `true`.
        """
        return pulumi.get(self, "force_power_off")

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

    @property
    @pulumi.getter(name="guestId")
    def guest_id(self) -> Optional[pulumi.Input[str]]:
        """
        The guest ID for the operating system type. For a full list of possible values, see [here][vmware-docs-guest-ids]. Default: `otherGuest64`.

        [vmware-docs-guest-ids]: https://vdc-download.vmware.com/vmwb-repository/dcr-public/b50dcbbf-051d-4204-a3e7-e1b618c1e384/538cf2ec-b34f-4bae-a332-3820ef9e7773/vim.vm.GuestOsDescriptor.GuestOsIdentifier.html
        """
        return pulumi.get(self, "guest_id")

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

    @property
    @pulumi.getter(name="guestIpAddresses")
    def guest_ip_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The current list of IP addresses on this machine, including the value of `default_ip_address`. If VMware Tools is not running on the virtual machine, or if the virtul machine is powered off, this list will be empty.
        """
        return pulumi.get(self, "guest_ip_addresses")

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

    @property
    @pulumi.getter(name="hardwareVersion")
    def hardware_version(self) -> Optional[pulumi.Input[int]]:
        """
        The hardware version number. Valid range is from 4 to 19. The hardware version cannot be downgraded. See [virtual machine hardware compatibility][virtual-machine-hardware-compatibility] for more information.

        [virtual-machine-hardware-compatibility]: https://kb.vmware.com/s/article/2007240
        """
        return pulumi.get(self, "hardware_version")

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

    @property
    @pulumi.getter(name="hostSystemId")
    def host_system_id(self) -> Optional[pulumi.Input[str]]:
        """
        The managed object reference ID of a host on which to place the virtual machine. See the section on virtual machine migration for more information on modifying this value. When using a vSphere cluster, if a `host_system_id` is not supplied, vSphere will select a host in the cluster to place the virtual machine, according to any defaults or vSphere DRS placement policies.
        """
        return pulumi.get(self, "host_system_id")

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

    @property
    @pulumi.getter(name="hvMode")
    def hv_mode(self) -> Optional[pulumi.Input[str]]:
        """
        The hardware virtualization (non-nested) setting for the virtual machine. One of `hvAuto`, `hvOn`, or `hvOff`. Default: `hvAuto`.
        """
        return pulumi.get(self, "hv_mode")

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

    @property
    @pulumi.getter(name="ideControllerCount")
    def ide_controller_count(self) -> Optional[pulumi.Input[int]]:
        """
        The number of IDE controllers that the virtual machine. This directly affects the number of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers. Default: `2`.
        """
        return pulumi.get(self, "ide_controller_count")

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

    @property
    @pulumi.getter(name="ignoredGuestIps")
    def ignored_guest_ips(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of IP addresses and CIDR networks to ignore while waiting for an available IP address using either of the waiters. Any IP addresses in this list will be ignored so that the waiter will continue to wait for a valid IP address. Default: `[]`.
        """
        return pulumi.get(self, "ignored_guest_ips")

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

    @property
    @pulumi.getter
    def imported(self) -> Optional[pulumi.Input[bool]]:
        """
        Indicates if the virtual machine resource has been imported, or if the state has been migrated from a previous version of the resource. It influences the behavior of the first post-import apply operation. See the section on importing below.
        """
        return pulumi.get(self, "imported")

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

    @property
    @pulumi.getter(name="latencySensitivity")
    def latency_sensitivity(self) -> Optional[pulumi.Input[str]]:
        """
        Controls the scheduling delay of the virtual machine. Use a higher sensitivity for applications that require lower latency, such as VOIP, media player applications, or applications that require frequent access to mouse or keyboard devices. One of `low`, `normal`, `medium`, or `high`.

        > **NOTE:** On higher sensitivities, you may need to adjust the `memory_reservation` to the full amount of memory provisioned for the virtual machine.
        """
        return pulumi.get(self, "latency_sensitivity")

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

    @property
    @pulumi.getter
    def memory(self) -> Optional[pulumi.Input[int]]:
        """
        The memory size to assign to the virtual machine, in MB. Default: `1024` (1 GB).
        """
        return pulumi.get(self, "memory")

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

    @property
    @pulumi.getter(name="memoryHotAddEnabled")
    def memory_hot_add_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Allow memory to be added to the virtual machine while it is powered on.

        > **NOTE:** CPU and memory hot add options are not available on all guest operating systems. Please refer to the [VMware Guest OS Compatibility Guide][vmware-docs-compat-guide] to which settings are allow for your guest operating system. In addition, at least one `pulumi up` must be run before you are able to use CPU and memory hot add.

        [vmware-docs-compat-guide]: http://partnerweb.vmware.com/comp_guide2/pdf/VMware_GOS_Compatibility_Guide.pdf

        > **NOTE:** For Linux 64-bit guest operating systems with less than or equal to 3GB, the virtual machine must powered off to add memory beyond 3GB. Subsequent hot add of memory does not require the virtual machine to be powered-off to apply the plan. Please refer to [VMware KB 2008405][vmware-kb-2008405].

        [vmware-kb-2008405]: https://kb.vmware.com/s/article/2008405
        """
        return pulumi.get(self, "memory_hot_add_enabled")

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

    @property
    @pulumi.getter(name="memoryLimit")
    def memory_limit(self) -> Optional[pulumi.Input[int]]:
        """
        The maximum amount of memory (in MB) that th virtual machine can consume, regardless of available resources. The default is no limit.
        """
        return pulumi.get(self, "memory_limit")

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

    @property
    @pulumi.getter(name="memoryReservation")
    def memory_reservation(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of memory (in MB) that the virtual machine is guaranteed. The default is no reservation.
        """
        return pulumi.get(self, "memory_reservation")

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

    @property
    @pulumi.getter(name="memoryShareCount")
    def memory_share_count(self) -> Optional[pulumi.Input[int]]:
        """
        The number of memory shares allocated to the virtual machine when the `memory_share_level` is `custom`.
        """
        return pulumi.get(self, "memory_share_count")

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

    @property
    @pulumi.getter(name="memoryShareLevel")
    def memory_share_level(self) -> Optional[pulumi.Input[str]]:
        """
        The allocation level for the virtual machine memory resources. One of `high`, `low`, `normal`, or `custom`. Default: `custom`.
        """
        return pulumi.get(self, "memory_share_level")

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

    @property
    @pulumi.getter(name="migrateWaitTimeout")
    def migrate_wait_timeout(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of time, in minutes, to wait for a virtual machine migration to complete before failing. Default: `10` minutes. See the section on virtual machine migration for more information.
        """
        return pulumi.get(self, "migrate_wait_timeout")

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

    @property
    @pulumi.getter
    def moid(self) -> Optional[pulumi.Input[str]]:
        """
        The managed object reference ID of the created virtual machine.
        """
        return pulumi.get(self, "moid")

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

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

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

    @property
    @pulumi.getter(name="nestedHvEnabled")
    def nested_hv_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable nested hardware virtualization on the virtual machine, facilitating nested virtualization in the guest operating system. Default: `false`.
        """
        return pulumi.get(self, "nested_hv_enabled")

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

    @property
    @pulumi.getter(name="networkInterfaces")
    def network_interfaces(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineNetworkInterfaceArgs']]]]:
        """
        A specification for a virtual NIC on the virtual machine. See network interface options for more information.
        """
        return pulumi.get(self, "network_interfaces")

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

    @property
    @pulumi.getter(name="numCoresPerSocket")
    def num_cores_per_socket(self) -> Optional[pulumi.Input[int]]:
        """
        The number of cores per socket in the virtual machine. The number of vCPUs on the virtual machine will be `num_cpus` divided by `num_cores_per_socket`. If specified, the value supplied to `num_cpus` must be evenly divisible by this value. Default: `1`.
        """
        return pulumi.get(self, "num_cores_per_socket")

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

    @property
    @pulumi.getter(name="numCpus")
    def num_cpus(self) -> Optional[pulumi.Input[int]]:
        """
        The total number of virtual processor cores to assign to the virtual machine. Default: `1`.
        """
        return pulumi.get(self, "num_cpus")

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

    @property
    @pulumi.getter(name="ovfDeploy")
    def ovf_deploy(self) -> Optional[pulumi.Input['VirtualMachineOvfDeployArgs']]:
        """
        When specified, the virtual machine will be deployed from the provided OVF/OVA template. See creating a virtual machine from an OVF/OVA template for more information.
        """
        return pulumi.get(self, "ovf_deploy")

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

    @property
    @pulumi.getter(name="pciDeviceIds")
    def pci_device_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of host PCI device IDs in which to create PCI passthroughs.

        > **NOTE:** Cloning requires vCenter Server and is not supported on direct ESXi host connections.
        """
        return pulumi.get(self, "pci_device_ids")

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

    @property
    @pulumi.getter(name="powerState")
    def power_state(self) -> Optional[pulumi.Input[str]]:
        """
        A computed value for the current power state of the virtual machine. One of `on`, `off`, or `suspended`.
        """
        return pulumi.get(self, "power_state")

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

    @property
    @pulumi.getter(name="poweronTimeout")
    def poweron_timeout(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of time, in seconds, that we will be trying to power on a VM
        """
        return pulumi.get(self, "poweron_timeout")

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

    @property
    @pulumi.getter(name="rebootRequired")
    def reboot_required(self) -> Optional[pulumi.Input[bool]]:
        """
        Value internal to Terraform used to determine if a configuration set change requires a reboot.
        """
        return pulumi.get(self, "reboot_required")

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

    @property
    @pulumi.getter(name="replaceTrigger")
    def replace_trigger(self) -> Optional[pulumi.Input[str]]:
        """
        Triggers replacement of resource whenever it changes.

        For example, `replace_trigger = sha256(format("%s-%s",data.template_file.cloud_init_metadata.rendered,data.template_file.cloud_init_userdata.rendered))` will fingerprint the changes in cloud-init metadata and userdata templates. This will enable a replacement of the resource whenever the dependant template renders a new configuration. (Forces a replacement.)
        """
        return pulumi.get(self, "replace_trigger")

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

    @property
    @pulumi.getter(name="resourcePoolId")
    def resource_pool_id(self) -> Optional[pulumi.Input[str]]:
        """
        The managed object reference ID of the resource pool in which to place the virtual machine. See the Virtual Machine Migration section for more information on modifying this value.

        > **NOTE:** All clusters and standalone hosts have a default root resource pool. This resource argument does not directly accept the cluster or standalone host resource. For more information, see the section on specifying the Root Resource Pool in the `ResourcePool` data source documentation on using the root resource pool.
        """
        return pulumi.get(self, "resource_pool_id")

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

    @property
    @pulumi.getter(name="runToolsScriptsAfterPowerOn")
    def run_tools_scripts_after_power_on(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable post-power-on scripts to run when VMware Tools is installed. Default: `true`.
        """
        return pulumi.get(self, "run_tools_scripts_after_power_on")

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

    @property
    @pulumi.getter(name="runToolsScriptsAfterResume")
    def run_tools_scripts_after_resume(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable ost-resume scripts to run when VMware Tools is installed. Default: `true`.
        """
        return pulumi.get(self, "run_tools_scripts_after_resume")

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

    @property
    @pulumi.getter(name="runToolsScriptsBeforeGuestReboot")
    def run_tools_scripts_before_guest_reboot(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable pre-reboot scripts to run when VMware Tools is installed. Default: `false`.
        """
        return pulumi.get(self, "run_tools_scripts_before_guest_reboot")

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

    @property
    @pulumi.getter(name="runToolsScriptsBeforeGuestShutdown")
    def run_tools_scripts_before_guest_shutdown(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable pre-shutdown scripts to run when VMware Tools is installed. Default: `true`.
        """
        return pulumi.get(self, "run_tools_scripts_before_guest_shutdown")

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

    @property
    @pulumi.getter(name="runToolsScriptsBeforeGuestStandby")
    def run_tools_scripts_before_guest_standby(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable pre-standby scripts to run when VMware Tools is installed. Default: `true`.
        """
        return pulumi.get(self, "run_tools_scripts_before_guest_standby")

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

    @property
    @pulumi.getter(name="sataControllerCount")
    def sata_controller_count(self) -> Optional[pulumi.Input[int]]:
        """
        The number of SATA controllers that Terraform manages on this virtual machine. This directly affects the amount of disks
        you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove
        controllers.
        """
        return pulumi.get(self, "sata_controller_count")

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

    @property
    @pulumi.getter(name="scsiBusSharing")
    def scsi_bus_sharing(self) -> Optional[pulumi.Input[str]]:
        """
        The type of SCSI bus sharing for the virtual machine SCSI controller. One of `physicalSharing`, `virtualSharing`, and `noSharing`. Default: `noSharing`.
        """
        return pulumi.get(self, "scsi_bus_sharing")

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

    @property
    @pulumi.getter(name="scsiControllerCount")
    def scsi_controller_count(self) -> Optional[pulumi.Input[int]]:
        """
        The number of SCSI controllers that Terraform manages on this virtual machine. This directly affects the amount of disks
        you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove
        controllers.
        """
        return pulumi.get(self, "scsi_controller_count")

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

    @property
    @pulumi.getter(name="scsiType")
    def scsi_type(self) -> Optional[pulumi.Input[str]]:
        """
        The SCSI controller type for the virtual machine. One of `lsilogic` (LSI Logic Parallel), `lsilogic-sas` (LSI Logic SAS) or `pvscsi` (VMware Paravirtual). Default: `pvscsi`.
        """
        return pulumi.get(self, "scsi_type")

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

    @property
    @pulumi.getter(name="shutdownWaitTimeout")
    def shutdown_wait_timeout(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of time, in minutes, to wait for a graceful guest shutdown when making necessary updates to the virtual machine. If `force_power_off` is set to `true`, the virtual machine will be forced to power-off after the timeout, otherwise an error is returned. Default: `3` minutes.
        """
        return pulumi.get(self, "shutdown_wait_timeout")

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

    @property
    @pulumi.getter(name="storagePolicyId")
    def storage_policy_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the storage policy to assign to the home directory of a virtual machine.
        """
        return pulumi.get(self, "storage_policy_id")

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

    @property
    @pulumi.getter(name="swapPlacementPolicy")
    def swap_placement_policy(self) -> Optional[pulumi.Input[str]]:
        """
        The swap file placement policy for the virtual machine. One of `inherit`, `hostLocal`, or `vmDirectory`. Default: `inherit`.
        """
        return pulumi.get(self, "swap_placement_policy")

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

    @property
    @pulumi.getter(name="syncTimeWithHost")
    def sync_time_with_host(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable the guest operating system to synchronization its clock with the host when the virtual machine is powered on or resumed. Requires vSphere 7.0 Update 1 and later. Requires VMware Tools to be installed. Default: `false`.
        """
        return pulumi.get(self, "sync_time_with_host")

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

    @property
    @pulumi.getter(name="syncTimeWithHostPeriodically")
    def sync_time_with_host_periodically(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable the guest operating system to periodically synchronize its clock with the host. Requires vSphere 7.0 Update 1 and later. On previous versions, setting `sync_time_with_host` is will enable periodic synchronization. Requires VMware Tools to be installed. Default: `false`.
        """
        return pulumi.get(self, "sync_time_with_host_periodically")

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

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The IDs of any tags to attach to this resource. Please refer to the `Tag` resource for more information on applying tags to virtual machine resources.

        > **NOTE:** Tagging support is unsupported on direct ESXi host connections and requires vCenter Server instance.
        """
        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(name="toolsUpgradePolicy")
    def tools_upgrade_policy(self) -> Optional[pulumi.Input[str]]:
        """
        Enable automatic upgrade of the VMware Tools version when the virtual machine is rebooted. If necessary, VMware Tools is upgraded to the latest version supported by the host on which the virtual machine is running. Requires VMware Tools to be installed. One of `manual` or `upgradeAtPowerCycle`. Default: `manual`.
        """
        return pulumi.get(self, "tools_upgrade_policy")

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

    @property
    @pulumi.getter
    def uuid(self) -> Optional[pulumi.Input[str]]:
        """
        The UUID of the virtual disk VMDK file. This is used to track the virtual disk on the virtual machine.
        """
        return pulumi.get(self, "uuid")

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

    @property
    @pulumi.getter
    def vapp(self) -> Optional[pulumi.Input['VirtualMachineVappArgs']]:
        """
        Used for vApp configurations. The only sub-key available is `properties`, which is a key/value map of properties for virtual machines imported from and OVF/OVA. See Using vApp Properties for OVF/OVA Configuration for more information.
        """
        return pulumi.get(self, "vapp")

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

    @property
    @pulumi.getter(name="vappTransports")
    def vapp_transports(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Computed value which is only valid for cloned virtual machines. A list of vApp transport methods supported by the source virtual machine or template.
        """
        return pulumi.get(self, "vapp_transports")

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

    @property
    @pulumi.getter(name="vbsEnabled")
    def vbs_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable Virtualization Based Security. Requires `firmware` to be `efi`. In addition, `vvtd_enabled`, `nested_hv_enabled`, and `efi_secure_boot_enabled` must all have a value of `true`. Supported on vSphere 6.7 and later. Default: `false`.
        """
        return pulumi.get(self, "vbs_enabled")

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

    @property
    @pulumi.getter(name="vmwareToolsStatus")
    def vmware_tools_status(self) -> Optional[pulumi.Input[str]]:
        """
        The state of  VMware Tools in the guest. This will determine the proper course of action for some device operations.
        """
        return pulumi.get(self, "vmware_tools_status")

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

    @property
    @pulumi.getter(name="vmxPath")
    def vmx_path(self) -> Optional[pulumi.Input[str]]:
        """
        The path of the virtual machine configuration file on the datastore in which the virtual machine is placed.
        """
        return pulumi.get(self, "vmx_path")

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

    @property
    @pulumi.getter(name="vvtdEnabled")
    def vvtd_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable Intel Virtualization Technology for Directed I/O for the virtual machine (_I/O MMU_ in the vSphere Client). Supported on vSphere 6.7 and later. Default: `false`.
        """
        return pulumi.get(self, "vvtd_enabled")

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

    @property
    @pulumi.getter(name="waitForGuestIpTimeout")
    def wait_for_guest_ip_timeout(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of time, in minutes, to wait for an available guest IP address on the virtual machine. This should only be used if the version VMware Tools does not allow the `wait_for_guest_net_timeout` waiter to be used. A value less than `1` disables the waiter. Default: `0`.
        """
        return pulumi.get(self, "wait_for_guest_ip_timeout")

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

    @property
    @pulumi.getter(name="waitForGuestNetRoutable")
    def wait_for_guest_net_routable(self) -> Optional[pulumi.Input[bool]]:
        """
        Controls whether or not the guest network waiter waits for a routable address. When `false`, the waiter does not wait for a default gateway, nor are IP addresses checked against any discovered default gateways as part of its success criteria. This property is ignored if the `wait_for_guest_ip_timeout` waiter is used. Default: `true`.
        """
        return pulumi.get(self, "wait_for_guest_net_routable")

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

    @property
    @pulumi.getter(name="waitForGuestNetTimeout")
    def wait_for_guest_net_timeout(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of time, in minutes, to wait for an available guest IP address on the virtual machine. Older versions of VMware Tools do not populate this property. In those cases, this waiter can be disabled and the `wait_for_guest_ip_timeout` waiter can be used instead. A value less than `1` disables the waiter. Default: `5` minutes.
        """
        return pulumi.get(self, "wait_for_guest_net_timeout")

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


class VirtualMachine(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 alternate_guest_name: Optional[pulumi.Input[str]] = None,
                 annotation: Optional[pulumi.Input[str]] = None,
                 boot_delay: Optional[pulumi.Input[int]] = None,
                 boot_retry_delay: Optional[pulumi.Input[int]] = None,
                 boot_retry_enabled: Optional[pulumi.Input[bool]] = None,
                 cdroms: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['VirtualMachineCdromArgs']]]]] = None,
                 clone: Optional[pulumi.Input[pulumi.InputType['VirtualMachineCloneArgs']]] = None,
                 cpu_hot_add_enabled: Optional[pulumi.Input[bool]] = None,
                 cpu_hot_remove_enabled: Optional[pulumi.Input[bool]] = None,
                 cpu_limit: Optional[pulumi.Input[int]] = None,
                 cpu_performance_counters_enabled: Optional[pulumi.Input[bool]] = None,
                 cpu_reservation: Optional[pulumi.Input[int]] = None,
                 cpu_share_count: Optional[pulumi.Input[int]] = None,
                 cpu_share_level: Optional[pulumi.Input[str]] = None,
                 custom_attributes: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 datacenter_id: Optional[pulumi.Input[str]] = None,
                 datastore_cluster_id: Optional[pulumi.Input[str]] = None,
                 datastore_id: Optional[pulumi.Input[str]] = None,
                 disks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['VirtualMachineDiskArgs']]]]] = None,
                 efi_secure_boot_enabled: Optional[pulumi.Input[bool]] = None,
                 enable_disk_uuid: Optional[pulumi.Input[bool]] = None,
                 enable_logging: Optional[pulumi.Input[bool]] = None,
                 ept_rvi_mode: Optional[pulumi.Input[str]] = None,
                 extra_config: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 extra_config_reboot_required: Optional[pulumi.Input[bool]] = None,
                 firmware: Optional[pulumi.Input[str]] = None,
                 folder: Optional[pulumi.Input[str]] = None,
                 force_power_off: Optional[pulumi.Input[bool]] = None,
                 guest_id: Optional[pulumi.Input[str]] = None,
                 hardware_version: Optional[pulumi.Input[int]] = None,
                 host_system_id: Optional[pulumi.Input[str]] = None,
                 hv_mode: Optional[pulumi.Input[str]] = None,
                 ide_controller_count: Optional[pulumi.Input[int]] = None,
                 ignored_guest_ips: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 latency_sensitivity: Optional[pulumi.Input[str]] = None,
                 memory: Optional[pulumi.Input[int]] = None,
                 memory_hot_add_enabled: Optional[pulumi.Input[bool]] = None,
                 memory_limit: Optional[pulumi.Input[int]] = None,
                 memory_reservation: Optional[pulumi.Input[int]] = None,
                 memory_share_count: Optional[pulumi.Input[int]] = None,
                 memory_share_level: Optional[pulumi.Input[str]] = None,
                 migrate_wait_timeout: Optional[pulumi.Input[int]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 nested_hv_enabled: Optional[pulumi.Input[bool]] = None,
                 network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['VirtualMachineNetworkInterfaceArgs']]]]] = None,
                 num_cores_per_socket: Optional[pulumi.Input[int]] = None,
                 num_cpus: Optional[pulumi.Input[int]] = None,
                 ovf_deploy: Optional[pulumi.Input[pulumi.InputType['VirtualMachineOvfDeployArgs']]] = None,
                 pci_device_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 poweron_timeout: Optional[pulumi.Input[int]] = None,
                 replace_trigger: Optional[pulumi.Input[str]] = None,
                 resource_pool_id: Optional[pulumi.Input[str]] = None,
                 run_tools_scripts_after_power_on: Optional[pulumi.Input[bool]] = None,
                 run_tools_scripts_after_resume: Optional[pulumi.Input[bool]] = None,
                 run_tools_scripts_before_guest_reboot: Optional[pulumi.Input[bool]] = None,
                 run_tools_scripts_before_guest_shutdown: Optional[pulumi.Input[bool]] = None,
                 run_tools_scripts_before_guest_standby: Optional[pulumi.Input[bool]] = None,
                 sata_controller_count: Optional[pulumi.Input[int]] = None,
                 scsi_bus_sharing: Optional[pulumi.Input[str]] = None,
                 scsi_controller_count: Optional[pulumi.Input[int]] = None,
                 scsi_type: Optional[pulumi.Input[str]] = None,
                 shutdown_wait_timeout: Optional[pulumi.Input[int]] = None,
                 storage_policy_id: Optional[pulumi.Input[str]] = None,
                 swap_placement_policy: Optional[pulumi.Input[str]] = None,
                 sync_time_with_host: Optional[pulumi.Input[bool]] = None,
                 sync_time_with_host_periodically: Optional[pulumi.Input[bool]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 tools_upgrade_policy: Optional[pulumi.Input[str]] = None,
                 vapp: Optional[pulumi.Input[pulumi.InputType['VirtualMachineVappArgs']]] = None,
                 vbs_enabled: Optional[pulumi.Input[bool]] = None,
                 vvtd_enabled: Optional[pulumi.Input[bool]] = None,
                 wait_for_guest_ip_timeout: Optional[pulumi.Input[int]] = None,
                 wait_for_guest_net_routable: Optional[pulumi.Input[bool]] = None,
                 wait_for_guest_net_timeout: Optional[pulumi.Input[int]] = None,
                 __props__=None):
        """
        Create a VirtualMachine resource with the given unique name, props, and options.
        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[str] alternate_guest_name: The guest name for the operating system when `guest_id` is `otherGuest` or `otherGuest64`.
        :param pulumi.Input[str] annotation: A user-provided description of the virtual machine.
        :param pulumi.Input[int] boot_delay: The number of milliseconds to wait before starting the boot sequence. The default is no delay.
        :param pulumi.Input[int] boot_retry_delay: The number of milliseconds to wait before retrying the boot sequence. This option is only valid if `boot_retry_enabled` is `true`. Default: `10000` (10 seconds).
        :param pulumi.Input[bool] boot_retry_enabled: If set to `true`, a virtual machine that fails to boot will try again after the delay defined in `boot_retry_delay`. Default: `false`.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['VirtualMachineCdromArgs']]]] cdroms: A specification for a CD-ROM device on the virtual machine. See CD-ROM options for more information.
        :param pulumi.Input[pulumi.InputType['VirtualMachineCloneArgs']] clone: When specified, the virtual machine will be created as a clone of a specified template. Optional customization options can be submitted for the resource. See creating a virtual machine from a template for more information.
        :param pulumi.Input[bool] cpu_hot_add_enabled: Allow CPUs to be added to the virtual machine while it is powered on.
        :param pulumi.Input[bool] cpu_hot_remove_enabled: Allow CPUs to be removed to the virtual machine while it is powered on.
        :param pulumi.Input[int] cpu_limit: The maximum amount of CPU (in MHz) that the virtual machine can consume, regardless of available resources. The default is no limit.
        :param pulumi.Input[bool] cpu_performance_counters_enabled: Enable CPU performance counters on the virtual machine. Default: `false`.
        :param pulumi.Input[int] cpu_reservation: The amount of CPU (in MHz) that the virtual machine is guaranteed. The default is no reservation.
        :param pulumi.Input[int] cpu_share_count: The number of CPU shares allocated to the virtual machine when the `cpu_share_level` is `custom`.
        :param pulumi.Input[str] cpu_share_level: The allocation level for the virtual machine CPU resources. One of `high`, `low`, `normal`, or `custom`. Default: `custom`.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] custom_attributes: Map of custom attribute ids to attribute value strings to set for virtual machine. Please refer to the `vsphere_custom_attributes` resource for more information on setting custom attributes.
               
               > **NOTE:** Custom attributes requires vCenter Server and is not supported on direct ESXi host connections.
        :param pulumi.Input[str] datacenter_id: The datacenter ID. Required only when deploying an OVF/OVA template.
        :param pulumi.Input[str] datastore_cluster_id: The managed object reference ID of the datastore cluster in which to place the virtual machine. This setting applies to entire virtual machine and implies that you wish to use vSphere Storage DRS with the virtual machine. See the section on virtual machine migration for more information on modifying this value.
               
               > **NOTE:** One of `datastore_id` or `datastore_cluster_id` must be specified.
               
               > **NOTE:** Use of `datastore_cluster_id` requires vSphere Storage DRS to be enabled on the specified datastore cluster.
               
               > **NOTE:** The `datastore_cluster_id` setting applies to the entire virtual machine resource. You cannot assign individual individual disks to datastore clusters. In addition, you cannot use the `attach` setting to attach external disks on virtual machines that are assigned to datastore clusters.
        :param pulumi.Input[str] datastore_id: The managed object reference ID of the datastore in which to place the virtual machine. The virtual machine configuration files is placed here, along with any virtual disks that are created where a datastore is not explicitly specified. See the section on virtual machine migration for more information on modifying this value.
               
               > **NOTE:** Datastores cannot be assigned to individual disks when `datastore_cluster_id` is used.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['VirtualMachineDiskArgs']]]] disks: A specification for a virtual disk device on the virtual machine. See disk options for more information.
        :param pulumi.Input[bool] efi_secure_boot_enabled: Use this option to enable EFI secure boot when the `firmware` type is set to is `efi`. Default: `false`.
               
               > **NOTE:** EFI secure boot is only available on vSphere 6.5 and later.
        :param pulumi.Input[bool] enable_disk_uuid: Expose the UUIDs of attached virtual disks to the virtual machine, allowing access to them in the guest. Default: `false`.
        :param pulumi.Input[bool] enable_logging: Enable logging of virtual machine events to a log file stored in the virtual machine directory. Default: `false`.
        :param pulumi.Input[str] ept_rvi_mode: The EPT/RVI (hardware memory virtualization) setting for the virtual machine. One of `automatic`, `on`, or `off`. Default: `automatic`.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] extra_config: Extra configuration data for the virtual machine. Can be used to supply advanced parameters not normally in configuration, such as instance metadata and userdata.
               
               > **NOTE:** Do not use `extra_config` when working with a template imported from OVF/OVA as your settings may be ignored. Use the `vapp` block `properties` section as described in Using vApp Properties for OVF/OVA Configuration.
        :param pulumi.Input[bool] extra_config_reboot_required: Allow the virtual machine to be rebooted when a change to `extra_config` occurs. Default: `true`.
        :param pulumi.Input[str] firmware: The firmware for the virtual machine. One of `bios` or `efi`.
        :param pulumi.Input[str] folder: The path to the virtual machine folder in which to place the virtual machine, relative to the datacenter path (`/<datacenter-name>/vm`).  For example, `/dc-01/vm/foo`
        :param pulumi.Input[bool] force_power_off: If a guest shutdown failed or times out while updating or destroying (see `shutdown_wait_timeout`), force the power-off of the virtual machine. Default: `true`.
        :param pulumi.Input[str] guest_id: The guest ID for the operating system type. For a full list of possible values, see [here][vmware-docs-guest-ids]. Default: `otherGuest64`.
               
               [vmware-docs-guest-ids]: https://vdc-download.vmware.com/vmwb-repository/dcr-public/b50dcbbf-051d-4204-a3e7-e1b618c1e384/538cf2ec-b34f-4bae-a332-3820ef9e7773/vim.vm.GuestOsDescriptor.GuestOsIdentifier.html
        :param pulumi.Input[int] hardware_version: The hardware version number. Valid range is from 4 to 19. The hardware version cannot be downgraded. See [virtual machine hardware compatibility][virtual-machine-hardware-compatibility] for more information.
               
               [virtual-machine-hardware-compatibility]: https://kb.vmware.com/s/article/2007240
        :param pulumi.Input[str] host_system_id: The managed object reference ID of a host on which to place the virtual machine. See the section on virtual machine migration for more information on modifying this value. When using a vSphere cluster, if a `host_system_id` is not supplied, vSphere will select a host in the cluster to place the virtual machine, according to any defaults or vSphere DRS placement policies.
        :param pulumi.Input[str] hv_mode: The hardware virtualization (non-nested) setting for the virtual machine. One of `hvAuto`, `hvOn`, or `hvOff`. Default: `hvAuto`.
        :param pulumi.Input[int] ide_controller_count: The number of IDE controllers that the virtual machine. This directly affects the number of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers. Default: `2`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ignored_guest_ips: List of IP addresses and CIDR networks to ignore while waiting for an available IP address using either of the waiters. Any IP addresses in this list will be ignored so that the waiter will continue to wait for a valid IP address. Default: `[]`.
        :param pulumi.Input[str] latency_sensitivity: Controls the scheduling delay of the virtual machine. Use a higher sensitivity for applications that require lower latency, such as VOIP, media player applications, or applications that require frequent access to mouse or keyboard devices. One of `low`, `normal`, `medium`, or `high`.
               
               > **NOTE:** On higher sensitivities, you may need to adjust the `memory_reservation` to the full amount of memory provisioned for the virtual machine.
        :param pulumi.Input[int] memory: The memory size to assign to the virtual machine, in MB. Default: `1024` (1 GB).
        :param pulumi.Input[bool] memory_hot_add_enabled: Allow memory to be added to the virtual machine while it is powered on.
               
               > **NOTE:** CPU and memory hot add options are not available on all guest operating systems. Please refer to the [VMware Guest OS Compatibility Guide][vmware-docs-compat-guide] to which settings are allow for your guest operating system. In addition, at least one `pulumi up` must be run before you are able to use CPU and memory hot add.
               
               [vmware-docs-compat-guide]: http://partnerweb.vmware.com/comp_guide2/pdf/VMware_GOS_Compatibility_Guide.pdf
               
               > **NOTE:** For Linux 64-bit guest operating systems with less than or equal to 3GB, the virtual machine must powered off to add memory beyond 3GB. Subsequent hot add of memory does not require the virtual machine to be powered-off to apply the plan. Please refer to [VMware KB 2008405][vmware-kb-2008405].
               
               [vmware-kb-2008405]: https://kb.vmware.com/s/article/2008405
        :param pulumi.Input[int] memory_limit: The maximum amount of memory (in MB) that th virtual machine can consume, regardless of available resources. The default is no limit.
        :param pulumi.Input[int] memory_reservation: The amount of memory (in MB) that the virtual machine is guaranteed. The default is no reservation.
        :param pulumi.Input[int] memory_share_count: The number of memory shares allocated to the virtual machine when the `memory_share_level` is `custom`.
        :param pulumi.Input[str] memory_share_level: The allocation level for the virtual machine memory resources. One of `high`, `low`, `normal`, or `custom`. Default: `custom`.
        :param pulumi.Input[int] migrate_wait_timeout: The amount of time, in minutes, to wait for a virtual machine migration to complete before failing. Default: `10` minutes. See the section on virtual machine migration for more information.
        :param pulumi.Input[str] name: The name of the virtual machine.
        :param pulumi.Input[bool] nested_hv_enabled: Enable nested hardware virtualization on the virtual machine, facilitating nested virtualization in the guest operating system. Default: `false`.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['VirtualMachineNetworkInterfaceArgs']]]] network_interfaces: A specification for a virtual NIC on the virtual machine. See network interface options for more information.
        :param pulumi.Input[int] num_cores_per_socket: The number of cores per socket in the virtual machine. The number of vCPUs on the virtual machine will be `num_cpus` divided by `num_cores_per_socket`. If specified, the value supplied to `num_cpus` must be evenly divisible by this value. Default: `1`.
        :param pulumi.Input[int] num_cpus: The total number of virtual processor cores to assign to the virtual machine. Default: `1`.
        :param pulumi.Input[pulumi.InputType['VirtualMachineOvfDeployArgs']] ovf_deploy: When specified, the virtual machine will be deployed from the provided OVF/OVA template. See creating a virtual machine from an OVF/OVA template for more information.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] pci_device_ids: List of host PCI device IDs in which to create PCI passthroughs.
               
               > **NOTE:** Cloning requires vCenter Server and is not supported on direct ESXi host connections.
        :param pulumi.Input[int] poweron_timeout: The amount of time, in seconds, that we will be trying to power on a VM
        :param pulumi.Input[str] replace_trigger: Triggers replacement of resource whenever it changes.
               
               For example, `replace_trigger = sha256(format("%s-%s",data.template_file.cloud_init_metadata.rendered,data.template_file.cloud_init_userdata.rendered))` will fingerprint the changes in cloud-init metadata and userdata templates. This will enable a replacement of the resource whenever the dependant template renders a new configuration. (Forces a replacement.)
        :param pulumi.Input[str] resource_pool_id: The managed object reference ID of the resource pool in which to place the virtual machine. See the Virtual Machine Migration section for more information on modifying this value.
               
               > **NOTE:** All clusters and standalone hosts have a default root resource pool. This resource argument does not directly accept the cluster or standalone host resource. For more information, see the section on specifying the Root Resource Pool in the `ResourcePool` data source documentation on using the root resource pool.
        :param pulumi.Input[bool] run_tools_scripts_after_power_on: Enable post-power-on scripts to run when VMware Tools is installed. Default: `true`.
        :param pulumi.Input[bool] run_tools_scripts_after_resume: Enable ost-resume scripts to run when VMware Tools is installed. Default: `true`.
        :param pulumi.Input[bool] run_tools_scripts_before_guest_reboot: Enable pre-reboot scripts to run when VMware Tools is installed. Default: `false`.
        :param pulumi.Input[bool] run_tools_scripts_before_guest_shutdown: Enable pre-shutdown scripts to run when VMware Tools is installed. Default: `true`.
        :param pulumi.Input[bool] run_tools_scripts_before_guest_standby: Enable pre-standby scripts to run when VMware Tools is installed. Default: `true`.
        :param pulumi.Input[int] sata_controller_count: The number of SATA controllers that Terraform manages on this virtual machine. This directly affects the amount of disks
               you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove
               controllers.
        :param pulumi.Input[str] scsi_bus_sharing: The type of SCSI bus sharing for the virtual machine SCSI controller. One of `physicalSharing`, `virtualSharing`, and `noSharing`. Default: `noSharing`.
        :param pulumi.Input[int] scsi_controller_count: The number of SCSI controllers that Terraform manages on this virtual machine. This directly affects the amount of disks
               you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove
               controllers.
        :param pulumi.Input[str] scsi_type: The SCSI controller type for the virtual machine. One of `lsilogic` (LSI Logic Parallel), `lsilogic-sas` (LSI Logic SAS) or `pvscsi` (VMware Paravirtual). Default: `pvscsi`.
        :param pulumi.Input[int] shutdown_wait_timeout: The amount of time, in minutes, to wait for a graceful guest shutdown when making necessary updates to the virtual machine. If `force_power_off` is set to `true`, the virtual machine will be forced to power-off after the timeout, otherwise an error is returned. Default: `3` minutes.
        :param pulumi.Input[str] storage_policy_id: The ID of the storage policy to assign to the home directory of a virtual machine.
        :param pulumi.Input[str] swap_placement_policy: The swap file placement policy for the virtual machine. One of `inherit`, `hostLocal`, or `vmDirectory`. Default: `inherit`.
        :param pulumi.Input[bool] sync_time_with_host: Enable the guest operating system to synchronization its clock with the host when the virtual machine is powered on or resumed. Requires vSphere 7.0 Update 1 and later. Requires VMware Tools to be installed. Default: `false`.
        :param pulumi.Input[bool] sync_time_with_host_periodically: Enable the guest operating system to periodically synchronize its clock with the host. Requires vSphere 7.0 Update 1 and later. On previous versions, setting `sync_time_with_host` is will enable periodic synchronization. Requires VMware Tools to be installed. Default: `false`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: The IDs of any tags to attach to this resource. Please refer to the `Tag` resource for more information on applying tags to virtual machine resources.
               
               > **NOTE:** Tagging support is unsupported on direct ESXi host connections and requires vCenter Server instance.
        :param pulumi.Input[str] tools_upgrade_policy: Enable automatic upgrade of the VMware Tools version when the virtual machine is rebooted. If necessary, VMware Tools is upgraded to the latest version supported by the host on which the virtual machine is running. Requires VMware Tools to be installed. One of `manual` or `upgradeAtPowerCycle`. Default: `manual`.
        :param pulumi.Input[pulumi.InputType['VirtualMachineVappArgs']] vapp: Used for vApp configurations. The only sub-key available is `properties`, which is a key/value map of properties for virtual machines imported from and OVF/OVA. See Using vApp Properties for OVF/OVA Configuration for more information.
        :param pulumi.Input[bool] vbs_enabled: Enable Virtualization Based Security. Requires `firmware` to be `efi`. In addition, `vvtd_enabled`, `nested_hv_enabled`, and `efi_secure_boot_enabled` must all have a value of `true`. Supported on vSphere 6.7 and later. Default: `false`.
        :param pulumi.Input[bool] vvtd_enabled: Enable Intel Virtualization Technology for Directed I/O for the virtual machine (_I/O MMU_ in the vSphere Client). Supported on vSphere 6.7 and later. Default: `false`.
        :param pulumi.Input[int] wait_for_guest_ip_timeout: The amount of time, in minutes, to wait for an available guest IP address on the virtual machine. This should only be used if the version VMware Tools does not allow the `wait_for_guest_net_timeout` waiter to be used. A value less than `1` disables the waiter. Default: `0`.
        :param pulumi.Input[bool] wait_for_guest_net_routable: Controls whether or not the guest network waiter waits for a routable address. When `false`, the waiter does not wait for a default gateway, nor are IP addresses checked against any discovered default gateways as part of its success criteria. This property is ignored if the `wait_for_guest_ip_timeout` waiter is used. Default: `true`.
        :param pulumi.Input[int] wait_for_guest_net_timeout: The amount of time, in minutes, to wait for an available guest IP address on the virtual machine. Older versions of VMware Tools do not populate this property. In those cases, this waiter can be disabled and the `wait_for_guest_ip_timeout` waiter can be used instead. A value less than `1` disables the waiter. Default: `5` minutes.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: VirtualMachineArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Create a VirtualMachine resource with the given unique name, props, and options.
        :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,
                 alternate_guest_name: Optional[pulumi.Input[str]] = None,
                 annotation: Optional[pulumi.Input[str]] = None,
                 boot_delay: Optional[pulumi.Input[int]] = None,
                 boot_retry_delay: Optional[pulumi.Input[int]] = None,
                 boot_retry_enabled: Optional[pulumi.Input[bool]] = None,
                 cdroms: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['VirtualMachineCdromArgs']]]]] = None,
                 clone: Optional[pulumi.Input[pulumi.InputType['VirtualMachineCloneArgs']]] = None,
                 cpu_hot_add_enabled: Optional[pulumi.Input[bool]] = None,
                 cpu_hot_remove_enabled: Optional[pulumi.Input[bool]] = None,
                 cpu_limit: Optional[pulumi.Input[int]] = None,
                 cpu_performance_counters_enabled: Optional[pulumi.Input[bool]] = None,
                 cpu_reservation: Optional[pulumi.Input[int]] = None,
                 cpu_share_count: Optional[pulumi.Input[int]] = None,
                 cpu_share_level: Optional[pulumi.Input[str]] = None,
                 custom_attributes: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 datacenter_id: Optional[pulumi.Input[str]] = None,
                 datastore_cluster_id: Optional[pulumi.Input[str]] = None,
                 datastore_id: Optional[pulumi.Input[str]] = None,
                 disks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['VirtualMachineDiskArgs']]]]] = None,
                 efi_secure_boot_enabled: Optional[pulumi.Input[bool]] = None,
                 enable_disk_uuid: Optional[pulumi.Input[bool]] = None,
                 enable_logging: Optional[pulumi.Input[bool]] = None,
                 ept_rvi_mode: Optional[pulumi.Input[str]] = None,
                 extra_config: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 extra_config_reboot_required: Optional[pulumi.Input[bool]] = None,
                 firmware: Optional[pulumi.Input[str]] = None,
                 folder: Optional[pulumi.Input[str]] = None,
                 force_power_off: Optional[pulumi.Input[bool]] = None,
                 guest_id: Optional[pulumi.Input[str]] = None,
                 hardware_version: Optional[pulumi.Input[int]] = None,
                 host_system_id: Optional[pulumi.Input[str]] = None,
                 hv_mode: Optional[pulumi.Input[str]] = None,
                 ide_controller_count: Optional[pulumi.Input[int]] = None,
                 ignored_guest_ips: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 latency_sensitivity: Optional[pulumi.Input[str]] = None,
                 memory: Optional[pulumi.Input[int]] = None,
                 memory_hot_add_enabled: Optional[pulumi.Input[bool]] = None,
                 memory_limit: Optional[pulumi.Input[int]] = None,
                 memory_reservation: Optional[pulumi.Input[int]] = None,
                 memory_share_count: Optional[pulumi.Input[int]] = None,
                 memory_share_level: Optional[pulumi.Input[str]] = None,
                 migrate_wait_timeout: Optional[pulumi.Input[int]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 nested_hv_enabled: Optional[pulumi.Input[bool]] = None,
                 network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['VirtualMachineNetworkInterfaceArgs']]]]] = None,
                 num_cores_per_socket: Optional[pulumi.Input[int]] = None,
                 num_cpus: Optional[pulumi.Input[int]] = None,
                 ovf_deploy: Optional[pulumi.Input[pulumi.InputType['VirtualMachineOvfDeployArgs']]] = None,
                 pci_device_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 poweron_timeout: Optional[pulumi.Input[int]] = None,
                 replace_trigger: Optional[pulumi.Input[str]] = None,
                 resource_pool_id: Optional[pulumi.Input[str]] = None,
                 run_tools_scripts_after_power_on: Optional[pulumi.Input[bool]] = None,
                 run_tools_scripts_after_resume: Optional[pulumi.Input[bool]] = None,
                 run_tools_scripts_before_guest_reboot: Optional[pulumi.Input[bool]] = None,
                 run_tools_scripts_before_guest_shutdown: Optional[pulumi.Input[bool]] = None,
                 run_tools_scripts_before_guest_standby: Optional[pulumi.Input[bool]] = None,
                 sata_controller_count: Optional[pulumi.Input[int]] = None,
                 scsi_bus_sharing: Optional[pulumi.Input[str]] = None,
                 scsi_controller_count: Optional[pulumi.Input[int]] = None,
                 scsi_type: Optional[pulumi.Input[str]] = None,
                 shutdown_wait_timeout: Optional[pulumi.Input[int]] = None,
                 storage_policy_id: Optional[pulumi.Input[str]] = None,
                 swap_placement_policy: Optional[pulumi.Input[str]] = None,
                 sync_time_with_host: Optional[pulumi.Input[bool]] = None,
                 sync_time_with_host_periodically: Optional[pulumi.Input[bool]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 tools_upgrade_policy: Optional[pulumi.Input[str]] = None,
                 vapp: Optional[pulumi.Input[pulumi.InputType['VirtualMachineVappArgs']]] = None,
                 vbs_enabled: Optional[pulumi.Input[bool]] = None,
                 vvtd_enabled: Optional[pulumi.Input[bool]] = None,
                 wait_for_guest_ip_timeout: Optional[pulumi.Input[int]] = None,
                 wait_for_guest_net_routable: Optional[pulumi.Input[bool]] = None,
                 wait_for_guest_net_timeout: Optional[pulumi.Input[int]] = 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__["alternate_guest_name"] = alternate_guest_name
            __props__.__dict__["annotation"] = annotation
            __props__.__dict__["boot_delay"] = boot_delay
            __props__.__dict__["boot_retry_delay"] = boot_retry_delay
            __props__.__dict__["boot_retry_enabled"] = boot_retry_enabled
            __props__.__dict__["cdroms"] = cdroms
            __props__.__dict__["clone"] = clone
            __props__.__dict__["cpu_hot_add_enabled"] = cpu_hot_add_enabled
            __props__.__dict__["cpu_hot_remove_enabled"] = cpu_hot_remove_enabled
            __props__.__dict__["cpu_limit"] = cpu_limit
            __props__.__dict__["cpu_performance_counters_enabled"] = cpu_performance_counters_enabled
            __props__.__dict__["cpu_reservation"] = cpu_reservation
            __props__.__dict__["cpu_share_count"] = cpu_share_count
            __props__.__dict__["cpu_share_level"] = cpu_share_level
            __props__.__dict__["custom_attributes"] = custom_attributes
            __props__.__dict__["datacenter_id"] = datacenter_id
            __props__.__dict__["datastore_cluster_id"] = datastore_cluster_id
            __props__.__dict__["datastore_id"] = datastore_id
            __props__.__dict__["disks"] = disks
            __props__.__dict__["efi_secure_boot_enabled"] = efi_secure_boot_enabled
            __props__.__dict__["enable_disk_uuid"] = enable_disk_uuid
            __props__.__dict__["enable_logging"] = enable_logging
            __props__.__dict__["ept_rvi_mode"] = ept_rvi_mode
            __props__.__dict__["extra_config"] = extra_config
            __props__.__dict__["extra_config_reboot_required"] = extra_config_reboot_required
            __props__.__dict__["firmware"] = firmware
            __props__.__dict__["folder"] = folder
            __props__.__dict__["force_power_off"] = force_power_off
            __props__.__dict__["guest_id"] = guest_id
            __props__.__dict__["hardware_version"] = hardware_version
            __props__.__dict__["host_system_id"] = host_system_id
            __props__.__dict__["hv_mode"] = hv_mode
            __props__.__dict__["ide_controller_count"] = ide_controller_count
            __props__.__dict__["ignored_guest_ips"] = ignored_guest_ips
            __props__.__dict__["latency_sensitivity"] = latency_sensitivity
            __props__.__dict__["memory"] = memory
            __props__.__dict__["memory_hot_add_enabled"] = memory_hot_add_enabled
            __props__.__dict__["memory_limit"] = memory_limit
            __props__.__dict__["memory_reservation"] = memory_reservation
            __props__.__dict__["memory_share_count"] = memory_share_count
            __props__.__dict__["memory_share_level"] = memory_share_level
            __props__.__dict__["migrate_wait_timeout"] = migrate_wait_timeout
            __props__.__dict__["name"] = name
            __props__.__dict__["nested_hv_enabled"] = nested_hv_enabled
            __props__.__dict__["network_interfaces"] = network_interfaces
            __props__.__dict__["num_cores_per_socket"] = num_cores_per_socket
            __props__.__dict__["num_cpus"] = num_cpus
            __props__.__dict__["ovf_deploy"] = ovf_deploy
            __props__.__dict__["pci_device_ids"] = pci_device_ids
            __props__.__dict__["poweron_timeout"] = poweron_timeout
            __props__.__dict__["replace_trigger"] = replace_trigger
            if resource_pool_id is None and not opts.urn:
                raise TypeError("Missing required property 'resource_pool_id'")
            __props__.__dict__["resource_pool_id"] = resource_pool_id
            __props__.__dict__["run_tools_scripts_after_power_on"] = run_tools_scripts_after_power_on
            __props__.__dict__["run_tools_scripts_after_resume"] = run_tools_scripts_after_resume
            __props__.__dict__["run_tools_scripts_before_guest_reboot"] = run_tools_scripts_before_guest_reboot
            __props__.__dict__["run_tools_scripts_before_guest_shutdown"] = run_tools_scripts_before_guest_shutdown
            __props__.__dict__["run_tools_scripts_before_guest_standby"] = run_tools_scripts_before_guest_standby
            __props__.__dict__["sata_controller_count"] = sata_controller_count
            __props__.__dict__["scsi_bus_sharing"] = scsi_bus_sharing
            __props__.__dict__["scsi_controller_count"] = scsi_controller_count
            __props__.__dict__["scsi_type"] = scsi_type
            __props__.__dict__["shutdown_wait_timeout"] = shutdown_wait_timeout
            __props__.__dict__["storage_policy_id"] = storage_policy_id
            __props__.__dict__["swap_placement_policy"] = swap_placement_policy
            __props__.__dict__["sync_time_with_host"] = sync_time_with_host
            __props__.__dict__["sync_time_with_host_periodically"] = sync_time_with_host_periodically
            __props__.__dict__["tags"] = tags
            __props__.__dict__["tools_upgrade_policy"] = tools_upgrade_policy
            __props__.__dict__["vapp"] = vapp
            __props__.__dict__["vbs_enabled"] = vbs_enabled
            __props__.__dict__["vvtd_enabled"] = vvtd_enabled
            __props__.__dict__["wait_for_guest_ip_timeout"] = wait_for_guest_ip_timeout
            __props__.__dict__["wait_for_guest_net_routable"] = wait_for_guest_net_routable
            __props__.__dict__["wait_for_guest_net_timeout"] = wait_for_guest_net_timeout
            __props__.__dict__["change_version"] = None
            __props__.__dict__["default_ip_address"] = None
            __props__.__dict__["guest_ip_addresses"] = None
            __props__.__dict__["imported"] = None
            __props__.__dict__["moid"] = None
            __props__.__dict__["power_state"] = None
            __props__.__dict__["reboot_required"] = None
            __props__.__dict__["uuid"] = None
            __props__.__dict__["vapp_transports"] = None
            __props__.__dict__["vmware_tools_status"] = None
            __props__.__dict__["vmx_path"] = None
        super(VirtualMachine, __self__).__init__(
            'vsphere:index/virtualMachine:VirtualMachine',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            alternate_guest_name: Optional[pulumi.Input[str]] = None,
            annotation: Optional[pulumi.Input[str]] = None,
            boot_delay: Optional[pulumi.Input[int]] = None,
            boot_retry_delay: Optional[pulumi.Input[int]] = None,
            boot_retry_enabled: Optional[pulumi.Input[bool]] = None,
            cdroms: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['VirtualMachineCdromArgs']]]]] = None,
            change_version: Optional[pulumi.Input[str]] = None,
            clone: Optional[pulumi.Input[pulumi.InputType['VirtualMachineCloneArgs']]] = None,
            cpu_hot_add_enabled: Optional[pulumi.Input[bool]] = None,
            cpu_hot_remove_enabled: Optional[pulumi.Input[bool]] = None,
            cpu_limit: Optional[pulumi.Input[int]] = None,
            cpu_performance_counters_enabled: Optional[pulumi.Input[bool]] = None,
            cpu_reservation: Optional[pulumi.Input[int]] = None,
            cpu_share_count: Optional[pulumi.Input[int]] = None,
            cpu_share_level: Optional[pulumi.Input[str]] = None,
            custom_attributes: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
            datacenter_id: Optional[pulumi.Input[str]] = None,
            datastore_cluster_id: Optional[pulumi.Input[str]] = None,
            datastore_id: Optional[pulumi.Input[str]] = None,
            default_ip_address: Optional[pulumi.Input[str]] = None,
            disks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['VirtualMachineDiskArgs']]]]] = None,
            efi_secure_boot_enabled: Optional[pulumi.Input[bool]] = None,
            enable_disk_uuid: Optional[pulumi.Input[bool]] = None,
            enable_logging: Optional[pulumi.Input[bool]] = None,
            ept_rvi_mode: Optional[pulumi.Input[str]] = None,
            extra_config: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
            extra_config_reboot_required: Optional[pulumi.Input[bool]] = None,
            firmware: Optional[pulumi.Input[str]] = None,
            folder: Optional[pulumi.Input[str]] = None,
            force_power_off: Optional[pulumi.Input[bool]] = None,
            guest_id: Optional[pulumi.Input[str]] = None,
            guest_ip_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            hardware_version: Optional[pulumi.Input[int]] = None,
            host_system_id: Optional[pulumi.Input[str]] = None,
            hv_mode: Optional[pulumi.Input[str]] = None,
            ide_controller_count: Optional[pulumi.Input[int]] = None,
            ignored_guest_ips: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            imported: Optional[pulumi.Input[bool]] = None,
            latency_sensitivity: Optional[pulumi.Input[str]] = None,
            memory: Optional[pulumi.Input[int]] = None,
            memory_hot_add_enabled: Optional[pulumi.Input[bool]] = None,
            memory_limit: Optional[pulumi.Input[int]] = None,
            memory_reservation: Optional[pulumi.Input[int]] = None,
            memory_share_count: Optional[pulumi.Input[int]] = None,
            memory_share_level: Optional[pulumi.Input[str]] = None,
            migrate_wait_timeout: Optional[pulumi.Input[int]] = None,
            moid: Optional[pulumi.Input[str]] = None,
            name: Optional[pulumi.Input[str]] = None,
            nested_hv_enabled: Optional[pulumi.Input[bool]] = None,
            network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['VirtualMachineNetworkInterfaceArgs']]]]] = None,
            num_cores_per_socket: Optional[pulumi.Input[int]] = None,
            num_cpus: Optional[pulumi.Input[int]] = None,
            ovf_deploy: Optional[pulumi.Input[pulumi.InputType['VirtualMachineOvfDeployArgs']]] = None,
            pci_device_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            power_state: Optional[pulumi.Input[str]] = None,
            poweron_timeout: Optional[pulumi.Input[int]] = None,
            reboot_required: Optional[pulumi.Input[bool]] = None,
            replace_trigger: Optional[pulumi.Input[str]] = None,
            resource_pool_id: Optional[pulumi.Input[str]] = None,
            run_tools_scripts_after_power_on: Optional[pulumi.Input[bool]] = None,
            run_tools_scripts_after_resume: Optional[pulumi.Input[bool]] = None,
            run_tools_scripts_before_guest_reboot: Optional[pulumi.Input[bool]] = None,
            run_tools_scripts_before_guest_shutdown: Optional[pulumi.Input[bool]] = None,
            run_tools_scripts_before_guest_standby: Optional[pulumi.Input[bool]] = None,
            sata_controller_count: Optional[pulumi.Input[int]] = None,
            scsi_bus_sharing: Optional[pulumi.Input[str]] = None,
            scsi_controller_count: Optional[pulumi.Input[int]] = None,
            scsi_type: Optional[pulumi.Input[str]] = None,
            shutdown_wait_timeout: Optional[pulumi.Input[int]] = None,
            storage_policy_id: Optional[pulumi.Input[str]] = None,
            swap_placement_policy: Optional[pulumi.Input[str]] = None,
            sync_time_with_host: Optional[pulumi.Input[bool]] = None,
            sync_time_with_host_periodically: Optional[pulumi.Input[bool]] = None,
            tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            tools_upgrade_policy: Optional[pulumi.Input[str]] = None,
            uuid: Optional[pulumi.Input[str]] = None,
            vapp: Optional[pulumi.Input[pulumi.InputType['VirtualMachineVappArgs']]] = None,
            vapp_transports: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            vbs_enabled: Optional[pulumi.Input[bool]] = None,
            vmware_tools_status: Optional[pulumi.Input[str]] = None,
            vmx_path: Optional[pulumi.Input[str]] = None,
            vvtd_enabled: Optional[pulumi.Input[bool]] = None,
            wait_for_guest_ip_timeout: Optional[pulumi.Input[int]] = None,
            wait_for_guest_net_routable: Optional[pulumi.Input[bool]] = None,
            wait_for_guest_net_timeout: Optional[pulumi.Input[int]] = 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[str] alternate_guest_name: The guest name for the operating system when `guest_id` is `otherGuest` or `otherGuest64`.
        :param pulumi.Input[str] annotation: A user-provided description of the virtual machine.
        :param pulumi.Input[int] boot_delay: The number of milliseconds to wait before starting the boot sequence. The default is no delay.
        :param pulumi.Input[int] boot_retry_delay: The number of milliseconds to wait before retrying the boot sequence. This option is only valid if `boot_retry_enabled` is `true`. Default: `10000` (10 seconds).
        :param pulumi.Input[bool] boot_retry_enabled: If set to `true`, a virtual machine that fails to boot will try again after the delay defined in `boot_retry_delay`. Default: `false`.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['VirtualMachineCdromArgs']]]] cdroms: A specification for a CD-ROM device on the virtual machine. See CD-ROM options for more information.
        :param pulumi.Input[str] change_version: A unique identifier for a given version of the last configuration was applied.
        :param pulumi.Input[pulumi.InputType['VirtualMachineCloneArgs']] clone: When specified, the virtual machine will be created as a clone of a specified template. Optional customization options can be submitted for the resource. See creating a virtual machine from a template for more information.
        :param pulumi.Input[bool] cpu_hot_add_enabled: Allow CPUs to be added to the virtual machine while it is powered on.
        :param pulumi.Input[bool] cpu_hot_remove_enabled: Allow CPUs to be removed to the virtual machine while it is powered on.
        :param pulumi.Input[int] cpu_limit: The maximum amount of CPU (in MHz) that the virtual machine can consume, regardless of available resources. The default is no limit.
        :param pulumi.Input[bool] cpu_performance_counters_enabled: Enable CPU performance counters on the virtual machine. Default: `false`.
        :param pulumi.Input[int] cpu_reservation: The amount of CPU (in MHz) that the virtual machine is guaranteed. The default is no reservation.
        :param pulumi.Input[int] cpu_share_count: The number of CPU shares allocated to the virtual machine when the `cpu_share_level` is `custom`.
        :param pulumi.Input[str] cpu_share_level: The allocation level for the virtual machine CPU resources. One of `high`, `low`, `normal`, or `custom`. Default: `custom`.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] custom_attributes: Map of custom attribute ids to attribute value strings to set for virtual machine. Please refer to the `vsphere_custom_attributes` resource for more information on setting custom attributes.
               
               > **NOTE:** Custom attributes requires vCenter Server and is not supported on direct ESXi host connections.
        :param pulumi.Input[str] datacenter_id: The datacenter ID. Required only when deploying an OVF/OVA template.
        :param pulumi.Input[str] datastore_cluster_id: The managed object reference ID of the datastore cluster in which to place the virtual machine. This setting applies to entire virtual machine and implies that you wish to use vSphere Storage DRS with the virtual machine. See the section on virtual machine migration for more information on modifying this value.
               
               > **NOTE:** One of `datastore_id` or `datastore_cluster_id` must be specified.
               
               > **NOTE:** Use of `datastore_cluster_id` requires vSphere Storage DRS to be enabled on the specified datastore cluster.
               
               > **NOTE:** The `datastore_cluster_id` setting applies to the entire virtual machine resource. You cannot assign individual individual disks to datastore clusters. In addition, you cannot use the `attach` setting to attach external disks on virtual machines that are assigned to datastore clusters.
        :param pulumi.Input[str] datastore_id: The managed object reference ID of the datastore in which to place the virtual machine. The virtual machine configuration files is placed here, along with any virtual disks that are created where a datastore is not explicitly specified. See the section on virtual machine migration for more information on modifying this value.
               
               > **NOTE:** Datastores cannot be assigned to individual disks when `datastore_cluster_id` is used.
        :param pulumi.Input[str] default_ip_address: The IP address selected by the provider to be used with any provisioners configured on this resource. When possible, this is the first IPv4 address that is reachable through the default gateway configured on the machine, then the first reachable IPv6 address, and then the first general discovered address if neither exists. If  VMware Tools is not running on the virtual machine, or if the virtual machine is powered off, this value will be blank.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['VirtualMachineDiskArgs']]]] disks: A specification for a virtual disk device on the virtual machine. See disk options for more information.
        :param pulumi.Input[bool] efi_secure_boot_enabled: Use this option to enable EFI secure boot when the `firmware` type is set to is `efi`. Default: `false`.
               
               > **NOTE:** EFI secure boot is only available on vSphere 6.5 and later.
        :param pulumi.Input[bool] enable_disk_uuid: Expose the UUIDs of attached virtual disks to the virtual machine, allowing access to them in the guest. Default: `false`.
        :param pulumi.Input[bool] enable_logging: Enable logging of virtual machine events to a log file stored in the virtual machine directory. Default: `false`.
        :param pulumi.Input[str] ept_rvi_mode: The EPT/RVI (hardware memory virtualization) setting for the virtual machine. One of `automatic`, `on`, or `off`. Default: `automatic`.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] extra_config: Extra configuration data for the virtual machine. Can be used to supply advanced parameters not normally in configuration, such as instance metadata and userdata.
               
               > **NOTE:** Do not use `extra_config` when working with a template imported from OVF/OVA as your settings may be ignored. Use the `vapp` block `properties` section as described in Using vApp Properties for OVF/OVA Configuration.
        :param pulumi.Input[bool] extra_config_reboot_required: Allow the virtual machine to be rebooted when a change to `extra_config` occurs. Default: `true`.
        :param pulumi.Input[str] firmware: The firmware for the virtual machine. One of `bios` or `efi`.
        :param pulumi.Input[str] folder: The path to the virtual machine folder in which to place the virtual machine, relative to the datacenter path (`/<datacenter-name>/vm`).  For example, `/dc-01/vm/foo`
        :param pulumi.Input[bool] force_power_off: If a guest shutdown failed or times out while updating or destroying (see `shutdown_wait_timeout`), force the power-off of the virtual machine. Default: `true`.
        :param pulumi.Input[str] guest_id: The guest ID for the operating system type. For a full list of possible values, see [here][vmware-docs-guest-ids]. Default: `otherGuest64`.
               
               [vmware-docs-guest-ids]: https://vdc-download.vmware.com/vmwb-repository/dcr-public/b50dcbbf-051d-4204-a3e7-e1b618c1e384/538cf2ec-b34f-4bae-a332-3820ef9e7773/vim.vm.GuestOsDescriptor.GuestOsIdentifier.html
        :param pulumi.Input[Sequence[pulumi.Input[str]]] guest_ip_addresses: The current list of IP addresses on this machine, including the value of `default_ip_address`. If VMware Tools is not running on the virtual machine, or if the virtul machine is powered off, this list will be empty.
        :param pulumi.Input[int] hardware_version: The hardware version number. Valid range is from 4 to 19. The hardware version cannot be downgraded. See [virtual machine hardware compatibility][virtual-machine-hardware-compatibility] for more information.
               
               [virtual-machine-hardware-compatibility]: https://kb.vmware.com/s/article/2007240
        :param pulumi.Input[str] host_system_id: The managed object reference ID of a host on which to place the virtual machine. See the section on virtual machine migration for more information on modifying this value. When using a vSphere cluster, if a `host_system_id` is not supplied, vSphere will select a host in the cluster to place the virtual machine, according to any defaults or vSphere DRS placement policies.
        :param pulumi.Input[str] hv_mode: The hardware virtualization (non-nested) setting for the virtual machine. One of `hvAuto`, `hvOn`, or `hvOff`. Default: `hvAuto`.
        :param pulumi.Input[int] ide_controller_count: The number of IDE controllers that the virtual machine. This directly affects the number of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers. Default: `2`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ignored_guest_ips: List of IP addresses and CIDR networks to ignore while waiting for an available IP address using either of the waiters. Any IP addresses in this list will be ignored so that the waiter will continue to wait for a valid IP address. Default: `[]`.
        :param pulumi.Input[bool] imported: Indicates if the virtual machine resource has been imported, or if the state has been migrated from a previous version of the resource. It influences the behavior of the first post-import apply operation. See the section on importing below.
        :param pulumi.Input[str] latency_sensitivity: Controls the scheduling delay of the virtual machine. Use a higher sensitivity for applications that require lower latency, such as VOIP, media player applications, or applications that require frequent access to mouse or keyboard devices. One of `low`, `normal`, `medium`, or `high`.
               
               > **NOTE:** On higher sensitivities, you may need to adjust the `memory_reservation` to the full amount of memory provisioned for the virtual machine.
        :param pulumi.Input[int] memory: The memory size to assign to the virtual machine, in MB. Default: `1024` (1 GB).
        :param pulumi.Input[bool] memory_hot_add_enabled: Allow memory to be added to the virtual machine while it is powered on.
               
               > **NOTE:** CPU and memory hot add options are not available on all guest operating systems. Please refer to the [VMware Guest OS Compatibility Guide][vmware-docs-compat-guide] to which settings are allow for your guest operating system. In addition, at least one `pulumi up` must be run before you are able to use CPU and memory hot add.
               
               [vmware-docs-compat-guide]: http://partnerweb.vmware.com/comp_guide2/pdf/VMware_GOS_Compatibility_Guide.pdf
               
               > **NOTE:** For Linux 64-bit guest operating systems with less than or equal to 3GB, the virtual machine must powered off to add memory beyond 3GB. Subsequent hot add of memory does not require the virtual machine to be powered-off to apply the plan. Please refer to [VMware KB 2008405][vmware-kb-2008405].
               
               [vmware-kb-2008405]: https://kb.vmware.com/s/article/2008405
        :param pulumi.Input[int] memory_limit: The maximum amount of memory (in MB) that th virtual machine can consume, regardless of available resources. The default is no limit.
        :param pulumi.Input[int] memory_reservation: The amount of memory (in MB) that the virtual machine is guaranteed. The default is no reservation.
        :param pulumi.Input[int] memory_share_count: The number of memory shares allocated to the virtual machine when the `memory_share_level` is `custom`.
        :param pulumi.Input[str] memory_share_level: The allocation level for the virtual machine memory resources. One of `high`, `low`, `normal`, or `custom`. Default: `custom`.
        :param pulumi.Input[int] migrate_wait_timeout: The amount of time, in minutes, to wait for a virtual machine migration to complete before failing. Default: `10` minutes. See the section on virtual machine migration for more information.
        :param pulumi.Input[str] moid: The managed object reference ID of the created virtual machine.
        :param pulumi.Input[str] name: The name of the virtual machine.
        :param pulumi.Input[bool] nested_hv_enabled: Enable nested hardware virtualization on the virtual machine, facilitating nested virtualization in the guest operating system. Default: `false`.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['VirtualMachineNetworkInterfaceArgs']]]] network_interfaces: A specification for a virtual NIC on the virtual machine. See network interface options for more information.
        :param pulumi.Input[int] num_cores_per_socket: The number of cores per socket in the virtual machine. The number of vCPUs on the virtual machine will be `num_cpus` divided by `num_cores_per_socket`. If specified, the value supplied to `num_cpus` must be evenly divisible by this value. Default: `1`.
        :param pulumi.Input[int] num_cpus: The total number of virtual processor cores to assign to the virtual machine. Default: `1`.
        :param pulumi.Input[pulumi.InputType['VirtualMachineOvfDeployArgs']] ovf_deploy: When specified, the virtual machine will be deployed from the provided OVF/OVA template. See creating a virtual machine from an OVF/OVA template for more information.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] pci_device_ids: List of host PCI device IDs in which to create PCI passthroughs.
               
               > **NOTE:** Cloning requires vCenter Server and is not supported on direct ESXi host connections.
        :param pulumi.Input[str] power_state: A computed value for the current power state of the virtual machine. One of `on`, `off`, or `suspended`.
        :param pulumi.Input[int] poweron_timeout: The amount of time, in seconds, that we will be trying to power on a VM
        :param pulumi.Input[bool] reboot_required: Value internal to Terraform used to determine if a configuration set change requires a reboot.
        :param pulumi.Input[str] replace_trigger: Triggers replacement of resource whenever it changes.
               
               For example, `replace_trigger = sha256(format("%s-%s",data.template_file.cloud_init_metadata.rendered,data.template_file.cloud_init_userdata.rendered))` will fingerprint the changes in cloud-init metadata and userdata templates. This will enable a replacement of the resource whenever the dependant template renders a new configuration. (Forces a replacement.)
        :param pulumi.Input[str] resource_pool_id: The managed object reference ID of the resource pool in which to place the virtual machine. See the Virtual Machine Migration section for more information on modifying this value.
               
               > **NOTE:** All clusters and standalone hosts have a default root resource pool. This resource argument does not directly accept the cluster or standalone host resource. For more information, see the section on specifying the Root Resource Pool in the `ResourcePool` data source documentation on using the root resource pool.
        :param pulumi.Input[bool] run_tools_scripts_after_power_on: Enable post-power-on scripts to run when VMware Tools is installed. Default: `true`.
        :param pulumi.Input[bool] run_tools_scripts_after_resume: Enable ost-resume scripts to run when VMware Tools is installed. Default: `true`.
        :param pulumi.Input[bool] run_tools_scripts_before_guest_reboot: Enable pre-reboot scripts to run when VMware Tools is installed. Default: `false`.
        :param pulumi.Input[bool] run_tools_scripts_before_guest_shutdown: Enable pre-shutdown scripts to run when VMware Tools is installed. Default: `true`.
        :param pulumi.Input[bool] run_tools_scripts_before_guest_standby: Enable pre-standby scripts to run when VMware Tools is installed. Default: `true`.
        :param pulumi.Input[int] sata_controller_count: The number of SATA controllers that Terraform manages on this virtual machine. This directly affects the amount of disks
               you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove
               controllers.
        :param pulumi.Input[str] scsi_bus_sharing: The type of SCSI bus sharing for the virtual machine SCSI controller. One of `physicalSharing`, `virtualSharing`, and `noSharing`. Default: `noSharing`.
        :param pulumi.Input[int] scsi_controller_count: The number of SCSI controllers that Terraform manages on this virtual machine. This directly affects the amount of disks
               you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove
               controllers.
        :param pulumi.Input[str] scsi_type: The SCSI controller type for the virtual machine. One of `lsilogic` (LSI Logic Parallel), `lsilogic-sas` (LSI Logic SAS) or `pvscsi` (VMware Paravirtual). Default: `pvscsi`.
        :param pulumi.Input[int] shutdown_wait_timeout: The amount of time, in minutes, to wait for a graceful guest shutdown when making necessary updates to the virtual machine. If `force_power_off` is set to `true`, the virtual machine will be forced to power-off after the timeout, otherwise an error is returned. Default: `3` minutes.
        :param pulumi.Input[str] storage_policy_id: The ID of the storage policy to assign to the home directory of a virtual machine.
        :param pulumi.Input[str] swap_placement_policy: The swap file placement policy for the virtual machine. One of `inherit`, `hostLocal`, or `vmDirectory`. Default: `inherit`.
        :param pulumi.Input[bool] sync_time_with_host: Enable the guest operating system to synchronization its clock with the host when the virtual machine is powered on or resumed. Requires vSphere 7.0 Update 1 and later. Requires VMware Tools to be installed. Default: `false`.
        :param pulumi.Input[bool] sync_time_with_host_periodically: Enable the guest operating system to periodically synchronize its clock with the host. Requires vSphere 7.0 Update 1 and later. On previous versions, setting `sync_time_with_host` is will enable periodic synchronization. Requires VMware Tools to be installed. Default: `false`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: The IDs of any tags to attach to this resource. Please refer to the `Tag` resource for more information on applying tags to virtual machine resources.
               
               > **NOTE:** Tagging support is unsupported on direct ESXi host connections and requires vCenter Server instance.
        :param pulumi.Input[str] tools_upgrade_policy: Enable automatic upgrade of the VMware Tools version when the virtual machine is rebooted. If necessary, VMware Tools is upgraded to the latest version supported by the host on which the virtual machine is running. Requires VMware Tools to be installed. One of `manual` or `upgradeAtPowerCycle`. Default: `manual`.
        :param pulumi.Input[str] uuid: The UUID of the virtual disk VMDK file. This is used to track the virtual disk on the virtual machine.
        :param pulumi.Input[pulumi.InputType['VirtualMachineVappArgs']] vapp: Used for vApp configurations. The only sub-key available is `properties`, which is a key/value map of properties for virtual machines imported from and OVF/OVA. See Using vApp Properties for OVF/OVA Configuration for more information.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] vapp_transports: Computed value which is only valid for cloned virtual machines. A list of vApp transport methods supported by the source virtual machine or template.
        :param pulumi.Input[bool] vbs_enabled: Enable Virtualization Based Security. Requires `firmware` to be `efi`. In addition, `vvtd_enabled`, `nested_hv_enabled`, and `efi_secure_boot_enabled` must all have a value of `true`. Supported on vSphere 6.7 and later. Default: `false`.
        :param pulumi.Input[str] vmware_tools_status: The state of  VMware Tools in the guest. This will determine the proper course of action for some device operations.
        :param pulumi.Input[str] vmx_path: The path of the virtual machine configuration file on the datastore in which the virtual machine is placed.
        :param pulumi.Input[bool] vvtd_enabled: Enable Intel Virtualization Technology for Directed I/O for the virtual machine (_I/O MMU_ in the vSphere Client). Supported on vSphere 6.7 and later. Default: `false`.
        :param pulumi.Input[int] wait_for_guest_ip_timeout: The amount of time, in minutes, to wait for an available guest IP address on the virtual machine. This should only be used if the version VMware Tools does not allow the `wait_for_guest_net_timeout` waiter to be used. A value less than `1` disables the waiter. Default: `0`.
        :param pulumi.Input[bool] wait_for_guest_net_routable: Controls whether or not the guest network waiter waits for a routable address. When `false`, the waiter does not wait for a default gateway, nor are IP addresses checked against any discovered default gateways as part of its success criteria. This property is ignored if the `wait_for_guest_ip_timeout` waiter is used. Default: `true`.
        :param pulumi.Input[int] wait_for_guest_net_timeout: The amount of time, in minutes, to wait for an available guest IP address on the virtual machine. Older versions of VMware Tools do not populate this property. In those cases, this waiter can be disabled and the `wait_for_guest_ip_timeout` waiter can be used instead. A value less than `1` disables the waiter. Default: `5` minutes.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _VirtualMachineState.__new__(_VirtualMachineState)

        __props__.__dict__["alternate_guest_name"] = alternate_guest_name
        __props__.__dict__["annotation"] = annotation
        __props__.__dict__["boot_delay"] = boot_delay
        __props__.__dict__["boot_retry_delay"] = boot_retry_delay
        __props__.__dict__["boot_retry_enabled"] = boot_retry_enabled
        __props__.__dict__["cdroms"] = cdroms
        __props__.__dict__["change_version"] = change_version
        __props__.__dict__["clone"] = clone
        __props__.__dict__["cpu_hot_add_enabled"] = cpu_hot_add_enabled
        __props__.__dict__["cpu_hot_remove_enabled"] = cpu_hot_remove_enabled
        __props__.__dict__["cpu_limit"] = cpu_limit
        __props__.__dict__["cpu_performance_counters_enabled"] = cpu_performance_counters_enabled
        __props__.__dict__["cpu_reservation"] = cpu_reservation
        __props__.__dict__["cpu_share_count"] = cpu_share_count
        __props__.__dict__["cpu_share_level"] = cpu_share_level
        __props__.__dict__["custom_attributes"] = custom_attributes
        __props__.__dict__["datacenter_id"] = datacenter_id
        __props__.__dict__["datastore_cluster_id"] = datastore_cluster_id
        __props__.__dict__["datastore_id"] = datastore_id
        __props__.__dict__["default_ip_address"] = default_ip_address
        __props__.__dict__["disks"] = disks
        __props__.__dict__["efi_secure_boot_enabled"] = efi_secure_boot_enabled
        __props__.__dict__["enable_disk_uuid"] = enable_disk_uuid
        __props__.__dict__["enable_logging"] = enable_logging
        __props__.__dict__["ept_rvi_mode"] = ept_rvi_mode
        __props__.__dict__["extra_config"] = extra_config
        __props__.__dict__["extra_config_reboot_required"] = extra_config_reboot_required
        __props__.__dict__["firmware"] = firmware
        __props__.__dict__["folder"] = folder
        __props__.__dict__["force_power_off"] = force_power_off
        __props__.__dict__["guest_id"] = guest_id
        __props__.__dict__["guest_ip_addresses"] = guest_ip_addresses
        __props__.__dict__["hardware_version"] = hardware_version
        __props__.__dict__["host_system_id"] = host_system_id
        __props__.__dict__["hv_mode"] = hv_mode
        __props__.__dict__["ide_controller_count"] = ide_controller_count
        __props__.__dict__["ignored_guest_ips"] = ignored_guest_ips
        __props__.__dict__["imported"] = imported
        __props__.__dict__["latency_sensitivity"] = latency_sensitivity
        __props__.__dict__["memory"] = memory
        __props__.__dict__["memory_hot_add_enabled"] = memory_hot_add_enabled
        __props__.__dict__["memory_limit"] = memory_limit
        __props__.__dict__["memory_reservation"] = memory_reservation
        __props__.__dict__["memory_share_count"] = memory_share_count
        __props__.__dict__["memory_share_level"] = memory_share_level
        __props__.__dict__["migrate_wait_timeout"] = migrate_wait_timeout
        __props__.__dict__["moid"] = moid
        __props__.__dict__["name"] = name
        __props__.__dict__["nested_hv_enabled"] = nested_hv_enabled
        __props__.__dict__["network_interfaces"] = network_interfaces
        __props__.__dict__["num_cores_per_socket"] = num_cores_per_socket
        __props__.__dict__["num_cpus"] = num_cpus
        __props__.__dict__["ovf_deploy"] = ovf_deploy
        __props__.__dict__["pci_device_ids"] = pci_device_ids
        __props__.__dict__["power_state"] = power_state
        __props__.__dict__["poweron_timeout"] = poweron_timeout
        __props__.__dict__["reboot_required"] = reboot_required
        __props__.__dict__["replace_trigger"] = replace_trigger
        __props__.__dict__["resource_pool_id"] = resource_pool_id
        __props__.__dict__["run_tools_scripts_after_power_on"] = run_tools_scripts_after_power_on
        __props__.__dict__["run_tools_scripts_after_resume"] = run_tools_scripts_after_resume
        __props__.__dict__["run_tools_scripts_before_guest_reboot"] = run_tools_scripts_before_guest_reboot
        __props__.__dict__["run_tools_scripts_before_guest_shutdown"] = run_tools_scripts_before_guest_shutdown
        __props__.__dict__["run_tools_scripts_before_guest_standby"] = run_tools_scripts_before_guest_standby
        __props__.__dict__["sata_controller_count"] = sata_controller_count
        __props__.__dict__["scsi_bus_sharing"] = scsi_bus_sharing
        __props__.__dict__["scsi_controller_count"] = scsi_controller_count
        __props__.__dict__["scsi_type"] = scsi_type
        __props__.__dict__["shutdown_wait_timeout"] = shutdown_wait_timeout
        __props__.__dict__["storage_policy_id"] = storage_policy_id
        __props__.__dict__["swap_placement_policy"] = swap_placement_policy
        __props__.__dict__["sync_time_with_host"] = sync_time_with_host
        __props__.__dict__["sync_time_with_host_periodically"] = sync_time_with_host_periodically
        __props__.__dict__["tags"] = tags
        __props__.__dict__["tools_upgrade_policy"] = tools_upgrade_policy
        __props__.__dict__["uuid"] = uuid
        __props__.__dict__["vapp"] = vapp
        __props__.__dict__["vapp_transports"] = vapp_transports
        __props__.__dict__["vbs_enabled"] = vbs_enabled
        __props__.__dict__["vmware_tools_status"] = vmware_tools_status
        __props__.__dict__["vmx_path"] = vmx_path
        __props__.__dict__["vvtd_enabled"] = vvtd_enabled
        __props__.__dict__["wait_for_guest_ip_timeout"] = wait_for_guest_ip_timeout
        __props__.__dict__["wait_for_guest_net_routable"] = wait_for_guest_net_routable
        __props__.__dict__["wait_for_guest_net_timeout"] = wait_for_guest_net_timeout
        return VirtualMachine(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="alternateGuestName")
    def alternate_guest_name(self) -> pulumi.Output[Optional[str]]:
        """
        The guest name for the operating system when `guest_id` is `otherGuest` or `otherGuest64`.
        """
        return pulumi.get(self, "alternate_guest_name")

    @property
    @pulumi.getter
    def annotation(self) -> pulumi.Output[str]:
        """
        A user-provided description of the virtual machine.
        """
        return pulumi.get(self, "annotation")

    @property
    @pulumi.getter(name="bootDelay")
    def boot_delay(self) -> pulumi.Output[Optional[int]]:
        """
        The number of milliseconds to wait before starting the boot sequence. The default is no delay.
        """
        return pulumi.get(self, "boot_delay")

    @property
    @pulumi.getter(name="bootRetryDelay")
    def boot_retry_delay(self) -> pulumi.Output[Optional[int]]:
        """
        The number of milliseconds to wait before retrying the boot sequence. This option is only valid if `boot_retry_enabled` is `true`. Default: `10000` (10 seconds).
        """
        return pulumi.get(self, "boot_retry_delay")

    @property
    @pulumi.getter(name="bootRetryEnabled")
    def boot_retry_enabled(self) -> pulumi.Output[Optional[bool]]:
        """
        If set to `true`, a virtual machine that fails to boot will try again after the delay defined in `boot_retry_delay`. Default: `false`.
        """
        return pulumi.get(self, "boot_retry_enabled")

    @property
    @pulumi.getter
    def cdroms(self) -> pulumi.Output[Optional[Sequence['outputs.VirtualMachineCdrom']]]:
        """
        A specification for a CD-ROM device on the virtual machine. See CD-ROM options for more information.
        """
        return pulumi.get(self, "cdroms")

    @property
    @pulumi.getter(name="changeVersion")
    def change_version(self) -> pulumi.Output[str]:
        """
        A unique identifier for a given version of the last configuration was applied.
        """
        return pulumi.get(self, "change_version")

    @property
    @pulumi.getter
    def clone(self) -> pulumi.Output[Optional['outputs.VirtualMachineClone']]:
        """
        When specified, the virtual machine will be created as a clone of a specified template. Optional customization options can be submitted for the resource. See creating a virtual machine from a template for more information.
        """
        return pulumi.get(self, "clone")

    @property
    @pulumi.getter(name="cpuHotAddEnabled")
    def cpu_hot_add_enabled(self) -> pulumi.Output[Optional[bool]]:
        """
        Allow CPUs to be added to the virtual machine while it is powered on.
        """
        return pulumi.get(self, "cpu_hot_add_enabled")

    @property
    @pulumi.getter(name="cpuHotRemoveEnabled")
    def cpu_hot_remove_enabled(self) -> pulumi.Output[Optional[bool]]:
        """
        Allow CPUs to be removed to the virtual machine while it is powered on.
        """
        return pulumi.get(self, "cpu_hot_remove_enabled")

    @property
    @pulumi.getter(name="cpuLimit")
    def cpu_limit(self) -> pulumi.Output[Optional[int]]:
        """
        The maximum amount of CPU (in MHz) that the virtual machine can consume, regardless of available resources. The default is no limit.
        """
        return pulumi.get(self, "cpu_limit")

    @property
    @pulumi.getter(name="cpuPerformanceCountersEnabled")
    def cpu_performance_counters_enabled(self) -> pulumi.Output[Optional[bool]]:
        """
        Enable CPU performance counters on the virtual machine. Default: `false`.
        """
        return pulumi.get(self, "cpu_performance_counters_enabled")

    @property
    @pulumi.getter(name="cpuReservation")
    def cpu_reservation(self) -> pulumi.Output[Optional[int]]:
        """
        The amount of CPU (in MHz) that the virtual machine is guaranteed. The default is no reservation.
        """
        return pulumi.get(self, "cpu_reservation")

    @property
    @pulumi.getter(name="cpuShareCount")
    def cpu_share_count(self) -> pulumi.Output[int]:
        """
        The number of CPU shares allocated to the virtual machine when the `cpu_share_level` is `custom`.
        """
        return pulumi.get(self, "cpu_share_count")

    @property
    @pulumi.getter(name="cpuShareLevel")
    def cpu_share_level(self) -> pulumi.Output[Optional[str]]:
        """
        The allocation level for the virtual machine CPU resources. One of `high`, `low`, `normal`, or `custom`. Default: `custom`.
        """
        return pulumi.get(self, "cpu_share_level")

    @property
    @pulumi.getter(name="customAttributes")
    def custom_attributes(self) -> pulumi.Output[Optional[Mapping[str, str]]]:
        """
        Map of custom attribute ids to attribute value strings to set for virtual machine. Please refer to the `vsphere_custom_attributes` resource for more information on setting custom attributes.

        > **NOTE:** Custom attributes requires vCenter Server and is not supported on direct ESXi host connections.
        """
        return pulumi.get(self, "custom_attributes")

    @property
    @pulumi.getter(name="datacenterId")
    def datacenter_id(self) -> pulumi.Output[Optional[str]]:
        """
        The datacenter ID. Required only when deploying an OVF/OVA template.
        """
        return pulumi.get(self, "datacenter_id")

    @property
    @pulumi.getter(name="datastoreClusterId")
    def datastore_cluster_id(self) -> pulumi.Output[Optional[str]]:
        """
        The managed object reference ID of the datastore cluster in which to place the virtual machine. This setting applies to entire virtual machine and implies that you wish to use vSphere Storage DRS with the virtual machine. See the section on virtual machine migration for more information on modifying this value.

        > **NOTE:** One of `datastore_id` or `datastore_cluster_id` must be specified.

        > **NOTE:** Use of `datastore_cluster_id` requires vSphere Storage DRS to be enabled on the specified datastore cluster.

        > **NOTE:** The `datastore_cluster_id` setting applies to the entire virtual machine resource. You cannot assign individual individual disks to datastore clusters. In addition, you cannot use the `attach` setting to attach external disks on virtual machines that are assigned to datastore clusters.
        """
        return pulumi.get(self, "datastore_cluster_id")

    @property
    @pulumi.getter(name="datastoreId")
    def datastore_id(self) -> pulumi.Output[str]:
        """
        The managed object reference ID of the datastore in which to place the virtual machine. The virtual machine configuration files is placed here, along with any virtual disks that are created where a datastore is not explicitly specified. See the section on virtual machine migration for more information on modifying this value.

        > **NOTE:** Datastores cannot be assigned to individual disks when `datastore_cluster_id` is used.
        """
        return pulumi.get(self, "datastore_id")

    @property
    @pulumi.getter(name="defaultIpAddress")
    def default_ip_address(self) -> pulumi.Output[str]:
        """
        The IP address selected by the provider to be used with any provisioners configured on this resource. When possible, this is the first IPv4 address that is reachable through the default gateway configured on the machine, then the first reachable IPv6 address, and then the first general discovered address if neither exists. If  VMware Tools is not running on the virtual machine, or if the virtual machine is powered off, this value will be blank.
        """
        return pulumi.get(self, "default_ip_address")

    @property
    @pulumi.getter
    def disks(self) -> pulumi.Output[Sequence['outputs.VirtualMachineDisk']]:
        """
        A specification for a virtual disk device on the virtual machine. See disk options for more information.
        """
        return pulumi.get(self, "disks")

    @property
    @pulumi.getter(name="efiSecureBootEnabled")
    def efi_secure_boot_enabled(self) -> pulumi.Output[Optional[bool]]:
        """
        Use this option to enable EFI secure boot when the `firmware` type is set to is `efi`. Default: `false`.

        > **NOTE:** EFI secure boot is only available on vSphere 6.5 and later.
        """
        return pulumi.get(self, "efi_secure_boot_enabled")

    @property
    @pulumi.getter(name="enableDiskUuid")
    def enable_disk_uuid(self) -> pulumi.Output[Optional[bool]]:
        """
        Expose the UUIDs of attached virtual disks to the virtual machine, allowing access to them in the guest. Default: `false`.
        """
        return pulumi.get(self, "enable_disk_uuid")

    @property
    @pulumi.getter(name="enableLogging")
    def enable_logging(self) -> pulumi.Output[Optional[bool]]:
        """
        Enable logging of virtual machine events to a log file stored in the virtual machine directory. Default: `false`.
        """
        return pulumi.get(self, "enable_logging")

    @property
    @pulumi.getter(name="eptRviMode")
    def ept_rvi_mode(self) -> pulumi.Output[Optional[str]]:
        """
        The EPT/RVI (hardware memory virtualization) setting for the virtual machine. One of `automatic`, `on`, or `off`. Default: `automatic`.
        """
        return pulumi.get(self, "ept_rvi_mode")

    @property
    @pulumi.getter(name="extraConfig")
    def extra_config(self) -> pulumi.Output[Optional[Mapping[str, str]]]:
        """
        Extra configuration data for the virtual machine. Can be used to supply advanced parameters not normally in configuration, such as instance metadata and userdata.

        > **NOTE:** Do not use `extra_config` when working with a template imported from OVF/OVA as your settings may be ignored. Use the `vapp` block `properties` section as described in Using vApp Properties for OVF/OVA Configuration.
        """
        return pulumi.get(self, "extra_config")

    @property
    @pulumi.getter(name="extraConfigRebootRequired")
    def extra_config_reboot_required(self) -> pulumi.Output[Optional[bool]]:
        """
        Allow the virtual machine to be rebooted when a change to `extra_config` occurs. Default: `true`.
        """
        return pulumi.get(self, "extra_config_reboot_required")

    @property
    @pulumi.getter
    def firmware(self) -> pulumi.Output[Optional[str]]:
        """
        The firmware for the virtual machine. One of `bios` or `efi`.
        """
        return pulumi.get(self, "firmware")

    @property
    @pulumi.getter
    def folder(self) -> pulumi.Output[Optional[str]]:
        """
        The path to the virtual machine folder in which to place the virtual machine, relative to the datacenter path (`/<datacenter-name>/vm`).  For example, `/dc-01/vm/foo`
        """
        return pulumi.get(self, "folder")

    @property
    @pulumi.getter(name="forcePowerOff")
    def force_power_off(self) -> pulumi.Output[Optional[bool]]:
        """
        If a guest shutdown failed or times out while updating or destroying (see `shutdown_wait_timeout`), force the power-off of the virtual machine. Default: `true`.
        """
        return pulumi.get(self, "force_power_off")

    @property
    @pulumi.getter(name="guestId")
    def guest_id(self) -> pulumi.Output[str]:
        """
        The guest ID for the operating system type. For a full list of possible values, see [here][vmware-docs-guest-ids]. Default: `otherGuest64`.

        [vmware-docs-guest-ids]: https://vdc-download.vmware.com/vmwb-repository/dcr-public/b50dcbbf-051d-4204-a3e7-e1b618c1e384/538cf2ec-b34f-4bae-a332-3820ef9e7773/vim.vm.GuestOsDescriptor.GuestOsIdentifier.html
        """
        return pulumi.get(self, "guest_id")

    @property
    @pulumi.getter(name="guestIpAddresses")
    def guest_ip_addresses(self) -> pulumi.Output[Sequence[str]]:
        """
        The current list of IP addresses on this machine, including the value of `default_ip_address`. If VMware Tools is not running on the virtual machine, or if the virtul machine is powered off, this list will be empty.
        """
        return pulumi.get(self, "guest_ip_addresses")

    @property
    @pulumi.getter(name="hardwareVersion")
    def hardware_version(self) -> pulumi.Output[int]:
        """
        The hardware version number. Valid range is from 4 to 19. The hardware version cannot be downgraded. See [virtual machine hardware compatibility][virtual-machine-hardware-compatibility] for more information.

        [virtual-machine-hardware-compatibility]: https://kb.vmware.com/s/article/2007240
        """
        return pulumi.get(self, "hardware_version")

    @property
    @pulumi.getter(name="hostSystemId")
    def host_system_id(self) -> pulumi.Output[str]:
        """
        The managed object reference ID of a host on which to place the virtual machine. See the section on virtual machine migration for more information on modifying this value. When using a vSphere cluster, if a `host_system_id` is not supplied, vSphere will select a host in the cluster to place the virtual machine, according to any defaults or vSphere DRS placement policies.
        """
        return pulumi.get(self, "host_system_id")

    @property
    @pulumi.getter(name="hvMode")
    def hv_mode(self) -> pulumi.Output[Optional[str]]:
        """
        The hardware virtualization (non-nested) setting for the virtual machine. One of `hvAuto`, `hvOn`, or `hvOff`. Default: `hvAuto`.
        """
        return pulumi.get(self, "hv_mode")

    @property
    @pulumi.getter(name="ideControllerCount")
    def ide_controller_count(self) -> pulumi.Output[Optional[int]]:
        """
        The number of IDE controllers that the virtual machine. This directly affects the number of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers. Default: `2`.
        """
        return pulumi.get(self, "ide_controller_count")

    @property
    @pulumi.getter(name="ignoredGuestIps")
    def ignored_guest_ips(self) -> pulumi.Output[Optional[Sequence[str]]]:
        """
        List of IP addresses and CIDR networks to ignore while waiting for an available IP address using either of the waiters. Any IP addresses in this list will be ignored so that the waiter will continue to wait for a valid IP address. Default: `[]`.
        """
        return pulumi.get(self, "ignored_guest_ips")

    @property
    @pulumi.getter
    def imported(self) -> pulumi.Output[bool]:
        """
        Indicates if the virtual machine resource has been imported, or if the state has been migrated from a previous version of the resource. It influences the behavior of the first post-import apply operation. See the section on importing below.
        """
        return pulumi.get(self, "imported")

    @property
    @pulumi.getter(name="latencySensitivity")
    def latency_sensitivity(self) -> pulumi.Output[Optional[str]]:
        """
        Controls the scheduling delay of the virtual machine. Use a higher sensitivity for applications that require lower latency, such as VOIP, media player applications, or applications that require frequent access to mouse or keyboard devices. One of `low`, `normal`, `medium`, or `high`.

        > **NOTE:** On higher sensitivities, you may need to adjust the `memory_reservation` to the full amount of memory provisioned for the virtual machine.
        """
        return pulumi.get(self, "latency_sensitivity")

    @property
    @pulumi.getter
    def memory(self) -> pulumi.Output[Optional[int]]:
        """
        The memory size to assign to the virtual machine, in MB. Default: `1024` (1 GB).
        """
        return pulumi.get(self, "memory")

    @property
    @pulumi.getter(name="memoryHotAddEnabled")
    def memory_hot_add_enabled(self) -> pulumi.Output[Optional[bool]]:
        """
        Allow memory to be added to the virtual machine while it is powered on.

        > **NOTE:** CPU and memory hot add options are not available on all guest operating systems. Please refer to the [VMware Guest OS Compatibility Guide][vmware-docs-compat-guide] to which settings are allow for your guest operating system. In addition, at least one `pulumi up` must be run before you are able to use CPU and memory hot add.

        [vmware-docs-compat-guide]: http://partnerweb.vmware.com/comp_guide2/pdf/VMware_GOS_Compatibility_Guide.pdf

        > **NOTE:** For Linux 64-bit guest operating systems with less than or equal to 3GB, the virtual machine must powered off to add memory beyond 3GB. Subsequent hot add of memory does not require the virtual machine to be powered-off to apply the plan. Please refer to [VMware KB 2008405][vmware-kb-2008405].

        [vmware-kb-2008405]: https://kb.vmware.com/s/article/2008405
        """
        return pulumi.get(self, "memory_hot_add_enabled")

    @property
    @pulumi.getter(name="memoryLimit")
    def memory_limit(self) -> pulumi.Output[Optional[int]]:
        """
        The maximum amount of memory (in MB) that th virtual machine can consume, regardless of available resources. The default is no limit.
        """
        return pulumi.get(self, "memory_limit")

    @property
    @pulumi.getter(name="memoryReservation")
    def memory_reservation(self) -> pulumi.Output[Optional[int]]:
        """
        The amount of memory (in MB) that the virtual machine is guaranteed. The default is no reservation.
        """
        return pulumi.get(self, "memory_reservation")

    @property
    @pulumi.getter(name="memoryShareCount")
    def memory_share_count(self) -> pulumi.Output[int]:
        """
        The number of memory shares allocated to the virtual machine when the `memory_share_level` is `custom`.
        """
        return pulumi.get(self, "memory_share_count")

    @property
    @pulumi.getter(name="memoryShareLevel")
    def memory_share_level(self) -> pulumi.Output[Optional[str]]:
        """
        The allocation level for the virtual machine memory resources. One of `high`, `low`, `normal`, or `custom`. Default: `custom`.
        """
        return pulumi.get(self, "memory_share_level")

    @property
    @pulumi.getter(name="migrateWaitTimeout")
    def migrate_wait_timeout(self) -> pulumi.Output[Optional[int]]:
        """
        The amount of time, in minutes, to wait for a virtual machine migration to complete before failing. Default: `10` minutes. See the section on virtual machine migration for more information.
        """
        return pulumi.get(self, "migrate_wait_timeout")

    @property
    @pulumi.getter
    def moid(self) -> pulumi.Output[str]:
        """
        The managed object reference ID of the created virtual machine.
        """
        return pulumi.get(self, "moid")

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

    @property
    @pulumi.getter(name="nestedHvEnabled")
    def nested_hv_enabled(self) -> pulumi.Output[Optional[bool]]:
        """
        Enable nested hardware virtualization on the virtual machine, facilitating nested virtualization in the guest operating system. Default: `false`.
        """
        return pulumi.get(self, "nested_hv_enabled")

    @property
    @pulumi.getter(name="networkInterfaces")
    def network_interfaces(self) -> pulumi.Output[Optional[Sequence['outputs.VirtualMachineNetworkInterface']]]:
        """
        A specification for a virtual NIC on the virtual machine. See network interface options for more information.
        """
        return pulumi.get(self, "network_interfaces")

    @property
    @pulumi.getter(name="numCoresPerSocket")
    def num_cores_per_socket(self) -> pulumi.Output[Optional[int]]:
        """
        The number of cores per socket in the virtual machine. The number of vCPUs on the virtual machine will be `num_cpus` divided by `num_cores_per_socket`. If specified, the value supplied to `num_cpus` must be evenly divisible by this value. Default: `1`.
        """
        return pulumi.get(self, "num_cores_per_socket")

    @property
    @pulumi.getter(name="numCpus")
    def num_cpus(self) -> pulumi.Output[Optional[int]]:
        """
        The total number of virtual processor cores to assign to the virtual machine. Default: `1`.
        """
        return pulumi.get(self, "num_cpus")

    @property
    @pulumi.getter(name="ovfDeploy")
    def ovf_deploy(self) -> pulumi.Output[Optional['outputs.VirtualMachineOvfDeploy']]:
        """
        When specified, the virtual machine will be deployed from the provided OVF/OVA template. See creating a virtual machine from an OVF/OVA template for more information.
        """
        return pulumi.get(self, "ovf_deploy")

    @property
    @pulumi.getter(name="pciDeviceIds")
    def pci_device_ids(self) -> pulumi.Output[Optional[Sequence[str]]]:
        """
        List of host PCI device IDs in which to create PCI passthroughs.

        > **NOTE:** Cloning requires vCenter Server and is not supported on direct ESXi host connections.
        """
        return pulumi.get(self, "pci_device_ids")

    @property
    @pulumi.getter(name="powerState")
    def power_state(self) -> pulumi.Output[str]:
        """
        A computed value for the current power state of the virtual machine. One of `on`, `off`, or `suspended`.
        """
        return pulumi.get(self, "power_state")

    @property
    @pulumi.getter(name="poweronTimeout")
    def poweron_timeout(self) -> pulumi.Output[Optional[int]]:
        """
        The amount of time, in seconds, that we will be trying to power on a VM
        """
        return pulumi.get(self, "poweron_timeout")

    @property
    @pulumi.getter(name="rebootRequired")
    def reboot_required(self) -> pulumi.Output[bool]:
        """
        Value internal to Terraform used to determine if a configuration set change requires a reboot.
        """
        return pulumi.get(self, "reboot_required")

    @property
    @pulumi.getter(name="replaceTrigger")
    def replace_trigger(self) -> pulumi.Output[Optional[str]]:
        """
        Triggers replacement of resource whenever it changes.

        For example, `replace_trigger = sha256(format("%s-%s",data.template_file.cloud_init_metadata.rendered,data.template_file.cloud_init_userdata.rendered))` will fingerprint the changes in cloud-init metadata and userdata templates. This will enable a replacement of the resource whenever the dependant template renders a new configuration. (Forces a replacement.)
        """
        return pulumi.get(self, "replace_trigger")

    @property
    @pulumi.getter(name="resourcePoolId")
    def resource_pool_id(self) -> pulumi.Output[str]:
        """
        The managed object reference ID of the resource pool in which to place the virtual machine. See the Virtual Machine Migration section for more information on modifying this value.

        > **NOTE:** All clusters and standalone hosts have a default root resource pool. This resource argument does not directly accept the cluster or standalone host resource. For more information, see the section on specifying the Root Resource Pool in the `ResourcePool` data source documentation on using the root resource pool.
        """
        return pulumi.get(self, "resource_pool_id")

    @property
    @pulumi.getter(name="runToolsScriptsAfterPowerOn")
    def run_tools_scripts_after_power_on(self) -> pulumi.Output[Optional[bool]]:
        """
        Enable post-power-on scripts to run when VMware Tools is installed. Default: `true`.
        """
        return pulumi.get(self, "run_tools_scripts_after_power_on")

    @property
    @pulumi.getter(name="runToolsScriptsAfterResume")
    def run_tools_scripts_after_resume(self) -> pulumi.Output[Optional[bool]]:
        """
        Enable ost-resume scripts to run when VMware Tools is installed. Default: `true`.
        """
        return pulumi.get(self, "run_tools_scripts_after_resume")

    @property
    @pulumi.getter(name="runToolsScriptsBeforeGuestReboot")
    def run_tools_scripts_before_guest_reboot(self) -> pulumi.Output[Optional[bool]]:
        """
        Enable pre-reboot scripts to run when VMware Tools is installed. Default: `false`.
        """
        return pulumi.get(self, "run_tools_scripts_before_guest_reboot")

    @property
    @pulumi.getter(name="runToolsScriptsBeforeGuestShutdown")
    def run_tools_scripts_before_guest_shutdown(self) -> pulumi.Output[Optional[bool]]:
        """
        Enable pre-shutdown scripts to run when VMware Tools is installed. Default: `true`.
        """
        return pulumi.get(self, "run_tools_scripts_before_guest_shutdown")

    @property
    @pulumi.getter(name="runToolsScriptsBeforeGuestStandby")
    def run_tools_scripts_before_guest_standby(self) -> pulumi.Output[Optional[bool]]:
        """
        Enable pre-standby scripts to run when VMware Tools is installed. Default: `true`.
        """
        return pulumi.get(self, "run_tools_scripts_before_guest_standby")

    @property
    @pulumi.getter(name="sataControllerCount")
    def sata_controller_count(self) -> pulumi.Output[Optional[int]]:
        """
        The number of SATA controllers that Terraform manages on this virtual machine. This directly affects the amount of disks
        you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove
        controllers.
        """
        return pulumi.get(self, "sata_controller_count")

    @property
    @pulumi.getter(name="scsiBusSharing")
    def scsi_bus_sharing(self) -> pulumi.Output[Optional[str]]:
        """
        The type of SCSI bus sharing for the virtual machine SCSI controller. One of `physicalSharing`, `virtualSharing`, and `noSharing`. Default: `noSharing`.
        """
        return pulumi.get(self, "scsi_bus_sharing")

    @property
    @pulumi.getter(name="scsiControllerCount")
    def scsi_controller_count(self) -> pulumi.Output[Optional[int]]:
        """
        The number of SCSI controllers that Terraform manages on this virtual machine. This directly affects the amount of disks
        you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove
        controllers.
        """
        return pulumi.get(self, "scsi_controller_count")

    @property
    @pulumi.getter(name="scsiType")
    def scsi_type(self) -> pulumi.Output[Optional[str]]:
        """
        The SCSI controller type for the virtual machine. One of `lsilogic` (LSI Logic Parallel), `lsilogic-sas` (LSI Logic SAS) or `pvscsi` (VMware Paravirtual). Default: `pvscsi`.
        """
        return pulumi.get(self, "scsi_type")

    @property
    @pulumi.getter(name="shutdownWaitTimeout")
    def shutdown_wait_timeout(self) -> pulumi.Output[Optional[int]]:
        """
        The amount of time, in minutes, to wait for a graceful guest shutdown when making necessary updates to the virtual machine. If `force_power_off` is set to `true`, the virtual machine will be forced to power-off after the timeout, otherwise an error is returned. Default: `3` minutes.
        """
        return pulumi.get(self, "shutdown_wait_timeout")

    @property
    @pulumi.getter(name="storagePolicyId")
    def storage_policy_id(self) -> pulumi.Output[str]:
        """
        The ID of the storage policy to assign to the home directory of a virtual machine.
        """
        return pulumi.get(self, "storage_policy_id")

    @property
    @pulumi.getter(name="swapPlacementPolicy")
    def swap_placement_policy(self) -> pulumi.Output[Optional[str]]:
        """
        The swap file placement policy for the virtual machine. One of `inherit`, `hostLocal`, or `vmDirectory`. Default: `inherit`.
        """
        return pulumi.get(self, "swap_placement_policy")

    @property
    @pulumi.getter(name="syncTimeWithHost")
    def sync_time_with_host(self) -> pulumi.Output[Optional[bool]]:
        """
        Enable the guest operating system to synchronization its clock with the host when the virtual machine is powered on or resumed. Requires vSphere 7.0 Update 1 and later. Requires VMware Tools to be installed. Default: `false`.
        """
        return pulumi.get(self, "sync_time_with_host")

    @property
    @pulumi.getter(name="syncTimeWithHostPeriodically")
    def sync_time_with_host_periodically(self) -> pulumi.Output[Optional[bool]]:
        """
        Enable the guest operating system to periodically synchronize its clock with the host. Requires vSphere 7.0 Update 1 and later. On previous versions, setting `sync_time_with_host` is will enable periodic synchronization. Requires VMware Tools to be installed. Default: `false`.
        """
        return pulumi.get(self, "sync_time_with_host_periodically")

    @property
    @pulumi.getter
    def tags(self) -> pulumi.Output[Optional[Sequence[str]]]:
        """
        The IDs of any tags to attach to this resource. Please refer to the `Tag` resource for more information on applying tags to virtual machine resources.

        > **NOTE:** Tagging support is unsupported on direct ESXi host connections and requires vCenter Server instance.
        """
        return pulumi.get(self, "tags")

    @property
    @pulumi.getter(name="toolsUpgradePolicy")
    def tools_upgrade_policy(self) -> pulumi.Output[Optional[str]]:
        """
        Enable automatic upgrade of the VMware Tools version when the virtual machine is rebooted. If necessary, VMware Tools is upgraded to the latest version supported by the host on which the virtual machine is running. Requires VMware Tools to be installed. One of `manual` or `upgradeAtPowerCycle`. Default: `manual`.
        """
        return pulumi.get(self, "tools_upgrade_policy")

    @property
    @pulumi.getter
    def uuid(self) -> pulumi.Output[str]:
        """
        The UUID of the virtual disk VMDK file. This is used to track the virtual disk on the virtual machine.
        """
        return pulumi.get(self, "uuid")

    @property
    @pulumi.getter
    def vapp(self) -> pulumi.Output[Optional['outputs.VirtualMachineVapp']]:
        """
        Used for vApp configurations. The only sub-key available is `properties`, which is a key/value map of properties for virtual machines imported from and OVF/OVA. See Using vApp Properties for OVF/OVA Configuration for more information.
        """
        return pulumi.get(self, "vapp")

    @property
    @pulumi.getter(name="vappTransports")
    def vapp_transports(self) -> pulumi.Output[Sequence[str]]:
        """
        Computed value which is only valid for cloned virtual machines. A list of vApp transport methods supported by the source virtual machine or template.
        """
        return pulumi.get(self, "vapp_transports")

    @property
    @pulumi.getter(name="vbsEnabled")
    def vbs_enabled(self) -> pulumi.Output[Optional[bool]]:
        """
        Enable Virtualization Based Security. Requires `firmware` to be `efi`. In addition, `vvtd_enabled`, `nested_hv_enabled`, and `efi_secure_boot_enabled` must all have a value of `true`. Supported on vSphere 6.7 and later. Default: `false`.
        """
        return pulumi.get(self, "vbs_enabled")

    @property
    @pulumi.getter(name="vmwareToolsStatus")
    def vmware_tools_status(self) -> pulumi.Output[str]:
        """
        The state of  VMware Tools in the guest. This will determine the proper course of action for some device operations.
        """
        return pulumi.get(self, "vmware_tools_status")

    @property
    @pulumi.getter(name="vmxPath")
    def vmx_path(self) -> pulumi.Output[str]:
        """
        The path of the virtual machine configuration file on the datastore in which the virtual machine is placed.
        """
        return pulumi.get(self, "vmx_path")

    @property
    @pulumi.getter(name="vvtdEnabled")
    def vvtd_enabled(self) -> pulumi.Output[Optional[bool]]:
        """
        Enable Intel Virtualization Technology for Directed I/O for the virtual machine (_I/O MMU_ in the vSphere Client). Supported on vSphere 6.7 and later. Default: `false`.
        """
        return pulumi.get(self, "vvtd_enabled")

    @property
    @pulumi.getter(name="waitForGuestIpTimeout")
    def wait_for_guest_ip_timeout(self) -> pulumi.Output[Optional[int]]:
        """
        The amount of time, in minutes, to wait for an available guest IP address on the virtual machine. This should only be used if the version VMware Tools does not allow the `wait_for_guest_net_timeout` waiter to be used. A value less than `1` disables the waiter. Default: `0`.
        """
        return pulumi.get(self, "wait_for_guest_ip_timeout")

    @property
    @pulumi.getter(name="waitForGuestNetRoutable")
    def wait_for_guest_net_routable(self) -> pulumi.Output[Optional[bool]]:
        """
        Controls whether or not the guest network waiter waits for a routable address. When `false`, the waiter does not wait for a default gateway, nor are IP addresses checked against any discovered default gateways as part of its success criteria. This property is ignored if the `wait_for_guest_ip_timeout` waiter is used. Default: `true`.
        """
        return pulumi.get(self, "wait_for_guest_net_routable")

    @property
    @pulumi.getter(name="waitForGuestNetTimeout")
    def wait_for_guest_net_timeout(self) -> pulumi.Output[Optional[int]]:
        """
        The amount of time, in minutes, to wait for an available guest IP address on the virtual machine. Older versions of VMware Tools do not populate this property. In those cases, this waiter can be disabled and the `wait_for_guest_ip_timeout` waiter can be used instead. A value less than `1` disables the waiter. Default: `5` minutes.
        """
        return pulumi.get(self, "wait_for_guest_net_timeout")

