import * as pulumi from "@pulumi/pulumi";
import * as inputs from "../types/input";
import * as outputs from "../types/output";
/**
 * > **EXPERIMENTAL**
 *
 * Clone a VM from a source template/VM and manage only explicitly-defined configuration. This resource uses explicit opt-in management: only configuration blocks and devices explicitly listed in your Terraform code are managed. Inherited settings from the template are preserved unless explicitly overridden or deleted. Removing a configuration from Terraform stops managing it but does not delete it from the VM.
 *
 * ## Limitations
 *
 * This resource intentionally manages only a subset of VM configuration. The following are currently not managed and must be inherited from the source template (or managed via `proxmoxve.Vm` with a `clone` block):
 *
 * - BIOS / machine / boot order
 * - EFI disk / secure boot settings
 * - TPM state
 * - Cloud-init / initialization
 * - QEMU guest agent configuration
 * - PCI/USB passthrough, serial/audio devices, watchdog, VirtioFS
 *
 * ## Example Usage
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve";
 *
 * // Example 1: Basic clone with minimal management
 * const basicClone = new proxmoxve.cloned.Vm("basic_clone", {
 *     nodeName: "pve",
 *     name: "basic-clone",
 *     clone: {
 *         sourceVmId: 100,
 *         full: true,
 *     },
 *     cpu: {
 *         cores: 4,
 *     },
 * });
 * // Example 2: Clone with explicit network management
 * const networkManaged = new proxmoxve.cloned.Vm("network_managed", {
 *     nodeName: "pve",
 *     name: "network-clone",
 *     clone: {
 *         sourceVmId: 100,
 *     },
 *     network: {
 *         net0: {
 *             bridge: "vmbr0",
 *             model: "virtio",
 *             tag: 100,
 *         },
 *         net1: {
 *             bridge: "vmbr1",
 *             model: "virtio",
 *             firewall: true,
 *             macAddress: "BC:24:11:2E:C5:00",
 *         },
 *     },
 *     cpu: {
 *         cores: 2,
 *     },
 * });
 * // Example 3: Clone with disk management
 * const diskManaged = new proxmoxve.cloned.Vm("disk_managed", {
 *     nodeName: "pve",
 *     name: "disk-clone",
 *     clone: {
 *         sourceVmId: 100,
 *         targetDatastore: "local-lvm",
 *     },
 *     disk: {
 *         scsi0: {
 *             datastoreId: "local-lvm",
 *             sizeGb: 50,
 *             discard: "on",
 *             ssd: true,
 *         },
 *         scsi1: {
 *             datastoreId: "local-lvm",
 *             sizeGb: 100,
 *             backup: false,
 *         },
 *     },
 * });
 * // Example 4: Clone with explicit device deletion
 * const selectiveDelete = new proxmoxve.cloned.Vm("selective_delete", {
 *     nodeName: "pve",
 *     name: "minimal-clone",
 *     clone: {
 *         sourceVmId: 100,
 *     },
 *     network: {
 *         net0: {
 *             bridge: "vmbr0",
 *             model: "virtio",
 *         },
 *     },
 *     "delete": {
 *         networks: [
 *             "net1",
 *             "net2",
 *         ],
 *     },
 * });
 * // Example 5: Full-featured clone with multiple settings
 * const fullFeatured = new proxmoxve.cloned.Vm("full_featured", {
 *     nodeName: "pve",
 *     name: "production-vm",
 *     description: "Production VM cloned from template",
 *     tags: [
 *         "production",
 *         "web",
 *     ],
 *     clone: {
 *         sourceVmId: 100,
 *         sourceNodeName: "pve",
 *         full: true,
 *         targetDatastore: "local-lvm",
 *         retries: 3,
 *     },
 *     cpu: {
 *         cores: 8,
 *         sockets: 1,
 *         architecture: "x86_64",
 *         type: "host",
 *     },
 *     memory: {
 *         size: 8192,
 *         balloon: 2048,
 *         shares: 2000,
 *     },
 *     network: {
 *         net0: {
 *             bridge: "vmbr0",
 *             model: "virtio",
 *             tag: 100,
 *             firewall: true,
 *             rateLimit: 100,
 *         },
 *     },
 *     disk: {
 *         scsi0: {
 *             datastoreId: "local-lvm",
 *             sizeGb: 100,
 *             discard: "on",
 *             iothread: true,
 *             ssd: true,
 *             cache: "writethrough",
 *         },
 *     },
 *     vga: {
 *         type: "std",
 *         memory: 16,
 *     },
 *     "delete": {
 *         disks: ["ide2"],
 *     },
 *     stopOnDestroy: false,
 *     purgeOnDestroy: true,
 *     deleteUnreferencedDisksOnDestroy: false,
 *     timeouts: {
 *         create: "30m",
 *         update: "30m",
 *         "delete": "10m",
 *     },
 * });
 * // Example 6: Linked clone for testing
 * const testClone = new proxmoxve.cloned.Vm("test_clone", {
 *     nodeName: "pve",
 *     name: "test-vm",
 *     clone: {
 *         sourceVmId: 100,
 *         full: false,
 *     },
 *     cpu: {
 *         cores: 2,
 *     },
 *     network: {
 *         net0: {
 *             bridge: "vmbr0",
 *             model: "virtio",
 *         },
 *     },
 * });
 * // Example 7: Clone with pool assignment
 * const pooledClone = new proxmoxve.cloned.Vm("pooled_clone", {
 *     nodeName: "pve",
 *     name: "pooled-vm",
 *     clone: {
 *         sourceVmId: 100,
 *         poolId: "production",
 *     },
 *     cpu: {
 *         cores: 4,
 *     },
 * });
 * // Example 8: Import existing cloned VM
 * const imported = new proxmoxve.cloned.Vm("imported", {
 *     resourceId: "123",
 *     nodeName: "pve",
 *     clone: {
 *         sourceVmId: 100,
 *     },
 *     cpu: {
 *         cores: 4,
 *     },
 * });
 * ```
 */
export declare class Vm extends pulumi.CustomResource {
    /**
     * Get an existing Vm resource's state with the given name, ID, and optional extra
     * properties used to qualify the lookup.
     *
     * @param name The _unique_ name of the resulting resource.
     * @param id The _unique_ provider ID of the resource to lookup.
     * @param state Any extra arguments used during the lookup.
     * @param opts Optional settings to control the behavior of the CustomResource.
     */
    static get(name: string, id: pulumi.Input<pulumi.ID>, state?: VmState, opts?: pulumi.CustomResourceOptions): Vm;
    /**
     * Returns true if the given object is an instance of Vm.  This is designed to work even
     * when multiple copies of the Pulumi SDK have been loaded into the same process.
     */
    static isInstance(obj: any): obj is Vm;
    /**
     * The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces.
     */
    readonly cdrom: pulumi.Output<{
        [key: string]: outputs.cloned.VmCdrom;
    } | undefined>;
    /**
     * Clone settings. Changes require recreation.
     */
    readonly clone: pulumi.Output<outputs.cloned.VmClone>;
    /**
     * The CPU configuration.
     */
    readonly cpu: pulumi.Output<outputs.cloned.VmCpu | undefined>;
    /**
     * Explicit deletions to perform after cloning/updating. Entries persist across applies.
     */
    readonly delete: pulumi.Output<outputs.cloned.VmDelete | undefined>;
    /**
     * Delete unreferenced disks on destroy. WARNING: When set to true, any disks not explicitly managed by Terraform will be deleted on destroy, potentially causing data loss. Defaults to false for safety.
     */
    readonly deleteUnreferencedDisksOnDestroy: pulumi.Output<boolean>;
    /**
     * Optional VM description applied after cloning.
     */
    readonly description: pulumi.Output<string | undefined>;
    /**
     * Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed.
     */
    readonly disk: pulumi.Output<{
        [key: string]: outputs.cloned.VmDisk;
    } | undefined>;
    /**
     * Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed.
     */
    readonly memory: pulumi.Output<outputs.cloned.VmMemory | undefined>;
    /**
     * Optional VM name override applied after cloning.
     */
    readonly name: pulumi.Output<string>;
    /**
     * Network devices keyed by slot (net0, net1, ...). Only listed keys are managed.
     */
    readonly network: pulumi.Output<{
        [key: string]: outputs.cloned.VmNetwork;
    } | undefined>;
    /**
     * Target node for the cloned VM.
     */
    readonly nodeName: pulumi.Output<string>;
    /**
     * Purge backup configuration on destroy.
     */
    readonly purgeOnDestroy: pulumi.Output<boolean>;
    /**
     * The VM identifier in the Proxmox cluster.
     */
    readonly resourceId: pulumi.Output<string>;
    /**
     * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.
     */
    readonly rng: pulumi.Output<outputs.cloned.VmRng | undefined>;
    /**
     * Whether the VM should be started after cloning. Defaults to true.
     */
    readonly started: pulumi.Output<boolean>;
    /**
     * Stop the VM on destroy (instead of shutdown).
     */
    readonly stopOnDestroy: pulumi.Output<boolean>;
    /**
     * Tags applied after cloning.
     */
    readonly tags: pulumi.Output<string[] | undefined>;
    readonly timeouts: pulumi.Output<outputs.cloned.VmTimeouts | undefined>;
    /**
     * Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters.
     */
    readonly vga: pulumi.Output<outputs.cloned.VmVga | undefined>;
    /**
     * Create a Vm resource with the given unique name, arguments, and options.
     *
     * @param name The _unique_ name of the resource.
     * @param args The arguments to use to populate this resource's properties.
     * @param opts A bag of options that control this resource's behavior.
     */
    constructor(name: string, args: VmArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering Vm resources.
 */
export interface VmState {
    /**
     * The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces.
     */
    cdrom?: pulumi.Input<{
        [key: string]: pulumi.Input<inputs.cloned.VmCdrom>;
    } | undefined>;
    /**
     * Clone settings. Changes require recreation.
     */
    clone?: pulumi.Input<inputs.cloned.VmClone | undefined>;
    /**
     * The CPU configuration.
     */
    cpu?: pulumi.Input<inputs.cloned.VmCpu | undefined>;
    /**
     * Explicit deletions to perform after cloning/updating. Entries persist across applies.
     */
    delete?: pulumi.Input<inputs.cloned.VmDelete | undefined>;
    /**
     * Delete unreferenced disks on destroy. WARNING: When set to true, any disks not explicitly managed by Terraform will be deleted on destroy, potentially causing data loss. Defaults to false for safety.
     */
    deleteUnreferencedDisksOnDestroy?: pulumi.Input<boolean | undefined>;
    /**
     * Optional VM description applied after cloning.
     */
    description?: pulumi.Input<string | undefined>;
    /**
     * Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed.
     */
    disk?: pulumi.Input<{
        [key: string]: pulumi.Input<inputs.cloned.VmDisk>;
    } | undefined>;
    /**
     * Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed.
     */
    memory?: pulumi.Input<inputs.cloned.VmMemory | undefined>;
    /**
     * Optional VM name override applied after cloning.
     */
    name?: pulumi.Input<string | undefined>;
    /**
     * Network devices keyed by slot (net0, net1, ...). Only listed keys are managed.
     */
    network?: pulumi.Input<{
        [key: string]: pulumi.Input<inputs.cloned.VmNetwork>;
    } | undefined>;
    /**
     * Target node for the cloned VM.
     */
    nodeName?: pulumi.Input<string | undefined>;
    /**
     * Purge backup configuration on destroy.
     */
    purgeOnDestroy?: pulumi.Input<boolean | undefined>;
    /**
     * The VM identifier in the Proxmox cluster.
     */
    resourceId?: pulumi.Input<string | undefined>;
    /**
     * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.
     */
    rng?: pulumi.Input<inputs.cloned.VmRng | undefined>;
    /**
     * Whether the VM should be started after cloning. Defaults to true.
     */
    started?: pulumi.Input<boolean | undefined>;
    /**
     * Stop the VM on destroy (instead of shutdown).
     */
    stopOnDestroy?: pulumi.Input<boolean | undefined>;
    /**
     * Tags applied after cloning.
     */
    tags?: pulumi.Input<pulumi.Input<string>[] | undefined>;
    timeouts?: pulumi.Input<inputs.cloned.VmTimeouts | undefined>;
    /**
     * Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters.
     */
    vga?: pulumi.Input<inputs.cloned.VmVga | undefined>;
}
/**
 * The set of arguments for constructing a Vm resource.
 */
export interface VmArgs {
    /**
     * The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces.
     */
    cdrom?: pulumi.Input<{
        [key: string]: pulumi.Input<inputs.cloned.VmCdrom>;
    } | undefined>;
    /**
     * Clone settings. Changes require recreation.
     */
    clone: pulumi.Input<inputs.cloned.VmClone>;
    /**
     * The CPU configuration.
     */
    cpu?: pulumi.Input<inputs.cloned.VmCpu | undefined>;
    /**
     * Explicit deletions to perform after cloning/updating. Entries persist across applies.
     */
    delete?: pulumi.Input<inputs.cloned.VmDelete | undefined>;
    /**
     * Delete unreferenced disks on destroy. WARNING: When set to true, any disks not explicitly managed by Terraform will be deleted on destroy, potentially causing data loss. Defaults to false for safety.
     */
    deleteUnreferencedDisksOnDestroy?: pulumi.Input<boolean | undefined>;
    /**
     * Optional VM description applied after cloning.
     */
    description?: pulumi.Input<string | undefined>;
    /**
     * Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed.
     */
    disk?: pulumi.Input<{
        [key: string]: pulumi.Input<inputs.cloned.VmDisk>;
    } | undefined>;
    /**
     * Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed.
     */
    memory?: pulumi.Input<inputs.cloned.VmMemory | undefined>;
    /**
     * Optional VM name override applied after cloning.
     */
    name?: pulumi.Input<string | undefined>;
    /**
     * Network devices keyed by slot (net0, net1, ...). Only listed keys are managed.
     */
    network?: pulumi.Input<{
        [key: string]: pulumi.Input<inputs.cloned.VmNetwork>;
    } | undefined>;
    /**
     * Target node for the cloned VM.
     */
    nodeName: pulumi.Input<string>;
    /**
     * Purge backup configuration on destroy.
     */
    purgeOnDestroy?: pulumi.Input<boolean | undefined>;
    /**
     * The VM identifier in the Proxmox cluster.
     */
    resourceId?: pulumi.Input<string | undefined>;
    /**
     * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.
     */
    rng?: pulumi.Input<inputs.cloned.VmRng | undefined>;
    /**
     * Whether the VM should be started after cloning. Defaults to true.
     */
    started?: pulumi.Input<boolean | undefined>;
    /**
     * Stop the VM on destroy (instead of shutdown).
     */
    stopOnDestroy?: pulumi.Input<boolean | undefined>;
    /**
     * Tags applied after cloning.
     */
    tags?: pulumi.Input<pulumi.Input<string>[] | undefined>;
    timeouts?: pulumi.Input<inputs.cloned.VmTimeouts | undefined>;
    /**
     * Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters.
     */
    vga?: pulumi.Input<inputs.cloned.VmVga | undefined>;
}
//# sourceMappingURL=vm.d.ts.map