// *** 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.Kops
{
    /// <summary>
    /// ## Import
    /// 
    /// You can import an existing cluster by creating a `kops_instance_group` configuration
    /// 
    /// ```sh
    ///  $ pulumi import kops:index/instanceGroup:InstanceGroup and running the `terraform import` command
    /// ```
    /// 
    ///  1. Create a terraform configuration:
    /// 
    ///  hcl
    /// 
    ///  provider "kops" {
    /// 
    ///  state_store = "s3://cluster.example.com"
    /// 
    ///  }
    /// 
    ///  resource "kops_instance_group" "ig-0" {
    /// 
    ///  cluster_name = "cluster.example.com"
    /// 
    ///  name
    /// 
    ///  = "ig-0"
    /// 
    ///  // ....
    /// 
    ///  }
    /// 
    /// ```sh
    ///  $ pulumi import kops:index/instanceGroup:InstanceGroup
    /// 
    /// Run `terraform import`
    /// ```
    /// 
    /// ```sh
    ///  $ pulumi import kops:index/instanceGroup:InstanceGroup kops_instance_group.ig-0 cluster.example.com/ig-0
    /// ```
    /// 
    ///  ~&gt; The id of the instance group to be imported must be given in the
    /// 
    /// `cluster name/instance group name` format.
    /// </summary>
    [KopsResourceType("kops:index/instanceGroup:InstanceGroup")]
    public partial class InstanceGroup : global::Pulumi.CustomResource
    {
        /// <summary>
        /// - List(String) - AdditionalSecurityGroups attaches additional security groups (e.g. i-123456).
        /// </summary>
        [Output("additionalSecurityGroups")]
        public Output<ImmutableArray<string>> AdditionalSecurityGroups { get; private set; } = null!;

        /// <summary>
        /// - List(user_data) - AdditionalUserData is any additional user-data to be passed to the host.
        /// </summary>
        [Output("additionalUserDatas")]
        public Output<ImmutableArray<Outputs.InstanceGroupAdditionalUserData>> AdditionalUserDatas { get; private set; } = null!;

        /// <summary>
        /// - Map(String) - Annotations is an unstructured key value map stored with a resource that may be&lt;br /&gt;set by external tools to store and retrieve arbitrary metadata. They are not&lt;br /&gt;queryable and should be preserved when modifying objects.
        /// </summary>
        [Output("annotations")]
        public Output<ImmutableDictionary<string, string>?> Annotations { get; private set; } = null!;

        /// <summary>
        /// - Bool - AssociatePublicIP is true if we want instances to have a public IP.
        /// </summary>
        [Output("associatePublicIp")]
        public Output<bool?> AssociatePublicIp { get; private set; } = null!;

        /// <summary>
        /// - Bool - Autoscale determines if autoscaling will be enabled for this instance group if cluster autoscaler is enabled.
        /// </summary>
        [Output("autoscale")]
        public Output<bool?> Autoscale { get; private set; } = null!;

        /// <summary>
        /// - Map(String) - CloudLabels defines additional tags or labels on cloud provider resources.
        /// </summary>
        [Output("cloudLabels")]
        public Output<ImmutableDictionary<string, string>?> CloudLabels { get; private set; } = null!;

        /// <summary>
        /// - (Force new) - String - ClusterName defines the cluster name the instance group belongs to.
        /// </summary>
        [Output("clusterName")]
        public Output<string> ClusterName { get; private set; } = null!;

        /// <summary>
        /// - Bool - CompressUserData compresses parts of the user data to save space.
        /// </summary>
        [Output("compressUserData")]
        public Output<bool?> CompressUserData { get; private set; } = null!;

        /// <summary>
        /// - containerd_config - Containerd specifies override configuration for instance group.
        /// </summary>
        [Output("containerd")]
        public Output<Outputs.InstanceGroupContainerd?> Containerd { get; private set; } = null!;

        /// <summary>
        /// - String - CPUCredits is the credit option for CPU Usage on burstable instance types (AWS only).
        /// </summary>
        [Output("cpuCredits")]
        public Output<string?> CpuCredits { get; private set; } = null!;

        /// <summary>
        /// - Bool - DetailedInstanceMonitoring defines if detailed-monitoring is enabled (AWS only).
        /// </summary>
        [Output("detailedInstanceMonitoring")]
        public Output<bool?> DetailedInstanceMonitoring { get; private set; } = null!;

        /// <summary>
        /// - List(load_balancer) - ExternalLoadBalancers define loadbalancers that should be attached to this instance group.
        /// </summary>
        [Output("externalLoadBalancers")]
        public Output<ImmutableArray<Outputs.InstanceGroupExternalLoadBalancer>> ExternalLoadBalancers { get; private set; } = null!;

        /// <summary>
        /// - List(file_asset_spec) - FileAssets is a collection of file assets for this instance group.
        /// </summary>
        [Output("fileAssets")]
        public Output<ImmutableArray<Outputs.InstanceGroupFileAsset>> FileAssets { get; private set; } = null!;

        /// <summary>
        /// - String - GCPProvisioningModel: Specifies the provisioning model of the GCP instance.&lt;br /&gt;Valid values:&lt;br /&gt;  'STANDARD': (default) standard provisioning with user controlled run time, no discounts&lt;br /&gt;  'SPOT': heavily discounted, no guaranteed run time.
        /// </summary>
        [Output("gcpProvisioningModel")]
        public Output<string?> GcpProvisioningModel { get; private set; } = null!;

        /// <summary>
        /// - List(accelerator_config) - GuestAccelerators configures additional accelerators.
        /// </summary>
        [Output("guestAccelerators")]
        public Output<ImmutableArray<Outputs.InstanceGroupGuestAccelerator>> GuestAccelerators { get; private set; } = null!;

        /// <summary>
        /// - List(hook_spec) - Hooks is a list of hooks for this instance group, note: these can override the cluster wide ones if required.
        /// </summary>
        [Output("hooks")]
        public Output<ImmutableArray<Outputs.InstanceGroupHook>> Hooks { get; private set; } = null!;

        /// <summary>
        /// - iam_profile_spec - IAMProfileSpec defines the identity of the cloud group IAM profile (AWS only).
        /// </summary>
        [Output("iam")]
        public Output<Outputs.InstanceGroupIam?> Iam { get; private set; } = null!;

        /// <summary>
        /// - (Computed) - String - Image is the instance (ami etc) we should use.
        /// </summary>
        [Output("image")]
        public Output<string> Image { get; private set; } = null!;

        /// <summary>
        /// - String - InstanceInterruptionBehavior defines if a spot instance should be terminated, hibernated,&lt;br /&gt;or stopped after interruption.
        /// </summary>
        [Output("instanceInterruptionBehavior")]
        public Output<string?> InstanceInterruptionBehavior { get; private set; } = null!;

        /// <summary>
        /// - instance_metadata_options - InstanceMetadata defines the EC2 instance metadata service options (AWS Only).
        /// </summary>
        [Output("instanceMetadata")]
        public Output<Outputs.InstanceGroupInstanceMetadata?> InstanceMetadata { get; private set; } = null!;

        /// <summary>
        /// - Bool - InstanceProtection makes new instances in an autoscaling group protected from scale in.
        /// </summary>
        [Output("instanceProtection")]
        public Output<bool?> InstanceProtection { get; private set; } = null!;

        /// <summary>
        /// - (Computed) - kubelet_config_spec - Kubelet overrides kubelet config from the ClusterSpec.
        /// </summary>
        [Output("kubelet")]
        public Output<Outputs.InstanceGroupKubelet> Kubelet { get; private set; } = null!;

        /// <summary>
        /// - Map(String) - Map of string keys and values that can be used to organize and categorize&lt;br /&gt;(scope and select) objects. May match selectors of replication controllers&lt;br /&gt;and services.
        /// </summary>
        [Output("labels")]
        public Output<ImmutableDictionary<string, string>?> Labels { get; private set; } = null!;

        /// <summary>
        /// - String - MachineType is the instance class.
        /// </summary>
        [Output("machineType")]
        public Output<string> MachineType { get; private set; } = null!;

        /// <summary>
        /// - (Computed) - String - Manager determines what is managing the node lifecycle.
        /// </summary>
        [Output("manager")]
        public Output<string> Manager { get; private set; } = null!;

        /// <summary>
        /// - Duration - MaxInstanceLifetime to the maximum amount of time, in seconds, that an instance can be in service.&lt;br /&gt;Value expected must be in form of duration ("ms", "s", "m", "h").
        /// </summary>
        [Output("maxInstanceLifetime")]
        public Output<string?> MaxInstanceLifetime { get; private set; } = null!;

        /// <summary>
        /// - String - MaxPrice indicates this is a spot-pricing group, with the specified value as our max-price bid.
        /// </summary>
        [Output("maxPrice")]
        public Output<string?> MaxPrice { get; private set; } = null!;

        /// <summary>
        /// - Int - MaxSize is the maximum size of the pool.
        /// </summary>
        [Output("maxSize")]
        public Output<int> MaxSize { get; private set; } = null!;

        /// <summary>
        /// - Int - MinSize is the minimum size of the pool.
        /// </summary>
        [Output("minSize")]
        public Output<int> MinSize { get; private set; } = null!;

        /// <summary>
        /// - mixed_instances_policy_spec - MixedInstancesPolicy defined a optional backing of an AWS ASG by a EC2 Fleet (AWS Only).
        /// </summary>
        [Output("mixedInstancesPolicy")]
        public Output<Outputs.InstanceGroupMixedInstancesPolicy?> MixedInstancesPolicy { get; private set; } = null!;

        /// <summary>
        /// - (Force new) - String - Name defines the instance group name.
        /// </summary>
        [Output("name")]
        public Output<string> Name { get; private set; } = null!;

        /// <summary>
        /// - Map(String) - NodeLabels indicates the kubernetes labels for nodes in this instance group.
        /// </summary>
        [Output("nodeLabels")]
        public Output<ImmutableDictionary<string, string>?> NodeLabels { get; private set; } = null!;

        /// <summary>
        /// - List(String) - Packages specifies additional packages to be installed.
        /// </summary>
        [Output("packages")]
        public Output<ImmutableArray<string>> Packages { get; private set; } = null!;

        /// <summary>
        /// - Int - Revision is incremented every time the resource changes, this is useful for triggering cluster updater.
        /// </summary>
        [Output("revision")]
        public Output<int> Revision { get; private set; } = null!;

        /// <summary>
        /// - String - Type determines the role of instances in this instance group: masters or nodes.
        /// </summary>
        [Output("role")]
        public Output<string> Role { get; private set; } = null!;

        /// <summary>
        /// - rolling_update - RollingUpdate defines the rolling-update behavior.
        /// </summary>
        [Output("rollingUpdate")]
        public Output<Outputs.InstanceGroupRollingUpdate?> RollingUpdate { get; private set; } = null!;

        /// <summary>
        /// - Bool - RootVolumeEncryption enables EBS root volume encryption for an instance.
        /// </summary>
        [Output("rootVolumeEncryption")]
        public Output<bool?> RootVolumeEncryption { get; private set; } = null!;

        /// <summary>
        /// - String - RootVolumeEncryptionKey provides the key identifier for root volume encryption.
        /// </summary>
        [Output("rootVolumeEncryptionKey")]
        public Output<string?> RootVolumeEncryptionKey { get; private set; } = null!;

        /// <summary>
        /// - Int - RootVolumeIOPS is the provisioned IOPS when the volume type is io1, io2 or gp3 (AWS only).
        /// </summary>
        [Output("rootVolumeIops")]
        public Output<int?> RootVolumeIops { get; private set; } = null!;

        /// <summary>
        /// - Bool - RootVolumeOptimization enables EBS optimization for an instance.
        /// </summary>
        [Output("rootVolumeOptimization")]
        public Output<bool?> RootVolumeOptimization { get; private set; } = null!;

        /// <summary>
        /// - Int - RootVolumeSize is the size of the EBS root volume to use, in GB.
        /// </summary>
        [Output("rootVolumeSize")]
        public Output<int?> RootVolumeSize { get; private set; } = null!;

        /// <summary>
        /// - Int - RootVolumeThroughput is the volume throughput in MBps when the volume type is gp3 (AWS only).
        /// </summary>
        [Output("rootVolumeThroughput")]
        public Output<int?> RootVolumeThroughput { get; private set; } = null!;

        /// <summary>
        /// - String - RootVolumeType is the type of the EBS root volume to use (e.g. gp2).
        /// </summary>
        [Output("rootVolumeType")]
        public Output<string?> RootVolumeType { get; private set; } = null!;

        /// <summary>
        /// - String - SecurityGroupOverride overrides the default security group created by Kops for this IG (AWS only).
        /// </summary>
        [Output("securityGroupOverride")]
        public Output<string?> SecurityGroupOverride { get; private set; } = null!;

        /// <summary>
        /// - Int - SpotDurationInMinutes reserves a spot block for the period specified.
        /// </summary>
        [Output("spotDurationInMinutes")]
        public Output<int?> SpotDurationInMinutes { get; private set; } = null!;

        /// <summary>
        /// - List(String) - Subnets is the names of the Subnets (as specified in the Cluster) where machines in this instance group should be placed.
        /// </summary>
        [Output("subnets")]
        public Output<ImmutableArray<string>> Subnets { get; private set; } = null!;

        /// <summary>
        /// - List(String) - SuspendProcesses disables the listed Scaling Policies.
        /// </summary>
        [Output("suspendProcesses")]
        public Output<ImmutableArray<string>> SuspendProcesses { get; private set; } = null!;

        /// <summary>
        /// - List(String) - SysctlParameters will configure kernel parameters using sysctl(8). When&lt;br /&gt;specified, each parameter must follow the form variable=value, the way&lt;br /&gt;it would appear in sysctl.conf.
        /// </summary>
        [Output("sysctlParameters")]
        public Output<ImmutableArray<string>> SysctlParameters { get; private set; } = null!;

        /// <summary>
        /// - List(String) - Taints indicates the kubernetes taints for nodes in this instance group.
        /// </summary>
        [Output("taints")]
        public Output<ImmutableArray<string>> Taints { get; private set; } = null!;

        /// <summary>
        /// - String - Describes the tenancy of this instance group. Can be either default or dedicated. Currently only applies to AWS.
        /// </summary>
        [Output("tenancy")]
        public Output<string?> Tenancy { get; private set; } = null!;

        /// <summary>
        /// - String - UpdatePolicy determines the policy for applying upgrades automatically.&lt;br /&gt;If specified, this value overrides a value specified in the Cluster's "spec.updatePolicy" field.&lt;br /&gt;Valid values:&lt;br /&gt;  'automatic' (default): apply updates automatically (apply OS security upgrades, avoiding rebooting when possible)&lt;br /&gt;  'external': do not apply updates automatically; they are applied manually or by an external system.
        /// </summary>
        [Output("updatePolicy")]
        public Output<string?> UpdatePolicy { get; private set; } = null!;

        /// <summary>
        /// - List(volume_mount_spec) - VolumeMounts a collection of volume mounts.
        /// </summary>
        [Output("volumeMounts")]
        public Output<ImmutableArray<Outputs.InstanceGroupVolumeMount>> VolumeMounts { get; private set; } = null!;

        /// <summary>
        /// - List(volume_spec) - Volumes is a collection of additional volumes to create for instances within this instance group.
        /// </summary>
        [Output("volumes")]
        public Output<ImmutableArray<Outputs.InstanceGroupVolume>> Volumes { get; private set; } = null!;

        /// <summary>
        /// - warm_pool_spec - WarmPool specifies a pool of pre-warmed instances for later use (AWS only).
        /// </summary>
        [Output("warmPool")]
        public Output<Outputs.InstanceGroupWarmPool?> WarmPool { get; private set; } = null!;

        /// <summary>
        /// - List(String) - Zones is the names of the Zones where machines in this instance group should be placed&lt;br /&gt;This is needed for regional subnets (e.g. GCE), to restrict placement to particular zones.
        /// </summary>
        [Output("zones")]
        public Output<ImmutableArray<string>> Zones { get; private set; } = null!;


        /// <summary>
        /// Create a InstanceGroup 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 InstanceGroup(string name, InstanceGroupArgs args, CustomResourceOptions? options = null)
            : base("kops:index/instanceGroup:InstanceGroup", name, args ?? new InstanceGroupArgs(), MakeResourceOptions(options, ""))
        {
        }

        private InstanceGroup(string name, Input<string> id, InstanceGroupState? state = null, CustomResourceOptions? options = null)
            : base("kops:index/instanceGroup:InstanceGroup", 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 InstanceGroup 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 InstanceGroup Get(string name, Input<string> id, InstanceGroupState? state = null, CustomResourceOptions? options = null)
        {
            return new InstanceGroup(name, id, state, options);
        }
    }

    public sealed class InstanceGroupArgs : global::Pulumi.ResourceArgs
    {
        [Input("additionalSecurityGroups")]
        private InputList<string>? _additionalSecurityGroups;

        /// <summary>
        /// - List(String) - AdditionalSecurityGroups attaches additional security groups (e.g. i-123456).
        /// </summary>
        public InputList<string> AdditionalSecurityGroups
        {
            get => _additionalSecurityGroups ?? (_additionalSecurityGroups = new InputList<string>());
            set => _additionalSecurityGroups = value;
        }

        [Input("additionalUserDatas")]
        private InputList<Inputs.InstanceGroupAdditionalUserDataArgs>? _additionalUserDatas;

        /// <summary>
        /// - List(user_data) - AdditionalUserData is any additional user-data to be passed to the host.
        /// </summary>
        public InputList<Inputs.InstanceGroupAdditionalUserDataArgs> AdditionalUserDatas
        {
            get => _additionalUserDatas ?? (_additionalUserDatas = new InputList<Inputs.InstanceGroupAdditionalUserDataArgs>());
            set => _additionalUserDatas = value;
        }

        [Input("annotations")]
        private InputMap<string>? _annotations;

        /// <summary>
        /// - Map(String) - Annotations is an unstructured key value map stored with a resource that may be&lt;br /&gt;set by external tools to store and retrieve arbitrary metadata. They are not&lt;br /&gt;queryable and should be preserved when modifying objects.
        /// </summary>
        public InputMap<string> Annotations
        {
            get => _annotations ?? (_annotations = new InputMap<string>());
            set => _annotations = value;
        }

        /// <summary>
        /// - Bool - AssociatePublicIP is true if we want instances to have a public IP.
        /// </summary>
        [Input("associatePublicIp")]
        public Input<bool>? AssociatePublicIp { get; set; }

        /// <summary>
        /// - Bool - Autoscale determines if autoscaling will be enabled for this instance group if cluster autoscaler is enabled.
        /// </summary>
        [Input("autoscale")]
        public Input<bool>? Autoscale { get; set; }

        [Input("cloudLabels")]
        private InputMap<string>? _cloudLabels;

        /// <summary>
        /// - Map(String) - CloudLabels defines additional tags or labels on cloud provider resources.
        /// </summary>
        public InputMap<string> CloudLabels
        {
            get => _cloudLabels ?? (_cloudLabels = new InputMap<string>());
            set => _cloudLabels = value;
        }

        /// <summary>
        /// - (Force new) - String - ClusterName defines the cluster name the instance group belongs to.
        /// </summary>
        [Input("clusterName", required: true)]
        public Input<string> ClusterName { get; set; } = null!;

        /// <summary>
        /// - Bool - CompressUserData compresses parts of the user data to save space.
        /// </summary>
        [Input("compressUserData")]
        public Input<bool>? CompressUserData { get; set; }

        /// <summary>
        /// - containerd_config - Containerd specifies override configuration for instance group.
        /// </summary>
        [Input("containerd")]
        public Input<Inputs.InstanceGroupContainerdArgs>? Containerd { get; set; }

        /// <summary>
        /// - String - CPUCredits is the credit option for CPU Usage on burstable instance types (AWS only).
        /// </summary>
        [Input("cpuCredits")]
        public Input<string>? CpuCredits { get; set; }

        /// <summary>
        /// - Bool - DetailedInstanceMonitoring defines if detailed-monitoring is enabled (AWS only).
        /// </summary>
        [Input("detailedInstanceMonitoring")]
        public Input<bool>? DetailedInstanceMonitoring { get; set; }

        [Input("externalLoadBalancers")]
        private InputList<Inputs.InstanceGroupExternalLoadBalancerArgs>? _externalLoadBalancers;

        /// <summary>
        /// - List(load_balancer) - ExternalLoadBalancers define loadbalancers that should be attached to this instance group.
        /// </summary>
        public InputList<Inputs.InstanceGroupExternalLoadBalancerArgs> ExternalLoadBalancers
        {
            get => _externalLoadBalancers ?? (_externalLoadBalancers = new InputList<Inputs.InstanceGroupExternalLoadBalancerArgs>());
            set => _externalLoadBalancers = value;
        }

        [Input("fileAssets")]
        private InputList<Inputs.InstanceGroupFileAssetArgs>? _fileAssets;

        /// <summary>
        /// - List(file_asset_spec) - FileAssets is a collection of file assets for this instance group.
        /// </summary>
        public InputList<Inputs.InstanceGroupFileAssetArgs> FileAssets
        {
            get => _fileAssets ?? (_fileAssets = new InputList<Inputs.InstanceGroupFileAssetArgs>());
            set => _fileAssets = value;
        }

        /// <summary>
        /// - String - GCPProvisioningModel: Specifies the provisioning model of the GCP instance.&lt;br /&gt;Valid values:&lt;br /&gt;  'STANDARD': (default) standard provisioning with user controlled run time, no discounts&lt;br /&gt;  'SPOT': heavily discounted, no guaranteed run time.
        /// </summary>
        [Input("gcpProvisioningModel")]
        public Input<string>? GcpProvisioningModel { get; set; }

        [Input("guestAccelerators")]
        private InputList<Inputs.InstanceGroupGuestAcceleratorArgs>? _guestAccelerators;

        /// <summary>
        /// - List(accelerator_config) - GuestAccelerators configures additional accelerators.
        /// </summary>
        public InputList<Inputs.InstanceGroupGuestAcceleratorArgs> GuestAccelerators
        {
            get => _guestAccelerators ?? (_guestAccelerators = new InputList<Inputs.InstanceGroupGuestAcceleratorArgs>());
            set => _guestAccelerators = value;
        }

        [Input("hooks")]
        private InputList<Inputs.InstanceGroupHookArgs>? _hooks;

        /// <summary>
        /// - List(hook_spec) - Hooks is a list of hooks for this instance group, note: these can override the cluster wide ones if required.
        /// </summary>
        public InputList<Inputs.InstanceGroupHookArgs> Hooks
        {
            get => _hooks ?? (_hooks = new InputList<Inputs.InstanceGroupHookArgs>());
            set => _hooks = value;
        }

        /// <summary>
        /// - iam_profile_spec - IAMProfileSpec defines the identity of the cloud group IAM profile (AWS only).
        /// </summary>
        [Input("iam")]
        public Input<Inputs.InstanceGroupIamArgs>? Iam { get; set; }

        /// <summary>
        /// - (Computed) - String - Image is the instance (ami etc) we should use.
        /// </summary>
        [Input("image")]
        public Input<string>? Image { get; set; }

        /// <summary>
        /// - String - InstanceInterruptionBehavior defines if a spot instance should be terminated, hibernated,&lt;br /&gt;or stopped after interruption.
        /// </summary>
        [Input("instanceInterruptionBehavior")]
        public Input<string>? InstanceInterruptionBehavior { get; set; }

        /// <summary>
        /// - instance_metadata_options - InstanceMetadata defines the EC2 instance metadata service options (AWS Only).
        /// </summary>
        [Input("instanceMetadata")]
        public Input<Inputs.InstanceGroupInstanceMetadataArgs>? InstanceMetadata { get; set; }

        /// <summary>
        /// - Bool - InstanceProtection makes new instances in an autoscaling group protected from scale in.
        /// </summary>
        [Input("instanceProtection")]
        public Input<bool>? InstanceProtection { get; set; }

        /// <summary>
        /// - (Computed) - kubelet_config_spec - Kubelet overrides kubelet config from the ClusterSpec.
        /// </summary>
        [Input("kubelet")]
        public Input<Inputs.InstanceGroupKubeletArgs>? Kubelet { get; set; }

        [Input("labels")]
        private InputMap<string>? _labels;

        /// <summary>
        /// - Map(String) - Map of string keys and values that can be used to organize and categorize&lt;br /&gt;(scope and select) objects. May match selectors of replication controllers&lt;br /&gt;and services.
        /// </summary>
        public InputMap<string> Labels
        {
            get => _labels ?? (_labels = new InputMap<string>());
            set => _labels = value;
        }

        /// <summary>
        /// - String - MachineType is the instance class.
        /// </summary>
        [Input("machineType", required: true)]
        public Input<string> MachineType { get; set; } = null!;

        /// <summary>
        /// - (Computed) - String - Manager determines what is managing the node lifecycle.
        /// </summary>
        [Input("manager")]
        public Input<string>? Manager { get; set; }

        /// <summary>
        /// - Duration - MaxInstanceLifetime to the maximum amount of time, in seconds, that an instance can be in service.&lt;br /&gt;Value expected must be in form of duration ("ms", "s", "m", "h").
        /// </summary>
        [Input("maxInstanceLifetime")]
        public Input<string>? MaxInstanceLifetime { get; set; }

        /// <summary>
        /// - String - MaxPrice indicates this is a spot-pricing group, with the specified value as our max-price bid.
        /// </summary>
        [Input("maxPrice")]
        public Input<string>? MaxPrice { get; set; }

        /// <summary>
        /// - Int - MaxSize is the maximum size of the pool.
        /// </summary>
        [Input("maxSize", required: true)]
        public Input<int> MaxSize { get; set; } = null!;

        /// <summary>
        /// - Int - MinSize is the minimum size of the pool.
        /// </summary>
        [Input("minSize", required: true)]
        public Input<int> MinSize { get; set; } = null!;

        /// <summary>
        /// - mixed_instances_policy_spec - MixedInstancesPolicy defined a optional backing of an AWS ASG by a EC2 Fleet (AWS Only).
        /// </summary>
        [Input("mixedInstancesPolicy")]
        public Input<Inputs.InstanceGroupMixedInstancesPolicyArgs>? MixedInstancesPolicy { get; set; }

        /// <summary>
        /// - (Force new) - String - Name defines the instance group name.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        [Input("nodeLabels")]
        private InputMap<string>? _nodeLabels;

        /// <summary>
        /// - Map(String) - NodeLabels indicates the kubernetes labels for nodes in this instance group.
        /// </summary>
        public InputMap<string> NodeLabels
        {
            get => _nodeLabels ?? (_nodeLabels = new InputMap<string>());
            set => _nodeLabels = value;
        }

        [Input("packages")]
        private InputList<string>? _packages;

        /// <summary>
        /// - List(String) - Packages specifies additional packages to be installed.
        /// </summary>
        public InputList<string> Packages
        {
            get => _packages ?? (_packages = new InputList<string>());
            set => _packages = value;
        }

        /// <summary>
        /// - String - Type determines the role of instances in this instance group: masters or nodes.
        /// </summary>
        [Input("role", required: true)]
        public Input<string> Role { get; set; } = null!;

        /// <summary>
        /// - rolling_update - RollingUpdate defines the rolling-update behavior.
        /// </summary>
        [Input("rollingUpdate")]
        public Input<Inputs.InstanceGroupRollingUpdateArgs>? RollingUpdate { get; set; }

        /// <summary>
        /// - Bool - RootVolumeEncryption enables EBS root volume encryption for an instance.
        /// </summary>
        [Input("rootVolumeEncryption")]
        public Input<bool>? RootVolumeEncryption { get; set; }

        /// <summary>
        /// - String - RootVolumeEncryptionKey provides the key identifier for root volume encryption.
        /// </summary>
        [Input("rootVolumeEncryptionKey")]
        public Input<string>? RootVolumeEncryptionKey { get; set; }

        /// <summary>
        /// - Int - RootVolumeIOPS is the provisioned IOPS when the volume type is io1, io2 or gp3 (AWS only).
        /// </summary>
        [Input("rootVolumeIops")]
        public Input<int>? RootVolumeIops { get; set; }

        /// <summary>
        /// - Bool - RootVolumeOptimization enables EBS optimization for an instance.
        /// </summary>
        [Input("rootVolumeOptimization")]
        public Input<bool>? RootVolumeOptimization { get; set; }

        /// <summary>
        /// - Int - RootVolumeSize is the size of the EBS root volume to use, in GB.
        /// </summary>
        [Input("rootVolumeSize")]
        public Input<int>? RootVolumeSize { get; set; }

        /// <summary>
        /// - Int - RootVolumeThroughput is the volume throughput in MBps when the volume type is gp3 (AWS only).
        /// </summary>
        [Input("rootVolumeThroughput")]
        public Input<int>? RootVolumeThroughput { get; set; }

        /// <summary>
        /// - String - RootVolumeType is the type of the EBS root volume to use (e.g. gp2).
        /// </summary>
        [Input("rootVolumeType")]
        public Input<string>? RootVolumeType { get; set; }

        /// <summary>
        /// - String - SecurityGroupOverride overrides the default security group created by Kops for this IG (AWS only).
        /// </summary>
        [Input("securityGroupOverride")]
        public Input<string>? SecurityGroupOverride { get; set; }

        /// <summary>
        /// - Int - SpotDurationInMinutes reserves a spot block for the period specified.
        /// </summary>
        [Input("spotDurationInMinutes")]
        public Input<int>? SpotDurationInMinutes { get; set; }

        [Input("subnets", required: true)]
        private InputList<string>? _subnets;

        /// <summary>
        /// - List(String) - Subnets is the names of the Subnets (as specified in the Cluster) where machines in this instance group should be placed.
        /// </summary>
        public InputList<string> Subnets
        {
            get => _subnets ?? (_subnets = new InputList<string>());
            set => _subnets = value;
        }

        [Input("suspendProcesses")]
        private InputList<string>? _suspendProcesses;

        /// <summary>
        /// - List(String) - SuspendProcesses disables the listed Scaling Policies.
        /// </summary>
        public InputList<string> SuspendProcesses
        {
            get => _suspendProcesses ?? (_suspendProcesses = new InputList<string>());
            set => _suspendProcesses = value;
        }

        [Input("sysctlParameters")]
        private InputList<string>? _sysctlParameters;

        /// <summary>
        /// - List(String) - SysctlParameters will configure kernel parameters using sysctl(8). When&lt;br /&gt;specified, each parameter must follow the form variable=value, the way&lt;br /&gt;it would appear in sysctl.conf.
        /// </summary>
        public InputList<string> SysctlParameters
        {
            get => _sysctlParameters ?? (_sysctlParameters = new InputList<string>());
            set => _sysctlParameters = value;
        }

        [Input("taints")]
        private InputList<string>? _taints;

        /// <summary>
        /// - List(String) - Taints indicates the kubernetes taints for nodes in this instance group.
        /// </summary>
        public InputList<string> Taints
        {
            get => _taints ?? (_taints = new InputList<string>());
            set => _taints = value;
        }

        /// <summary>
        /// - String - Describes the tenancy of this instance group. Can be either default or dedicated. Currently only applies to AWS.
        /// </summary>
        [Input("tenancy")]
        public Input<string>? Tenancy { get; set; }

        /// <summary>
        /// - String - UpdatePolicy determines the policy for applying upgrades automatically.&lt;br /&gt;If specified, this value overrides a value specified in the Cluster's "spec.updatePolicy" field.&lt;br /&gt;Valid values:&lt;br /&gt;  'automatic' (default): apply updates automatically (apply OS security upgrades, avoiding rebooting when possible)&lt;br /&gt;  'external': do not apply updates automatically; they are applied manually or by an external system.
        /// </summary>
        [Input("updatePolicy")]
        public Input<string>? UpdatePolicy { get; set; }

        [Input("volumeMounts")]
        private InputList<Inputs.InstanceGroupVolumeMountArgs>? _volumeMounts;

        /// <summary>
        /// - List(volume_mount_spec) - VolumeMounts a collection of volume mounts.
        /// </summary>
        public InputList<Inputs.InstanceGroupVolumeMountArgs> VolumeMounts
        {
            get => _volumeMounts ?? (_volumeMounts = new InputList<Inputs.InstanceGroupVolumeMountArgs>());
            set => _volumeMounts = value;
        }

        [Input("volumes")]
        private InputList<Inputs.InstanceGroupVolumeArgs>? _volumes;

        /// <summary>
        /// - List(volume_spec) - Volumes is a collection of additional volumes to create for instances within this instance group.
        /// </summary>
        public InputList<Inputs.InstanceGroupVolumeArgs> Volumes
        {
            get => _volumes ?? (_volumes = new InputList<Inputs.InstanceGroupVolumeArgs>());
            set => _volumes = value;
        }

        /// <summary>
        /// - warm_pool_spec - WarmPool specifies a pool of pre-warmed instances for later use (AWS only).
        /// </summary>
        [Input("warmPool")]
        public Input<Inputs.InstanceGroupWarmPoolArgs>? WarmPool { get; set; }

        [Input("zones")]
        private InputList<string>? _zones;

        /// <summary>
        /// - List(String) - Zones is the names of the Zones where machines in this instance group should be placed&lt;br /&gt;This is needed for regional subnets (e.g. GCE), to restrict placement to particular zones.
        /// </summary>
        public InputList<string> Zones
        {
            get => _zones ?? (_zones = new InputList<string>());
            set => _zones = value;
        }

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

    public sealed class InstanceGroupState : global::Pulumi.ResourceArgs
    {
        [Input("additionalSecurityGroups")]
        private InputList<string>? _additionalSecurityGroups;

        /// <summary>
        /// - List(String) - AdditionalSecurityGroups attaches additional security groups (e.g. i-123456).
        /// </summary>
        public InputList<string> AdditionalSecurityGroups
        {
            get => _additionalSecurityGroups ?? (_additionalSecurityGroups = new InputList<string>());
            set => _additionalSecurityGroups = value;
        }

        [Input("additionalUserDatas")]
        private InputList<Inputs.InstanceGroupAdditionalUserDataGetArgs>? _additionalUserDatas;

        /// <summary>
        /// - List(user_data) - AdditionalUserData is any additional user-data to be passed to the host.
        /// </summary>
        public InputList<Inputs.InstanceGroupAdditionalUserDataGetArgs> AdditionalUserDatas
        {
            get => _additionalUserDatas ?? (_additionalUserDatas = new InputList<Inputs.InstanceGroupAdditionalUserDataGetArgs>());
            set => _additionalUserDatas = value;
        }

        [Input("annotations")]
        private InputMap<string>? _annotations;

        /// <summary>
        /// - Map(String) - Annotations is an unstructured key value map stored with a resource that may be&lt;br /&gt;set by external tools to store and retrieve arbitrary metadata. They are not&lt;br /&gt;queryable and should be preserved when modifying objects.
        /// </summary>
        public InputMap<string> Annotations
        {
            get => _annotations ?? (_annotations = new InputMap<string>());
            set => _annotations = value;
        }

        /// <summary>
        /// - Bool - AssociatePublicIP is true if we want instances to have a public IP.
        /// </summary>
        [Input("associatePublicIp")]
        public Input<bool>? AssociatePublicIp { get; set; }

        /// <summary>
        /// - Bool - Autoscale determines if autoscaling will be enabled for this instance group if cluster autoscaler is enabled.
        /// </summary>
        [Input("autoscale")]
        public Input<bool>? Autoscale { get; set; }

        [Input("cloudLabels")]
        private InputMap<string>? _cloudLabels;

        /// <summary>
        /// - Map(String) - CloudLabels defines additional tags or labels on cloud provider resources.
        /// </summary>
        public InputMap<string> CloudLabels
        {
            get => _cloudLabels ?? (_cloudLabels = new InputMap<string>());
            set => _cloudLabels = value;
        }

        /// <summary>
        /// - (Force new) - String - ClusterName defines the cluster name the instance group belongs to.
        /// </summary>
        [Input("clusterName")]
        public Input<string>? ClusterName { get; set; }

        /// <summary>
        /// - Bool - CompressUserData compresses parts of the user data to save space.
        /// </summary>
        [Input("compressUserData")]
        public Input<bool>? CompressUserData { get; set; }

        /// <summary>
        /// - containerd_config - Containerd specifies override configuration for instance group.
        /// </summary>
        [Input("containerd")]
        public Input<Inputs.InstanceGroupContainerdGetArgs>? Containerd { get; set; }

        /// <summary>
        /// - String - CPUCredits is the credit option for CPU Usage on burstable instance types (AWS only).
        /// </summary>
        [Input("cpuCredits")]
        public Input<string>? CpuCredits { get; set; }

        /// <summary>
        /// - Bool - DetailedInstanceMonitoring defines if detailed-monitoring is enabled (AWS only).
        /// </summary>
        [Input("detailedInstanceMonitoring")]
        public Input<bool>? DetailedInstanceMonitoring { get; set; }

        [Input("externalLoadBalancers")]
        private InputList<Inputs.InstanceGroupExternalLoadBalancerGetArgs>? _externalLoadBalancers;

        /// <summary>
        /// - List(load_balancer) - ExternalLoadBalancers define loadbalancers that should be attached to this instance group.
        /// </summary>
        public InputList<Inputs.InstanceGroupExternalLoadBalancerGetArgs> ExternalLoadBalancers
        {
            get => _externalLoadBalancers ?? (_externalLoadBalancers = new InputList<Inputs.InstanceGroupExternalLoadBalancerGetArgs>());
            set => _externalLoadBalancers = value;
        }

        [Input("fileAssets")]
        private InputList<Inputs.InstanceGroupFileAssetGetArgs>? _fileAssets;

        /// <summary>
        /// - List(file_asset_spec) - FileAssets is a collection of file assets for this instance group.
        /// </summary>
        public InputList<Inputs.InstanceGroupFileAssetGetArgs> FileAssets
        {
            get => _fileAssets ?? (_fileAssets = new InputList<Inputs.InstanceGroupFileAssetGetArgs>());
            set => _fileAssets = value;
        }

        /// <summary>
        /// - String - GCPProvisioningModel: Specifies the provisioning model of the GCP instance.&lt;br /&gt;Valid values:&lt;br /&gt;  'STANDARD': (default) standard provisioning with user controlled run time, no discounts&lt;br /&gt;  'SPOT': heavily discounted, no guaranteed run time.
        /// </summary>
        [Input("gcpProvisioningModel")]
        public Input<string>? GcpProvisioningModel { get; set; }

        [Input("guestAccelerators")]
        private InputList<Inputs.InstanceGroupGuestAcceleratorGetArgs>? _guestAccelerators;

        /// <summary>
        /// - List(accelerator_config) - GuestAccelerators configures additional accelerators.
        /// </summary>
        public InputList<Inputs.InstanceGroupGuestAcceleratorGetArgs> GuestAccelerators
        {
            get => _guestAccelerators ?? (_guestAccelerators = new InputList<Inputs.InstanceGroupGuestAcceleratorGetArgs>());
            set => _guestAccelerators = value;
        }

        [Input("hooks")]
        private InputList<Inputs.InstanceGroupHookGetArgs>? _hooks;

        /// <summary>
        /// - List(hook_spec) - Hooks is a list of hooks for this instance group, note: these can override the cluster wide ones if required.
        /// </summary>
        public InputList<Inputs.InstanceGroupHookGetArgs> Hooks
        {
            get => _hooks ?? (_hooks = new InputList<Inputs.InstanceGroupHookGetArgs>());
            set => _hooks = value;
        }

        /// <summary>
        /// - iam_profile_spec - IAMProfileSpec defines the identity of the cloud group IAM profile (AWS only).
        /// </summary>
        [Input("iam")]
        public Input<Inputs.InstanceGroupIamGetArgs>? Iam { get; set; }

        /// <summary>
        /// - (Computed) - String - Image is the instance (ami etc) we should use.
        /// </summary>
        [Input("image")]
        public Input<string>? Image { get; set; }

        /// <summary>
        /// - String - InstanceInterruptionBehavior defines if a spot instance should be terminated, hibernated,&lt;br /&gt;or stopped after interruption.
        /// </summary>
        [Input("instanceInterruptionBehavior")]
        public Input<string>? InstanceInterruptionBehavior { get; set; }

        /// <summary>
        /// - instance_metadata_options - InstanceMetadata defines the EC2 instance metadata service options (AWS Only).
        /// </summary>
        [Input("instanceMetadata")]
        public Input<Inputs.InstanceGroupInstanceMetadataGetArgs>? InstanceMetadata { get; set; }

        /// <summary>
        /// - Bool - InstanceProtection makes new instances in an autoscaling group protected from scale in.
        /// </summary>
        [Input("instanceProtection")]
        public Input<bool>? InstanceProtection { get; set; }

        /// <summary>
        /// - (Computed) - kubelet_config_spec - Kubelet overrides kubelet config from the ClusterSpec.
        /// </summary>
        [Input("kubelet")]
        public Input<Inputs.InstanceGroupKubeletGetArgs>? Kubelet { get; set; }

        [Input("labels")]
        private InputMap<string>? _labels;

        /// <summary>
        /// - Map(String) - Map of string keys and values that can be used to organize and categorize&lt;br /&gt;(scope and select) objects. May match selectors of replication controllers&lt;br /&gt;and services.
        /// </summary>
        public InputMap<string> Labels
        {
            get => _labels ?? (_labels = new InputMap<string>());
            set => _labels = value;
        }

        /// <summary>
        /// - String - MachineType is the instance class.
        /// </summary>
        [Input("machineType")]
        public Input<string>? MachineType { get; set; }

        /// <summary>
        /// - (Computed) - String - Manager determines what is managing the node lifecycle.
        /// </summary>
        [Input("manager")]
        public Input<string>? Manager { get; set; }

        /// <summary>
        /// - Duration - MaxInstanceLifetime to the maximum amount of time, in seconds, that an instance can be in service.&lt;br /&gt;Value expected must be in form of duration ("ms", "s", "m", "h").
        /// </summary>
        [Input("maxInstanceLifetime")]
        public Input<string>? MaxInstanceLifetime { get; set; }

        /// <summary>
        /// - String - MaxPrice indicates this is a spot-pricing group, with the specified value as our max-price bid.
        /// </summary>
        [Input("maxPrice")]
        public Input<string>? MaxPrice { get; set; }

        /// <summary>
        /// - Int - MaxSize is the maximum size of the pool.
        /// </summary>
        [Input("maxSize")]
        public Input<int>? MaxSize { get; set; }

        /// <summary>
        /// - Int - MinSize is the minimum size of the pool.
        /// </summary>
        [Input("minSize")]
        public Input<int>? MinSize { get; set; }

        /// <summary>
        /// - mixed_instances_policy_spec - MixedInstancesPolicy defined a optional backing of an AWS ASG by a EC2 Fleet (AWS Only).
        /// </summary>
        [Input("mixedInstancesPolicy")]
        public Input<Inputs.InstanceGroupMixedInstancesPolicyGetArgs>? MixedInstancesPolicy { get; set; }

        /// <summary>
        /// - (Force new) - String - Name defines the instance group name.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        [Input("nodeLabels")]
        private InputMap<string>? _nodeLabels;

        /// <summary>
        /// - Map(String) - NodeLabels indicates the kubernetes labels for nodes in this instance group.
        /// </summary>
        public InputMap<string> NodeLabels
        {
            get => _nodeLabels ?? (_nodeLabels = new InputMap<string>());
            set => _nodeLabels = value;
        }

        [Input("packages")]
        private InputList<string>? _packages;

        /// <summary>
        /// - List(String) - Packages specifies additional packages to be installed.
        /// </summary>
        public InputList<string> Packages
        {
            get => _packages ?? (_packages = new InputList<string>());
            set => _packages = value;
        }

        /// <summary>
        /// - Int - Revision is incremented every time the resource changes, this is useful for triggering cluster updater.
        /// </summary>
        [Input("revision")]
        public Input<int>? Revision { get; set; }

        /// <summary>
        /// - String - Type determines the role of instances in this instance group: masters or nodes.
        /// </summary>
        [Input("role")]
        public Input<string>? Role { get; set; }

        /// <summary>
        /// - rolling_update - RollingUpdate defines the rolling-update behavior.
        /// </summary>
        [Input("rollingUpdate")]
        public Input<Inputs.InstanceGroupRollingUpdateGetArgs>? RollingUpdate { get; set; }

        /// <summary>
        /// - Bool - RootVolumeEncryption enables EBS root volume encryption for an instance.
        /// </summary>
        [Input("rootVolumeEncryption")]
        public Input<bool>? RootVolumeEncryption { get; set; }

        /// <summary>
        /// - String - RootVolumeEncryptionKey provides the key identifier for root volume encryption.
        /// </summary>
        [Input("rootVolumeEncryptionKey")]
        public Input<string>? RootVolumeEncryptionKey { get; set; }

        /// <summary>
        /// - Int - RootVolumeIOPS is the provisioned IOPS when the volume type is io1, io2 or gp3 (AWS only).
        /// </summary>
        [Input("rootVolumeIops")]
        public Input<int>? RootVolumeIops { get; set; }

        /// <summary>
        /// - Bool - RootVolumeOptimization enables EBS optimization for an instance.
        /// </summary>
        [Input("rootVolumeOptimization")]
        public Input<bool>? RootVolumeOptimization { get; set; }

        /// <summary>
        /// - Int - RootVolumeSize is the size of the EBS root volume to use, in GB.
        /// </summary>
        [Input("rootVolumeSize")]
        public Input<int>? RootVolumeSize { get; set; }

        /// <summary>
        /// - Int - RootVolumeThroughput is the volume throughput in MBps when the volume type is gp3 (AWS only).
        /// </summary>
        [Input("rootVolumeThroughput")]
        public Input<int>? RootVolumeThroughput { get; set; }

        /// <summary>
        /// - String - RootVolumeType is the type of the EBS root volume to use (e.g. gp2).
        /// </summary>
        [Input("rootVolumeType")]
        public Input<string>? RootVolumeType { get; set; }

        /// <summary>
        /// - String - SecurityGroupOverride overrides the default security group created by Kops for this IG (AWS only).
        /// </summary>
        [Input("securityGroupOverride")]
        public Input<string>? SecurityGroupOverride { get; set; }

        /// <summary>
        /// - Int - SpotDurationInMinutes reserves a spot block for the period specified.
        /// </summary>
        [Input("spotDurationInMinutes")]
        public Input<int>? SpotDurationInMinutes { get; set; }

        [Input("subnets")]
        private InputList<string>? _subnets;

        /// <summary>
        /// - List(String) - Subnets is the names of the Subnets (as specified in the Cluster) where machines in this instance group should be placed.
        /// </summary>
        public InputList<string> Subnets
        {
            get => _subnets ?? (_subnets = new InputList<string>());
            set => _subnets = value;
        }

        [Input("suspendProcesses")]
        private InputList<string>? _suspendProcesses;

        /// <summary>
        /// - List(String) - SuspendProcesses disables the listed Scaling Policies.
        /// </summary>
        public InputList<string> SuspendProcesses
        {
            get => _suspendProcesses ?? (_suspendProcesses = new InputList<string>());
            set => _suspendProcesses = value;
        }

        [Input("sysctlParameters")]
        private InputList<string>? _sysctlParameters;

        /// <summary>
        /// - List(String) - SysctlParameters will configure kernel parameters using sysctl(8). When&lt;br /&gt;specified, each parameter must follow the form variable=value, the way&lt;br /&gt;it would appear in sysctl.conf.
        /// </summary>
        public InputList<string> SysctlParameters
        {
            get => _sysctlParameters ?? (_sysctlParameters = new InputList<string>());
            set => _sysctlParameters = value;
        }

        [Input("taints")]
        private InputList<string>? _taints;

        /// <summary>
        /// - List(String) - Taints indicates the kubernetes taints for nodes in this instance group.
        /// </summary>
        public InputList<string> Taints
        {
            get => _taints ?? (_taints = new InputList<string>());
            set => _taints = value;
        }

        /// <summary>
        /// - String - Describes the tenancy of this instance group. Can be either default or dedicated. Currently only applies to AWS.
        /// </summary>
        [Input("tenancy")]
        public Input<string>? Tenancy { get; set; }

        /// <summary>
        /// - String - UpdatePolicy determines the policy for applying upgrades automatically.&lt;br /&gt;If specified, this value overrides a value specified in the Cluster's "spec.updatePolicy" field.&lt;br /&gt;Valid values:&lt;br /&gt;  'automatic' (default): apply updates automatically (apply OS security upgrades, avoiding rebooting when possible)&lt;br /&gt;  'external': do not apply updates automatically; they are applied manually or by an external system.
        /// </summary>
        [Input("updatePolicy")]
        public Input<string>? UpdatePolicy { get; set; }

        [Input("volumeMounts")]
        private InputList<Inputs.InstanceGroupVolumeMountGetArgs>? _volumeMounts;

        /// <summary>
        /// - List(volume_mount_spec) - VolumeMounts a collection of volume mounts.
        /// </summary>
        public InputList<Inputs.InstanceGroupVolumeMountGetArgs> VolumeMounts
        {
            get => _volumeMounts ?? (_volumeMounts = new InputList<Inputs.InstanceGroupVolumeMountGetArgs>());
            set => _volumeMounts = value;
        }

        [Input("volumes")]
        private InputList<Inputs.InstanceGroupVolumeGetArgs>? _volumes;

        /// <summary>
        /// - List(volume_spec) - Volumes is a collection of additional volumes to create for instances within this instance group.
        /// </summary>
        public InputList<Inputs.InstanceGroupVolumeGetArgs> Volumes
        {
            get => _volumes ?? (_volumes = new InputList<Inputs.InstanceGroupVolumeGetArgs>());
            set => _volumes = value;
        }

        /// <summary>
        /// - warm_pool_spec - WarmPool specifies a pool of pre-warmed instances for later use (AWS only).
        /// </summary>
        [Input("warmPool")]
        public Input<Inputs.InstanceGroupWarmPoolGetArgs>? WarmPool { get; set; }

        [Input("zones")]
        private InputList<string>? _zones;

        /// <summary>
        /// - List(String) - Zones is the names of the Zones where machines in this instance group should be placed&lt;br /&gt;This is needed for regional subnets (e.g. GCE), to restrict placement to particular zones.
        /// </summary>
        public InputList<string> Zones
        {
            get => _zones ?? (_zones = new InputList<string>());
            set => _zones = value;
        }

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