// *** 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.Aviatrix
{
    /// <summary>
    /// The **aviatrix_cloudn_transit_gateway_attachment** resource allows the creation and management of CloudN Transit Gateway Attachments. This resource is available as of provider version R2.19+.
    /// 
    /// ## Example Usage
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using Pulumi;
    /// using Aviatrix = Pulumi.Aviatrix;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     // Create a CloudN Transit Gateway Attachment
    ///     var test = new Aviatrix.AviatrixCloudnTransitGatewayAttachment("test", new()
    ///     {
    ///         DeviceName = aviatrix_device_registration.Test_device.Name,
    ///         TransitGatewayName = aviatrix_transit_gateway.Aws_transit.Gw_name,
    ///         ConnectionName = "cloudn-transit-attachment-test",
    ///         TransitGatewayBgpAsn = "65000",
    ///         CloudnBgpAsn = "65046",
    ///         CloudnLanInterfaceNeighborIp = "10.210.38.100",
    ///         CloudnLanInterfaceNeighborBgpAsn = "65219",
    ///         EnableOverPrivateNetwork = false,
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// **aviatrix_cloudn_transit_gateway_attachment** can be imported using the `connection_name`, e.g.
    /// 
    /// ```sh
    ///  $ pulumi import aviatrix:index/aviatrixCloudnTransitGatewayAttachment:AviatrixCloudnTransitGatewayAttachment test connection_name
    /// ```
    /// </summary>
    [AviatrixResourceType("aviatrix:index/aviatrixCloudnTransitGatewayAttachment:AviatrixCloudnTransitGatewayAttachment")]
    public partial class AviatrixCloudnTransitGatewayAttachment : global::Pulumi.CustomResource
    {
        /// <summary>
        /// CloudN BGP AS Number. Type: String.
        /// </summary>
        [Output("cloudnBgpAsn")]
        public Output<string> CloudnBgpAsn { get; private set; } = null!;

        /// <summary>
        /// CloudN LAN Interface Neighbor's AS Number. Type: String.
        /// </summary>
        [Output("cloudnLanInterfaceNeighborBgpAsn")]
        public Output<string> CloudnLanInterfaceNeighborBgpAsn { get; private set; } = null!;

        /// <summary>
        /// CloudN LAN Interface Neighbor's IP Address. Type: String.
        /// </summary>
        [Output("cloudnLanInterfaceNeighborIp")]
        public Output<string> CloudnLanInterfaceNeighborIp { get; private set; } = null!;

        /// <summary>
        /// Connection Name. Type: String.
        /// </summary>
        [Output("connectionName")]
        public Output<string> ConnectionName { get; private set; } = null!;

        /// <summary>
        /// CloudN device name. Type: String.
        /// </summary>
        [Output("deviceName")]
        public Output<string> DeviceName { get; private set; } = null!;

        /// <summary>
        /// Enable Jumbo Frame support for the connection. Type: Boolean. Default: false.
        /// </summary>
        [Output("enableJumboFrame")]
        public Output<bool?> EnableJumboFrame { get; private set; } = null!;

        /// <summary>
        /// Enable connection over private network. Type: Boolean. Default: true.
        /// </summary>
        [Output("enableOverPrivateNetwork")]
        public Output<bool?> EnableOverPrivateNetwork { get; private set; } = null!;

        /// <summary>
        /// Connection AS Path Prepend customized by specifying AS PATH for a BGP connection. Requires transit_gateway_bgp_asn to be set. Type: List. Available as of provider version R2.21.0+.
        /// </summary>
        [Output("prependAsPaths")]
        public Output<ImmutableArray<string>> PrependAsPaths { get; private set; } = null!;

        /// <summary>
        /// Transit Gateway BGP AS Number. Type: String.
        /// </summary>
        [Output("transitGatewayBgpAsn")]
        public Output<string> TransitGatewayBgpAsn { get; private set; } = null!;

        /// <summary>
        /// Transit Gateway Name. Type: String.
        /// </summary>
        [Output("transitGatewayName")]
        public Output<string> TransitGatewayName { get; private set; } = null!;


        /// <summary>
        /// Create a AviatrixCloudnTransitGatewayAttachment 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 AviatrixCloudnTransitGatewayAttachment(string name, AviatrixCloudnTransitGatewayAttachmentArgs args, CustomResourceOptions? options = null)
            : base("aviatrix:index/aviatrixCloudnTransitGatewayAttachment:AviatrixCloudnTransitGatewayAttachment", name, args ?? new AviatrixCloudnTransitGatewayAttachmentArgs(), MakeResourceOptions(options, ""))
        {
        }

        private AviatrixCloudnTransitGatewayAttachment(string name, Input<string> id, AviatrixCloudnTransitGatewayAttachmentState? state = null, CustomResourceOptions? options = null)
            : base("aviatrix:index/aviatrixCloudnTransitGatewayAttachment:AviatrixCloudnTransitGatewayAttachment", name, state, MakeResourceOptions(options, id))
        {
        }

        private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? id)
        {
            var defaultOptions = new CustomResourceOptions
            {
                Version = Utilities.Version,
                PluginDownloadURL = "github://api.github.com/astipkovits",
            };
            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 AviatrixCloudnTransitGatewayAttachment 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 AviatrixCloudnTransitGatewayAttachment Get(string name, Input<string> id, AviatrixCloudnTransitGatewayAttachmentState? state = null, CustomResourceOptions? options = null)
        {
            return new AviatrixCloudnTransitGatewayAttachment(name, id, state, options);
        }
    }

    public sealed class AviatrixCloudnTransitGatewayAttachmentArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// CloudN BGP AS Number. Type: String.
        /// </summary>
        [Input("cloudnBgpAsn", required: true)]
        public Input<string> CloudnBgpAsn { get; set; } = null!;

        /// <summary>
        /// CloudN LAN Interface Neighbor's AS Number. Type: String.
        /// </summary>
        [Input("cloudnLanInterfaceNeighborBgpAsn", required: true)]
        public Input<string> CloudnLanInterfaceNeighborBgpAsn { get; set; } = null!;

        /// <summary>
        /// CloudN LAN Interface Neighbor's IP Address. Type: String.
        /// </summary>
        [Input("cloudnLanInterfaceNeighborIp", required: true)]
        public Input<string> CloudnLanInterfaceNeighborIp { get; set; } = null!;

        /// <summary>
        /// Connection Name. Type: String.
        /// </summary>
        [Input("connectionName", required: true)]
        public Input<string> ConnectionName { get; set; } = null!;

        /// <summary>
        /// CloudN device name. Type: String.
        /// </summary>
        [Input("deviceName", required: true)]
        public Input<string> DeviceName { get; set; } = null!;

        /// <summary>
        /// Enable Jumbo Frame support for the connection. Type: Boolean. Default: false.
        /// </summary>
        [Input("enableJumboFrame")]
        public Input<bool>? EnableJumboFrame { get; set; }

        /// <summary>
        /// Enable connection over private network. Type: Boolean. Default: true.
        /// </summary>
        [Input("enableOverPrivateNetwork")]
        public Input<bool>? EnableOverPrivateNetwork { get; set; }

        [Input("prependAsPaths")]
        private InputList<string>? _prependAsPaths;

        /// <summary>
        /// Connection AS Path Prepend customized by specifying AS PATH for a BGP connection. Requires transit_gateway_bgp_asn to be set. Type: List. Available as of provider version R2.21.0+.
        /// </summary>
        public InputList<string> PrependAsPaths
        {
            get => _prependAsPaths ?? (_prependAsPaths = new InputList<string>());
            set => _prependAsPaths = value;
        }

        /// <summary>
        /// Transit Gateway BGP AS Number. Type: String.
        /// </summary>
        [Input("transitGatewayBgpAsn", required: true)]
        public Input<string> TransitGatewayBgpAsn { get; set; } = null!;

        /// <summary>
        /// Transit Gateway Name. Type: String.
        /// </summary>
        [Input("transitGatewayName", required: true)]
        public Input<string> TransitGatewayName { get; set; } = null!;

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

    public sealed class AviatrixCloudnTransitGatewayAttachmentState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// CloudN BGP AS Number. Type: String.
        /// </summary>
        [Input("cloudnBgpAsn")]
        public Input<string>? CloudnBgpAsn { get; set; }

        /// <summary>
        /// CloudN LAN Interface Neighbor's AS Number. Type: String.
        /// </summary>
        [Input("cloudnLanInterfaceNeighborBgpAsn")]
        public Input<string>? CloudnLanInterfaceNeighborBgpAsn { get; set; }

        /// <summary>
        /// CloudN LAN Interface Neighbor's IP Address. Type: String.
        /// </summary>
        [Input("cloudnLanInterfaceNeighborIp")]
        public Input<string>? CloudnLanInterfaceNeighborIp { get; set; }

        /// <summary>
        /// Connection Name. Type: String.
        /// </summary>
        [Input("connectionName")]
        public Input<string>? ConnectionName { get; set; }

        /// <summary>
        /// CloudN device name. Type: String.
        /// </summary>
        [Input("deviceName")]
        public Input<string>? DeviceName { get; set; }

        /// <summary>
        /// Enable Jumbo Frame support for the connection. Type: Boolean. Default: false.
        /// </summary>
        [Input("enableJumboFrame")]
        public Input<bool>? EnableJumboFrame { get; set; }

        /// <summary>
        /// Enable connection over private network. Type: Boolean. Default: true.
        /// </summary>
        [Input("enableOverPrivateNetwork")]
        public Input<bool>? EnableOverPrivateNetwork { get; set; }

        [Input("prependAsPaths")]
        private InputList<string>? _prependAsPaths;

        /// <summary>
        /// Connection AS Path Prepend customized by specifying AS PATH for a BGP connection. Requires transit_gateway_bgp_asn to be set. Type: List. Available as of provider version R2.21.0+.
        /// </summary>
        public InputList<string> PrependAsPaths
        {
            get => _prependAsPaths ?? (_prependAsPaths = new InputList<string>());
            set => _prependAsPaths = value;
        }

        /// <summary>
        /// Transit Gateway BGP AS Number. Type: String.
        /// </summary>
        [Input("transitGatewayBgpAsn")]
        public Input<string>? TransitGatewayBgpAsn { get; set; }

        /// <summary>
        /// Transit Gateway Name. Type: String.
        /// </summary>
        [Input("transitGatewayName")]
        public Input<string>? TransitGatewayName { get; set; }

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