// *** WARNING: this file was generated by the Pulumi SDK Generator. ***
// *** 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.AwsNative.SageMaker
{
    /// <summary>
    /// Resource Type definition for AWS::SageMaker::NotebookInstance
    /// </summary>
    [Obsolete(@"NotebookInstance is not yet supported by AWS Native, so its creation will currently fail. Please use the classic AWS provider, if possible.")]
    [AwsNativeResourceType("aws-native:sagemaker:NotebookInstance")]
    public partial class NotebookInstance : global::Pulumi.CustomResource
    {
        [Output("acceleratorTypes")]
        public Output<ImmutableArray<string>> AcceleratorTypes { get; private set; } = null!;

        [Output("additionalCodeRepositories")]
        public Output<ImmutableArray<string>> AdditionalCodeRepositories { get; private set; } = null!;

        [Output("defaultCodeRepository")]
        public Output<string?> DefaultCodeRepository { get; private set; } = null!;

        [Output("directInternetAccess")]
        public Output<string?> DirectInternetAccess { get; private set; } = null!;

        [Output("instanceMetadataServiceConfiguration")]
        public Output<Outputs.NotebookInstanceInstanceMetadataServiceConfiguration?> InstanceMetadataServiceConfiguration { get; private set; } = null!;

        [Output("instanceType")]
        public Output<string> InstanceType { get; private set; } = null!;

        [Output("kmsKeyId")]
        public Output<string?> KmsKeyId { get; private set; } = null!;

        [Output("lifecycleConfigName")]
        public Output<string?> LifecycleConfigName { get; private set; } = null!;

        [Output("notebookInstanceName")]
        public Output<string?> NotebookInstanceName { get; private set; } = null!;

        [Output("platformIdentifier")]
        public Output<string?> PlatformIdentifier { get; private set; } = null!;

        [Output("roleArn")]
        public Output<string> RoleArn { get; private set; } = null!;

        [Output("rootAccess")]
        public Output<string?> RootAccess { get; private set; } = null!;

        [Output("securityGroupIds")]
        public Output<ImmutableArray<string>> SecurityGroupIds { get; private set; } = null!;

        [Output("subnetId")]
        public Output<string?> SubnetId { get; private set; } = null!;

        [Output("tags")]
        public Output<ImmutableArray<Outputs.NotebookInstanceTag>> Tags { get; private set; } = null!;

        [Output("volumeSizeInGb")]
        public Output<int?> VolumeSizeInGb { get; private set; } = null!;


        /// <summary>
        /// Create a NotebookInstance 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 NotebookInstance(string name, NotebookInstanceArgs args, CustomResourceOptions? options = null)
            : base("aws-native:sagemaker:NotebookInstance", name, args ?? new NotebookInstanceArgs(), MakeResourceOptions(options, ""))
        {
        }

        private NotebookInstance(string name, Input<string> id, CustomResourceOptions? options = null)
            : base("aws-native:sagemaker:NotebookInstance", name, null, 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 NotebookInstance 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="options">A bag of options that control this resource's behavior</param>
        public static NotebookInstance Get(string name, Input<string> id, CustomResourceOptions? options = null)
        {
            return new NotebookInstance(name, id, options);
        }
    }

    public sealed class NotebookInstanceArgs : global::Pulumi.ResourceArgs
    {
        [Input("acceleratorTypes")]
        private InputList<string>? _acceleratorTypes;
        public InputList<string> AcceleratorTypes
        {
            get => _acceleratorTypes ?? (_acceleratorTypes = new InputList<string>());
            set => _acceleratorTypes = value;
        }

        [Input("additionalCodeRepositories")]
        private InputList<string>? _additionalCodeRepositories;
        public InputList<string> AdditionalCodeRepositories
        {
            get => _additionalCodeRepositories ?? (_additionalCodeRepositories = new InputList<string>());
            set => _additionalCodeRepositories = value;
        }

        [Input("defaultCodeRepository")]
        public Input<string>? DefaultCodeRepository { get; set; }

        [Input("directInternetAccess")]
        public Input<string>? DirectInternetAccess { get; set; }

        [Input("instanceMetadataServiceConfiguration")]
        public Input<Inputs.NotebookInstanceInstanceMetadataServiceConfigurationArgs>? InstanceMetadataServiceConfiguration { get; set; }

        [Input("instanceType", required: true)]
        public Input<string> InstanceType { get; set; } = null!;

        [Input("kmsKeyId")]
        public Input<string>? KmsKeyId { get; set; }

        [Input("lifecycleConfigName")]
        public Input<string>? LifecycleConfigName { get; set; }

        [Input("notebookInstanceName")]
        public Input<string>? NotebookInstanceName { get; set; }

        [Input("platformIdentifier")]
        public Input<string>? PlatformIdentifier { get; set; }

        [Input("roleArn", required: true)]
        public Input<string> RoleArn { get; set; } = null!;

        [Input("rootAccess")]
        public Input<string>? RootAccess { get; set; }

        [Input("securityGroupIds")]
        private InputList<string>? _securityGroupIds;
        public InputList<string> SecurityGroupIds
        {
            get => _securityGroupIds ?? (_securityGroupIds = new InputList<string>());
            set => _securityGroupIds = value;
        }

        [Input("subnetId")]
        public Input<string>? SubnetId { get; set; }

        [Input("tags")]
        private InputList<Inputs.NotebookInstanceTagArgs>? _tags;
        public InputList<Inputs.NotebookInstanceTagArgs> Tags
        {
            get => _tags ?? (_tags = new InputList<Inputs.NotebookInstanceTagArgs>());
            set => _tags = value;
        }

        [Input("volumeSizeInGb")]
        public Input<int>? VolumeSizeInGb { get; set; }

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