<filename>sdk/dotnet/VmInternalDisk.cs// *** 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! ***

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Threading.Tasks;
using Pulumi.Serialization;

namespace Pulumi.Vcd
{
    [VcdResourceType("vcd:index/vmInternalDisk:VmInternalDisk")]
    public partial class VmInternalDisk : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Powers off VM when changing any attribute of an IDE disk or unit/bus number of other disk types, after the change is
        /// complete VM is powered back on. Without this setting enabled, such changes on a powered-on VM would fail.
        /// </summary>
        [Output("allowVmReboot")]
        public Output<bool?> AllowVmReboot { get; private set; } = null!;

        /// <summary>
        /// The number of the SCSI or IDE controller itself.
        /// </summary>
        [Output("busNumber")]
        public Output<int> BusNumber { get; private set; } = null!;

        /// <summary>
        /// The type of disk controller. Possible values: ide, parallel( LSI Logic Parallel SCSI), sas(LSI Logic SAS (SCSI)),
        /// paravirtual(Paravirtual (SCSI)), sata, nvme
        /// </summary>
        [Output("busType")]
        public Output<string> BusType { get; private set; } = null!;

        /// <summary>
        /// Specifies the IOPS for the disk.
        /// </summary>
        [Output("iops")]
        public Output<int> Iops { get; private set; } = null!;

        /// <summary>
        /// The name of organization to use, optional if defined at provider level. Useful when connected as sysadmin working across
        /// different organizations
        /// </summary>
        [Output("org")]
        public Output<string?> Org { get; private set; } = null!;

        /// <summary>
        /// The size of the disk in MB.
        /// </summary>
        [Output("sizeInMb")]
        public Output<int> SizeInMb { get; private set; } = null!;

        /// <summary>
        /// Storage profile to override the VM default one
        /// </summary>
        [Output("storageProfile")]
        public Output<string> StorageProfile { get; private set; } = null!;

        /// <summary>
        /// Specifies whether the disk storage is pre-allocated or allocated on demand.
        /// </summary>
        [Output("thinProvisioned")]
        public Output<bool> ThinProvisioned { get; private set; } = null!;

        /// <summary>
        /// The device number on the SCSI or IDE controller of the disk.
        /// </summary>
        [Output("unitNumber")]
        public Output<int> UnitNumber { get; private set; } = null!;

        /// <summary>
        /// The vApp this VM internal disk belongs to
        /// </summary>
        [Output("vappName")]
        public Output<string> VappName { get; private set; } = null!;

        /// <summary>
        /// The name of VDC to use, optional if defined at provider level
        /// </summary>
        [Output("vdc")]
        public Output<string?> Vdc { get; private set; } = null!;

        /// <summary>
        /// VM in vApp in which internal disk is created
        /// </summary>
        [Output("vmName")]
        public Output<string> VmName { get; private set; } = null!;


        /// <summary>
        /// Create a VmInternalDisk resource with the given unique name, arguments, and options.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resource</param>
        /// <param name="args">The arguments used to populate this resource's properties</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public VmInternalDisk(string name, VmInternalDiskArgs args, CustomResourceOptions? options = null)
            : base("vcd:index/vmInternalDisk:VmInternalDisk", name, args ?? new VmInternalDiskArgs(), MakeResourceOptions(options, ""))
        {
        }

        private VmInternalDisk(string name, Input<string> id, VmInternalDiskState? state = null, CustomResourceOptions? options = null)
            : base("vcd:index/vmInternalDisk:VmInternalDisk", name, state, MakeResourceOptions(options, id))
        {
        }

        private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? id)
        {
            var defaultOptions = new CustomResourceOptions
            {
                Version = Utilities.Version,
            };
            var merged = CustomResourceOptions.Merge(defaultOptions, options);
            // Override the ID if one was specified for consistency with other language SDKs.
            merged.Id = id ?? merged.Id;
            return merged;
        }
        /// <summary>
        /// Get an existing VmInternalDisk resource's state with the given name, ID, and optional extra
        /// properties used to qualify the lookup.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resulting resource.</param>
        /// <param name="id">The unique provider ID of the resource to lookup.</param>
        /// <param name="state">Any extra arguments used during the lookup.</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public static VmInternalDisk Get(string name, Input<string> id, VmInternalDiskState? state = null, CustomResourceOptions? options = null)
        {
            return new VmInternalDisk(name, id, state, options);
        }
    }

    public sealed class VmInternalDiskArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Powers off VM when changing any attribute of an IDE disk or unit/bus number of other disk types, after the change is
        /// complete VM is powered back on. Without this setting enabled, such changes on a powered-on VM would fail.
        /// </summary>
        [Input("allowVmReboot")]
        public Input<bool>? AllowVmReboot { get; set; }

        /// <summary>
        /// The number of the SCSI or IDE controller itself.
        /// </summary>
        [Input("busNumber", required: true)]
        public Input<int> BusNumber { get; set; } = null!;

        /// <summary>
        /// The type of disk controller. Possible values: ide, parallel( LSI Logic Parallel SCSI), sas(LSI Logic SAS (SCSI)),
        /// paravirtual(Paravirtual (SCSI)), sata, nvme
        /// </summary>
        [Input("busType", required: true)]
        public Input<string> BusType { get; set; } = null!;

        /// <summary>
        /// Specifies the IOPS for the disk.
        /// </summary>
        [Input("iops")]
        public Input<int>? Iops { get; set; }

        /// <summary>
        /// The name of organization to use, optional if defined at provider level. Useful when connected as sysadmin working across
        /// different organizations
        /// </summary>
        [Input("org")]
        public Input<string>? Org { get; set; }

        /// <summary>
        /// The size of the disk in MB.
        /// </summary>
        [Input("sizeInMb", required: true)]
        public Input<int> SizeInMb { get; set; } = null!;

        /// <summary>
        /// Storage profile to override the VM default one
        /// </summary>
        [Input("storageProfile")]
        public Input<string>? StorageProfile { get; set; }

        /// <summary>
        /// The device number on the SCSI or IDE controller of the disk.
        /// </summary>
        [Input("unitNumber", required: true)]
        public Input<int> UnitNumber { get; set; } = null!;

        /// <summary>
        /// The vApp this VM internal disk belongs to
        /// </summary>
        [Input("vappName", required: true)]
        public Input<string> VappName { get; set; } = null!;

        /// <summary>
        /// The name of VDC to use, optional if defined at provider level
        /// </summary>
        [Input("vdc")]
        public Input<string>? Vdc { get; set; }

        /// <summary>
        /// VM in vApp in which internal disk is created
        /// </summary>
        [Input("vmName", required: true)]
        public Input<string> VmName { get; set; } = null!;

        public VmInternalDiskArgs()
        {
        }
        public static new VmInternalDiskArgs Empty => new VmInternalDiskArgs();
    }

    public sealed class VmInternalDiskState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Powers off VM when changing any attribute of an IDE disk or unit/bus number of other disk types, after the change is
        /// complete VM is powered back on. Without this setting enabled, such changes on a powered-on VM would fail.
        /// </summary>
        [Input("allowVmReboot")]
        public Input<bool>? AllowVmReboot { get; set; }

        /// <summary>
        /// The number of the SCSI or IDE controller itself.
        /// </summary>
        [Input("busNumber")]
        public Input<int>? BusNumber { get; set; }

        /// <summary>
        /// The type of disk controller. Possible values: ide, parallel( LSI Logic Parallel SCSI), sas(LSI Logic SAS (SCSI)),
        /// paravirtual(Paravirtual (SCSI)), sata, nvme
        /// </summary>
        [Input("busType")]
        public Input<string>? BusType { get; set; }

        /// <summary>
        /// Specifies the IOPS for the disk.
        /// </summary>
        [Input("iops")]
        public Input<int>? Iops { get; set; }

        /// <summary>
        /// The name of organization to use, optional if defined at provider level. Useful when connected as sysadmin working across
        /// different organizations
        /// </summary>
        [Input("org")]
        public Input<string>? Org { get; set; }

        /// <summary>
        /// The size of the disk in MB.
        /// </summary>
        [Input("sizeInMb")]
        public Input<int>? SizeInMb { get; set; }

        /// <summary>
        /// Storage profile to override the VM default one
        /// </summary>
        [Input("storageProfile")]
        public Input<string>? StorageProfile { get; set; }

        /// <summary>
        /// Specifies whether the disk storage is pre-allocated or allocated on demand.
        /// </summary>
        [Input("thinProvisioned")]
        public Input<bool>? ThinProvisioned { get; set; }

        /// <summary>
        /// The device number on the SCSI or IDE controller of the disk.
        /// </summary>
        [Input("unitNumber")]
        public Input<int>? UnitNumber { get; set; }

        /// <summary>
        /// The vApp this VM internal disk belongs to
        /// </summary>
        [Input("vappName")]
        public Input<string>? VappName { get; set; }

        /// <summary>
        /// The name of VDC to use, optional if defined at provider level
        /// </summary>
        [Input("vdc")]
        public Input<string>? Vdc { get; set; }

        /// <summary>
        /// VM in vApp in which internal disk is created
        /// </summary>
        [Input("vmName")]
        public Input<string>? VmName { get; set; }

        public VmInternalDiskState()
        {
        }
        public static new VmInternalDiskState Empty => new VmInternalDiskState();
    }
}
