# coding=utf-8
# *** WARNING: this file was generated by pulumi-language-python. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

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

__all__ = ['VmArgs', 'Vm']

@pulumi.input_type
class VmArgs:
    def __init__(__self__, *,
                 disks: pulumi.Input[Sequence[pulumi.Input['DiskArgs']]],
                 name: pulumi.Input[str],
                 acpi: Optional[pulumi.Input[int]] = None,
                 affinity: Optional[pulumi.Input[str]] = None,
                 agent: Optional[pulumi.Input[str]] = None,
                 audio0: Optional[pulumi.Input[str]] = None,
                 autostart: Optional[pulumi.Input[int]] = None,
                 balloon: Optional[pulumi.Input[int]] = None,
                 bios: Optional[pulumi.Input[str]] = None,
                 boot: Optional[pulumi.Input[str]] = None,
                 cicustom: Optional[pulumi.Input[str]] = None,
                 cipassword: Optional[pulumi.Input[str]] = None,
                 citype: Optional[pulumi.Input[str]] = None,
                 ciupgrade: Optional[pulumi.Input[int]] = None,
                 ciuser: Optional[pulumi.Input[str]] = None,
                 clone: Optional[pulumi.Input['VmCloneArgs']] = None,
                 cores: Optional[pulumi.Input[int]] = None,
                 cpu: Optional[pulumi.Input[str]] = None,
                 cpulimit: Optional[pulumi.Input[str]] = None,
                 cpuunits: Optional[pulumi.Input[int]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 digest: Optional[pulumi.Input[str]] = None,
                 efidisk0: Optional[pulumi.Input[str]] = None,
                 hookscript: Optional[pulumi.Input[str]] = None,
                 hostpci0: Optional[pulumi.Input[str]] = None,
                 hotplug: Optional[pulumi.Input[str]] = None,
                 hugepages: Optional[pulumi.Input[str]] = None,
                 ipconfig0: Optional[pulumi.Input[str]] = None,
                 kvm: Optional[pulumi.Input[int]] = None,
                 lock: Optional[pulumi.Input[str]] = None,
                 machine: Optional[pulumi.Input[str]] = None,
                 memory: Optional[pulumi.Input[int]] = None,
                 nameserver: Optional[pulumi.Input[str]] = None,
                 net0: Optional[pulumi.Input[str]] = None,
                 node: Optional[pulumi.Input[str]] = None,
                 numa: Optional[pulumi.Input[int]] = None,
                 numa0: Optional[pulumi.Input[str]] = None,
                 onboot: Optional[pulumi.Input[int]] = None,
                 ostype: Optional[pulumi.Input[str]] = None,
                 parallel0: Optional[pulumi.Input[str]] = None,
                 protection: Optional[pulumi.Input[int]] = None,
                 rng0: Optional[pulumi.Input[str]] = None,
                 scsihw: Optional[pulumi.Input[str]] = None,
                 searchdomain: Optional[pulumi.Input[str]] = None,
                 serial0: Optional[pulumi.Input[str]] = None,
                 smbios1: Optional[pulumi.Input[str]] = None,
                 sockets: Optional[pulumi.Input[int]] = None,
                 sshkeys: Optional[pulumi.Input[str]] = None,
                 tablet: Optional[pulumi.Input[int]] = None,
                 tags: Optional[pulumi.Input[str]] = None,
                 template: Optional[pulumi.Input[int]] = None,
                 tpmstate0: Optional[pulumi.Input[str]] = None,
                 usb0: Optional[pulumi.Input[str]] = None,
                 vcpus: Optional[pulumi.Input[int]] = None,
                 vga: Optional[pulumi.Input[str]] = None,
                 vm_id: Optional[pulumi.Input[int]] = None):
        """
        The set of arguments for constructing a Vm resource.
        """
        pulumi.set(__self__, "disks", disks)
        pulumi.set(__self__, "name", name)
        if acpi is not None:
            pulumi.set(__self__, "acpi", acpi)
        if affinity is not None:
            pulumi.set(__self__, "affinity", affinity)
        if agent is not None:
            pulumi.set(__self__, "agent", agent)
        if audio0 is not None:
            pulumi.set(__self__, "audio0", audio0)
        if autostart is not None:
            pulumi.set(__self__, "autostart", autostart)
        if balloon is not None:
            pulumi.set(__self__, "balloon", balloon)
        if bios is not None:
            pulumi.set(__self__, "bios", bios)
        if boot is not None:
            pulumi.set(__self__, "boot", boot)
        if cicustom is not None:
            pulumi.set(__self__, "cicustom", cicustom)
        if cipassword is not None:
            pulumi.set(__self__, "cipassword", cipassword)
        if citype is not None:
            pulumi.set(__self__, "citype", citype)
        if ciupgrade is not None:
            pulumi.set(__self__, "ciupgrade", ciupgrade)
        if ciuser is not None:
            pulumi.set(__self__, "ciuser", ciuser)
        if clone is not None:
            pulumi.set(__self__, "clone", clone)
        if cores is None:
            cores = 1
        if cores is not None:
            pulumi.set(__self__, "cores", cores)
        if cpu is not None:
            pulumi.set(__self__, "cpu", cpu)
        if cpulimit is not None:
            pulumi.set(__self__, "cpulimit", cpulimit)
        if cpuunits is not None:
            pulumi.set(__self__, "cpuunits", cpuunits)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if digest is not None:
            pulumi.set(__self__, "digest", digest)
        if efidisk0 is not None:
            pulumi.set(__self__, "efidisk0", efidisk0)
        if hookscript is not None:
            pulumi.set(__self__, "hookscript", hookscript)
        if hostpci0 is not None:
            pulumi.set(__self__, "hostpci0", hostpci0)
        if hotplug is not None:
            pulumi.set(__self__, "hotplug", hotplug)
        if hugepages is not None:
            pulumi.set(__self__, "hugepages", hugepages)
        if ipconfig0 is not None:
            pulumi.set(__self__, "ipconfig0", ipconfig0)
        if kvm is not None:
            pulumi.set(__self__, "kvm", kvm)
        if lock is not None:
            pulumi.set(__self__, "lock", lock)
        if machine is not None:
            pulumi.set(__self__, "machine", machine)
        if memory is not None:
            pulumi.set(__self__, "memory", memory)
        if nameserver is not None:
            pulumi.set(__self__, "nameserver", nameserver)
        if net0 is not None:
            pulumi.set(__self__, "net0", net0)
        if node is not None:
            pulumi.set(__self__, "node", node)
        if numa is not None:
            pulumi.set(__self__, "numa", numa)
        if numa0 is not None:
            pulumi.set(__self__, "numa0", numa0)
        if onboot is not None:
            pulumi.set(__self__, "onboot", onboot)
        if ostype is not None:
            pulumi.set(__self__, "ostype", ostype)
        if parallel0 is not None:
            pulumi.set(__self__, "parallel0", parallel0)
        if protection is not None:
            pulumi.set(__self__, "protection", protection)
        if rng0 is not None:
            pulumi.set(__self__, "rng0", rng0)
        if scsihw is not None:
            pulumi.set(__self__, "scsihw", scsihw)
        if searchdomain is not None:
            pulumi.set(__self__, "searchdomain", searchdomain)
        if serial0 is not None:
            pulumi.set(__self__, "serial0", serial0)
        if smbios1 is not None:
            pulumi.set(__self__, "smbios1", smbios1)
        if sockets is not None:
            pulumi.set(__self__, "sockets", sockets)
        if sshkeys is not None:
            pulumi.set(__self__, "sshkeys", sshkeys)
        if tablet is not None:
            pulumi.set(__self__, "tablet", tablet)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if template is not None:
            pulumi.set(__self__, "template", template)
        if tpmstate0 is not None:
            pulumi.set(__self__, "tpmstate0", tpmstate0)
        if usb0 is not None:
            pulumi.set(__self__, "usb0", usb0)
        if vcpus is not None:
            pulumi.set(__self__, "vcpus", vcpus)
        if vga is not None:
            pulumi.set(__self__, "vga", vga)
        if vm_id is not None:
            pulumi.set(__self__, "vm_id", vm_id)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


class Vm(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 acpi: Optional[pulumi.Input[int]] = None,
                 affinity: Optional[pulumi.Input[str]] = None,
                 agent: Optional[pulumi.Input[str]] = None,
                 audio0: Optional[pulumi.Input[str]] = None,
                 autostart: Optional[pulumi.Input[int]] = None,
                 balloon: Optional[pulumi.Input[int]] = None,
                 bios: Optional[pulumi.Input[str]] = None,
                 boot: Optional[pulumi.Input[str]] = None,
                 cicustom: Optional[pulumi.Input[str]] = None,
                 cipassword: Optional[pulumi.Input[str]] = None,
                 citype: Optional[pulumi.Input[str]] = None,
                 ciupgrade: Optional[pulumi.Input[int]] = None,
                 ciuser: Optional[pulumi.Input[str]] = None,
                 clone: Optional[pulumi.Input[Union['VmCloneArgs', 'VmCloneArgsDict']]] = None,
                 cores: Optional[pulumi.Input[int]] = None,
                 cpu: Optional[pulumi.Input[str]] = None,
                 cpulimit: Optional[pulumi.Input[str]] = None,
                 cpuunits: Optional[pulumi.Input[int]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 digest: Optional[pulumi.Input[str]] = None,
                 disks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['DiskArgs', 'DiskArgsDict']]]]] = None,
                 efidisk0: Optional[pulumi.Input[str]] = None,
                 hookscript: Optional[pulumi.Input[str]] = None,
                 hostpci0: Optional[pulumi.Input[str]] = None,
                 hotplug: Optional[pulumi.Input[str]] = None,
                 hugepages: Optional[pulumi.Input[str]] = None,
                 ipconfig0: Optional[pulumi.Input[str]] = None,
                 kvm: Optional[pulumi.Input[int]] = None,
                 lock: Optional[pulumi.Input[str]] = None,
                 machine: Optional[pulumi.Input[str]] = None,
                 memory: Optional[pulumi.Input[int]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 nameserver: Optional[pulumi.Input[str]] = None,
                 net0: Optional[pulumi.Input[str]] = None,
                 node: Optional[pulumi.Input[str]] = None,
                 numa: Optional[pulumi.Input[int]] = None,
                 numa0: Optional[pulumi.Input[str]] = None,
                 onboot: Optional[pulumi.Input[int]] = None,
                 ostype: Optional[pulumi.Input[str]] = None,
                 parallel0: Optional[pulumi.Input[str]] = None,
                 protection: Optional[pulumi.Input[int]] = None,
                 rng0: Optional[pulumi.Input[str]] = None,
                 scsihw: Optional[pulumi.Input[str]] = None,
                 searchdomain: Optional[pulumi.Input[str]] = None,
                 serial0: Optional[pulumi.Input[str]] = None,
                 smbios1: Optional[pulumi.Input[str]] = None,
                 sockets: Optional[pulumi.Input[int]] = None,
                 sshkeys: Optional[pulumi.Input[str]] = None,
                 tablet: Optional[pulumi.Input[int]] = None,
                 tags: Optional[pulumi.Input[str]] = None,
                 template: Optional[pulumi.Input[int]] = None,
                 tpmstate0: Optional[pulumi.Input[str]] = None,
                 usb0: Optional[pulumi.Input[str]] = None,
                 vcpus: Optional[pulumi.Input[int]] = None,
                 vga: Optional[pulumi.Input[str]] = None,
                 vm_id: Optional[pulumi.Input[int]] = None,
                 __props__=None):
        """
        Create a Vm 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.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: VmArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Create a Vm resource with the given unique name, props, and options.
        :param str resource_name: The name of the resource.
        :param VmArgs 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(VmArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 acpi: Optional[pulumi.Input[int]] = None,
                 affinity: Optional[pulumi.Input[str]] = None,
                 agent: Optional[pulumi.Input[str]] = None,
                 audio0: Optional[pulumi.Input[str]] = None,
                 autostart: Optional[pulumi.Input[int]] = None,
                 balloon: Optional[pulumi.Input[int]] = None,
                 bios: Optional[pulumi.Input[str]] = None,
                 boot: Optional[pulumi.Input[str]] = None,
                 cicustom: Optional[pulumi.Input[str]] = None,
                 cipassword: Optional[pulumi.Input[str]] = None,
                 citype: Optional[pulumi.Input[str]] = None,
                 ciupgrade: Optional[pulumi.Input[int]] = None,
                 ciuser: Optional[pulumi.Input[str]] = None,
                 clone: Optional[pulumi.Input[Union['VmCloneArgs', 'VmCloneArgsDict']]] = None,
                 cores: Optional[pulumi.Input[int]] = None,
                 cpu: Optional[pulumi.Input[str]] = None,
                 cpulimit: Optional[pulumi.Input[str]] = None,
                 cpuunits: Optional[pulumi.Input[int]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 digest: Optional[pulumi.Input[str]] = None,
                 disks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['DiskArgs', 'DiskArgsDict']]]]] = None,
                 efidisk0: Optional[pulumi.Input[str]] = None,
                 hookscript: Optional[pulumi.Input[str]] = None,
                 hostpci0: Optional[pulumi.Input[str]] = None,
                 hotplug: Optional[pulumi.Input[str]] = None,
                 hugepages: Optional[pulumi.Input[str]] = None,
                 ipconfig0: Optional[pulumi.Input[str]] = None,
                 kvm: Optional[pulumi.Input[int]] = None,
                 lock: Optional[pulumi.Input[str]] = None,
                 machine: Optional[pulumi.Input[str]] = None,
                 memory: Optional[pulumi.Input[int]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 nameserver: Optional[pulumi.Input[str]] = None,
                 net0: Optional[pulumi.Input[str]] = None,
                 node: Optional[pulumi.Input[str]] = None,
                 numa: Optional[pulumi.Input[int]] = None,
                 numa0: Optional[pulumi.Input[str]] = None,
                 onboot: Optional[pulumi.Input[int]] = None,
                 ostype: Optional[pulumi.Input[str]] = None,
                 parallel0: Optional[pulumi.Input[str]] = None,
                 protection: Optional[pulumi.Input[int]] = None,
                 rng0: Optional[pulumi.Input[str]] = None,
                 scsihw: Optional[pulumi.Input[str]] = None,
                 searchdomain: Optional[pulumi.Input[str]] = None,
                 serial0: Optional[pulumi.Input[str]] = None,
                 smbios1: Optional[pulumi.Input[str]] = None,
                 sockets: Optional[pulumi.Input[int]] = None,
                 sshkeys: Optional[pulumi.Input[str]] = None,
                 tablet: Optional[pulumi.Input[int]] = None,
                 tags: Optional[pulumi.Input[str]] = None,
                 template: Optional[pulumi.Input[int]] = None,
                 tpmstate0: Optional[pulumi.Input[str]] = None,
                 usb0: Optional[pulumi.Input[str]] = None,
                 vcpus: Optional[pulumi.Input[int]] = None,
                 vga: Optional[pulumi.Input[str]] = None,
                 vm_id: 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__ = VmArgs.__new__(VmArgs)

            __props__.__dict__["acpi"] = acpi
            __props__.__dict__["affinity"] = affinity
            __props__.__dict__["agent"] = agent
            __props__.__dict__["audio0"] = audio0
            __props__.__dict__["autostart"] = autostart
            __props__.__dict__["balloon"] = balloon
            __props__.__dict__["bios"] = bios
            __props__.__dict__["boot"] = boot
            __props__.__dict__["cicustom"] = cicustom
            __props__.__dict__["cipassword"] = cipassword
            __props__.__dict__["citype"] = citype
            __props__.__dict__["ciupgrade"] = ciupgrade
            __props__.__dict__["ciuser"] = ciuser
            __props__.__dict__["clone"] = clone
            if cores is None:
                cores = 1
            __props__.__dict__["cores"] = cores
            __props__.__dict__["cpu"] = cpu
            __props__.__dict__["cpulimit"] = cpulimit
            __props__.__dict__["cpuunits"] = cpuunits
            __props__.__dict__["description"] = description
            __props__.__dict__["digest"] = digest
            if disks is None and not opts.urn:
                raise TypeError("Missing required property 'disks'")
            __props__.__dict__["disks"] = disks
            __props__.__dict__["efidisk0"] = efidisk0
            __props__.__dict__["hookscript"] = hookscript
            __props__.__dict__["hostpci0"] = hostpci0
            __props__.__dict__["hotplug"] = hotplug
            __props__.__dict__["hugepages"] = hugepages
            __props__.__dict__["ipconfig0"] = ipconfig0
            __props__.__dict__["kvm"] = kvm
            __props__.__dict__["lock"] = lock
            __props__.__dict__["machine"] = machine
            __props__.__dict__["memory"] = memory
            if name is None and not opts.urn:
                raise TypeError("Missing required property 'name'")
            __props__.__dict__["name"] = name
            __props__.__dict__["nameserver"] = nameserver
            __props__.__dict__["net0"] = net0
            __props__.__dict__["node"] = node
            __props__.__dict__["numa"] = numa
            __props__.__dict__["numa0"] = numa0
            __props__.__dict__["onboot"] = onboot
            __props__.__dict__["ostype"] = ostype
            __props__.__dict__["parallel0"] = parallel0
            __props__.__dict__["protection"] = protection
            __props__.__dict__["rng0"] = rng0
            __props__.__dict__["scsihw"] = scsihw
            __props__.__dict__["searchdomain"] = searchdomain
            __props__.__dict__["serial0"] = serial0
            __props__.__dict__["smbios1"] = smbios1
            __props__.__dict__["sockets"] = sockets
            __props__.__dict__["sshkeys"] = sshkeys
            __props__.__dict__["tablet"] = tablet
            __props__.__dict__["tags"] = tags
            __props__.__dict__["template"] = template
            __props__.__dict__["tpmstate0"] = tpmstate0
            __props__.__dict__["usb0"] = usb0
            __props__.__dict__["vcpus"] = vcpus
            __props__.__dict__["vga"] = vga
            __props__.__dict__["vm_id"] = vm_id
        super(Vm, __self__).__init__(
            'pve:vm:Vm',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None) -> 'Vm':
        """
        Get an existing Vm resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

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

        __props__ = VmArgs.__new__(VmArgs)

        __props__.__dict__["acpi"] = None
        __props__.__dict__["affinity"] = None
        __props__.__dict__["agent"] = None
        __props__.__dict__["audio0"] = None
        __props__.__dict__["autostart"] = None
        __props__.__dict__["balloon"] = None
        __props__.__dict__["bios"] = None
        __props__.__dict__["boot"] = None
        __props__.__dict__["cicustom"] = None
        __props__.__dict__["cipassword"] = None
        __props__.__dict__["citype"] = None
        __props__.__dict__["ciupgrade"] = None
        __props__.__dict__["ciuser"] = None
        __props__.__dict__["clone"] = None
        __props__.__dict__["cores"] = None
        __props__.__dict__["cpu"] = None
        __props__.__dict__["cpulimit"] = None
        __props__.__dict__["cpuunits"] = None
        __props__.__dict__["description"] = None
        __props__.__dict__["digest"] = None
        __props__.__dict__["disks"] = None
        __props__.__dict__["efidisk0"] = None
        __props__.__dict__["hookscript"] = None
        __props__.__dict__["hostpci0"] = None
        __props__.__dict__["hotplug"] = None
        __props__.__dict__["hugepages"] = None
        __props__.__dict__["ipconfig0"] = None
        __props__.__dict__["kvm"] = None
        __props__.__dict__["lock"] = None
        __props__.__dict__["machine"] = None
        __props__.__dict__["memory"] = None
        __props__.__dict__["name"] = None
        __props__.__dict__["nameserver"] = None
        __props__.__dict__["net0"] = None
        __props__.__dict__["node"] = None
        __props__.__dict__["numa"] = None
        __props__.__dict__["numa0"] = None
        __props__.__dict__["onboot"] = None
        __props__.__dict__["ostype"] = None
        __props__.__dict__["parallel0"] = None
        __props__.__dict__["protection"] = None
        __props__.__dict__["rng0"] = None
        __props__.__dict__["scsihw"] = None
        __props__.__dict__["searchdomain"] = None
        __props__.__dict__["serial0"] = None
        __props__.__dict__["smbios1"] = None
        __props__.__dict__["sockets"] = None
        __props__.__dict__["sshkeys"] = None
        __props__.__dict__["tablet"] = None
        __props__.__dict__["tags"] = None
        __props__.__dict__["template"] = None
        __props__.__dict__["tpmstate0"] = None
        __props__.__dict__["usb0"] = None
        __props__.__dict__["vcpus"] = None
        __props__.__dict__["vga"] = None
        __props__.__dict__["vm_id"] = None
        return Vm(resource_name, opts=opts, __props__=__props__)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

