// *** 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;
using Pulumi;

namespace Cuemby.Equinix
{
    /// <summary>
    /// Resource `equinix.ECXL2Connection` allows creation and management of Equinix Fabric
    /// layer 2 connections.
    /// 
    /// ## Example Usage
    /// ### Non-redundant Connection from own Equinix Fabric Port
    /// 
    /// ```csharp
    /// using Pulumi;
    /// using Equinix = Cuemby.Equinix;
    /// using Equinix = Pulumi.Equinix;
    /// 
    /// class MyStack : Stack
    /// {
    ///     public MyStack()
    ///     {
    ///         var aws = Output.Create(Equinix.GetECXL2Sellerprofile.InvokeAsync(new Equinix.GetECXL2SellerprofileArgs
    ///         {
    ///             Name = "AWS Direct Connect",
    ///         }));
    ///         var sv_qinq_pri = Output.Create(Equinix.GetECXPort.InvokeAsync(new Equinix.GetECXPortArgs
    ///         {
    ///             Name = "CX-SV5-NL-Dot1q-BO-10G-PRI",
    ///         }));
    ///         var port_2_aws = new Equinix.ECXL2Connection("port-2-aws", new Equinix.ECXL2ConnectionArgs
    ///         {
    ///             ProfileUuid = aws.Apply(aws =&gt; aws.Id),
    ///             Speed = 200,
    ///             SpeedUnit = "MB",
    ///             Notifications = 
    ///             {
    ///                 "efpyi@example.com",
    ///                 "efpyi@example.com",
    ///             },
    ///             PortUuid = sv_qinq_pri.Apply(sv_qinq_pri =&gt; sv_qinq_pri.Id),
    ///             VlanStag = 777,
    ///             VlanCtag = 1000,
    ///             SellerRegion = "us-west-1",
    ///             SellerMetroCode = "SV",
    ///             AuthorizationKey = "345742915919",
    ///         });
    ///     }
    /// 
    /// }
    /// ```
    /// ### Non-redundant Connection from Network Edge device
    /// 
    /// ```csharp
    /// using Pulumi;
    /// using Equinix = Cuemby.Equinix;
    /// using Equinix = Pulumi.Equinix;
    /// 
    /// class MyStack : Stack
    /// {
    ///     public MyStack()
    ///     {
    ///         var gcp_1 = Output.Create(Equinix.GetECXL2Sellerprofile.InvokeAsync(new Equinix.GetECXL2SellerprofileArgs
    ///         {
    ///             Name = "Google Cloud Partner Interconnect Zone 1",
    ///         }));
    ///         var router_to_gcp = new Equinix.ECXL2Connection("router-to-gcp", new Equinix.ECXL2ConnectionArgs
    ///         {
    ///             ProfileUuid = gcp_1.Apply(gcp_1 =&gt; gcp_1.Id),
    ///             DeviceUuid = equinix_network_device.Myrouter.Id,
    ///             DeviceInterfaceId = 5,
    ///             Speed = 100,
    ///             SpeedUnit = "MB",
    ///             Notifications = 
    ///             {
    ///                 "efpyi@example.com",
    ///                 "efpyi@example.com",
    ///             },
    ///             SellerMetroCode = "SV",
    ///             SellerRegion = "us-west1",
    ///             AuthorizationKey = "4d335adc-00fd-4a41-c9f3-782ca31ab3f7/us-west1/1",
    ///         });
    ///     }
    /// 
    /// }
    /// ```
    /// ### Non-redundant Connection from an Equinix customer port using A-Side Service token
    /// 
    /// ```csharp
    /// using Pulumi;
    /// using Equinix = Cuemby.Equinix;
    /// using Equinix = Pulumi.Equinix;
    /// 
    /// class MyStack : Stack
    /// {
    ///     public MyStack()
    ///     {
    ///         var gcp = Output.Create(Equinix.GetECXL2Sellerprofile.InvokeAsync(new Equinix.GetECXL2SellerprofileArgs
    ///         {
    ///             Name = "Google Cloud Partner Interconnect Zone 1",
    ///         }));
    ///         var token_to_gcp = new Equinix.ECXL2Connection("token-to-gcp", new Equinix.ECXL2ConnectionArgs
    ///         {
    ///             ProfileUuid = data.Equinix_ecx_l2_sellerprofile.Gcp_1.Id,
    ///             ServiceToken = "e9c22453-d3a7-4d5d-9112-d50173531392",
    ///             Speed = 100,
    ///             SpeedUnit = "MB",
    ///             Notifications = 
    ///             {
    ///                 "efpyi@example.com",
    ///                 "efpyi@example.com",
    ///             },
    ///             SellerMetroCode = "SV",
    ///             SellerRegion = "us-west1",
    ///             AuthorizationKey = "4d335adc-00fd-4a41-c9f3-782ca31ab3f7/us-west1/1",
    ///         });
    ///     }
    /// 
    /// }
    /// ```
    /// ### Non-redundant Connection from own Equinix Fabric Port to an Equinix customer port using Z-Side Service token
    /// 
    /// ```csharp
    /// using Pulumi;
    /// using Equinix = Cuemby.Equinix;
    /// using Equinix = Pulumi.Equinix;
    /// 
    /// class MyStack : Stack
    /// {
    ///     public MyStack()
    ///     {
    ///         var sv_qinq_pri = Output.Create(Equinix.GetECXPort.InvokeAsync(new Equinix.GetECXPortArgs
    ///         {
    ///             Name = "CX-SV5-NL-Dot1q-BO-10G-PRI",
    ///         }));
    ///         var port_to_token = new Equinix.ECXL2Connection("port-to-token", new Equinix.ECXL2ConnectionArgs
    ///         {
    ///             ZsideServiceToken = "e9c22453-d3a7-4d5d-9112-d50173531392",
    ///             Speed = 200,
    ///             SpeedUnit = "MB",
    ///             Notifications = 
    ///             {
    ///                 "efpyi@example.com",
    ///                 "efpyi@example.com",
    ///             },
    ///             SellerMetroCode = "FR",
    ///             PortUuid = sv_qinq_pri.Apply(sv_qinq_pri =&gt; sv_qinq_pri.Id),
    ///             VlanStag = 1000,
    ///         });
    ///     }
    /// 
    /// }
    /// ```
    /// 
    /// &gt; **NOTE:** See Equinix Fabric connecting to the cloud
    /// guide for more details on how to connect to a CSP.
    /// ## Update operation behavior
    /// 
    /// Update of most arguments will force replacement of a connection (including related redundant
    /// connection in HA setup).
    /// 
    /// Following arguments can be updated. **NOTE** that Equinix Fabric may still forbid updates depending
    /// on current connection state, used service provider or number of updates requested during the day.
    /// 
    /// * `name`
    /// * `speed` and `speed_unit`
    /// 
    /// ## Import
    /// 
    /// into `vendor_token` but `service_token` and `zside_service_token` will remain empty. Equinix L2 connections can be imported using an existing `id`existing_connection_id='example-uuid-1'
    /// 
    /// ```sh
    ///  $ pulumi import equinix:index/eCXL2Connection:ECXL2Connection example ${existing_connection_id}
    /// ```
    /// 
    ///  (primary and secondary) into a single string separated by `:`. To import a redundant Equinix L2 connectionexisting_primary_connection_id='example-uuid-1' existing_secondary_connection_id='example-uuid-2'
    /// 
    /// ```sh
    ///  $ pulumi import equinix:index/eCXL2Connection:ECXL2Connection example ${existing_primary_connection_id}:${existing_secondary_connection_id}
    /// ```
    /// </summary>
    [EquinixResourceType("equinix:index/eCXL2Connection:ECXL2Connection")]
    public partial class ECXL2Connection : Pulumi.CustomResource
    {
        /// <summary>
        /// One or more pending actions to complete connection provisioning.
        /// </summary>
        [Output("actions")]
        public Output<ImmutableArray<Outputs.ECXL2ConnectionAction>> Actions { get; private set; } = null!;

        /// <summary>
        /// one or more additional information key-value objects
        /// </summary>
        [Output("additionalInfos")]
        public Output<ImmutableArray<Outputs.ECXL2ConnectionAdditionalInfo>> AdditionalInfos { get; private set; } = null!;

        /// <summary>
        /// Unique identifier authorizing Equinix to provision a connection
        /// towards a cloud service provider. At Equinix, an `Authorization Key` is a generic term and is NOT
        /// encrypted on Equinix Fabric. Cloud Service Providers might use a different name to refer to this
        /// key such as `Service Key` or `Authentication Key`. Value depends on a provider service profile,
        /// more information on [Equinix Fabric how to guide](https://developer.equinix.com/docs/ecx-how-to-guide).
        /// </summary>
        [Output("authorizationKey")]
        public Output<string> AuthorizationKey { get; private set; } = null!;

        /// <summary>
        /// Applicable with `device_uuid`, identifier of network interface
        /// on a given device, used for a connection. If not specified then first available interface will be
        /// selected.
        /// </summary>
        [Output("deviceInterfaceId")]
        public Output<int?> DeviceInterfaceId { get; private set; } = null!;

        /// <summary>
        /// Unique identifier of
        /// the Network Edge virtual device from which the connection would originate.
        /// </summary>
        [Output("deviceUuid")]
        public Output<string?> DeviceUuid { get; private set; } = null!;

        /// <summary>
        /// additional information key
        /// </summary>
        [Output("name")]
        public Output<string> Name { get; private set; } = null!;

        /// <summary>
        /// The type of peering to set up when connecting to Azure Express Route.
        /// Valid values: `PRIVATE`, `MICROSOFT`, `MANUAL`\*, `PUBLIC`\*.
        /// </summary>
        [Output("namedTag")]
        public Output<string?> NamedTag { get; private set; } = null!;

        /// <summary>
        /// A list of email addresses used for sending connection update
        /// notifications.
        /// </summary>
        [Output("notifications")]
        public Output<ImmutableArray<string>> Notifications { get; private set; } = null!;

        /// <summary>
        /// Unique identifier of
        /// the Equinix Fabric Port from which the connection would originate.
        /// </summary>
        [Output("portUuid")]
        public Output<string> PortUuid { get; private set; } = null!;

        /// <summary>
        /// Unique identifier of the service provider's profile.
        /// </summary>
        [Output("profileUuid")]
        public Output<string> ProfileUuid { get; private set; } = null!;

        /// <summary>
        /// Connection provisioning status on service provider's side.
        /// </summary>
        [Output("providerStatus")]
        public Output<string> ProviderStatus { get; private set; } = null!;

        /// <summary>
        /// Connection's purchase order number to reflect on the invoice
        /// </summary>
        [Output("purchaseOrderNumber")]
        public Output<string?> PurchaseOrderNumber { get; private set; } = null!;

        /// <summary>
        /// Unique identifier of group containing a primary and secondary connection.
        /// </summary>
        [Output("redundancyGroup")]
        public Output<string> RedundancyGroup { get; private set; } = null!;

        /// <summary>
        /// Connection redundancy type, applicable for HA connections. Valid values are
        /// `PRIMARY`, `SECONDARY`.
        /// </summary>
        [Output("redundancyType")]
        public Output<string> RedundancyType { get; private set; } = null!;

        /// <summary>
        /// Unique identifier of the redundant connection, applicable for HA connections.
        /// </summary>
        [Output("redundantUuid")]
        public Output<string> RedundantUuid { get; private set; } = null!;

        /// <summary>
        /// Definition of secondary connection for redundant, HA
        /// connectivity. See Secondary Connection below for more details.
        /// </summary>
        [Output("secondaryConnection")]
        public Output<Outputs.ECXL2ConnectionSecondaryConnection?> SecondaryConnection { get; private set; } = null!;

        /// <summary>
        /// The metro code that denotes the connection’s remote/destination
        /// side (z-side).
        /// </summary>
        [Output("sellerMetroCode")]
        public Output<string> SellerMetroCode { get; private set; } = null!;

        /// <summary>
        /// The region in which the seller port resides.
        /// </summary>
        [Output("sellerRegion")]
        public Output<string?> SellerRegion { get; private set; } = null!;

        /// <summary>
        /// - A-side
        /// service tokens authorize you to create a connection from a customer port, which created the token
        /// for you, to a service profile or your own port.
        /// More details in [A-Side Fabric Service Tokens](https://docs.equinix.com/en-us/Content/Interconnection/Fabric/service%20tokens/Fabric-Service-Tokens.htm#:~:text=the%20service%20token.-,A%2DSide%20Service%20Tokens,-If%20you%20want).
        /// </summary>
        [Output("serviceToken")]
        public Output<string?> ServiceToken { get; private set; } = null!;

        /// <summary>
        /// Speed/Bandwidth to be allocated to the connection.
        /// </summary>
        [Output("speed")]
        public Output<int> Speed { get; private set; } = null!;

        /// <summary>
        /// Unit of the speed/bandwidth to be allocated to the connection.
        /// </summary>
        [Output("speedUnit")]
        public Output<string> SpeedUnit { get; private set; } = null!;

        /// <summary>
        /// Connection provisioning status on Equinix Fabric side.
        /// </summary>
        [Output("status")]
        public Output<string> Status { get; private set; } = null!;

        /// <summary>
        /// Unique identifier of the connection.
        /// </summary>
        [Output("uuid")]
        public Output<string> Uuid { get; private set; } = null!;

        /// <summary>
        /// The Equinix Fabric Token the connection was created with. Applicable if the
        /// connection was created with a `service_token` (a-side) or `zside_service_token` (z-side).
        /// * `secondary_connection`:
        /// * `zside_port_uuid`
        /// * `zside_vlan_stag`
        /// * `zside_vlan_ctag`
        /// * `redundancy_type`
        /// * `redundancy_group`
        /// * `vendor_token`
        /// </summary>
        [Output("vendorToken")]
        public Output<string> VendorToken { get; private set; } = null!;

        /// <summary>
        /// C-Tag/Inner-Tag of the connection - a numeric character ranging from 2
        /// \- 4094.
        /// </summary>
        [Output("vlanCtag")]
        public Output<int?> VlanCtag { get; private set; } = null!;

        /// <summary>
        /// S-Tag/Outer-Tag of the connection - a numeric
        /// character ranging from 2 - 4094.
        /// </summary>
        [Output("vlanStag")]
        public Output<int> VlanStag { get; private set; } = null!;

        /// <summary>
        /// Unique identifier of the port on the remote/destination side
        /// (z-side). Allows you to connect between your own ports or virtual devices across your company's
        /// Equinix Fabric deployment, with no need for a private service profile.
        /// </summary>
        [Output("zsidePortUuid")]
        public Output<string> ZsidePortUuid { get; private set; } = null!;

        /// <summary>
        /// - Z-side
        /// service tokens authorize you to create a connection from your port or virtual device to a customer
        /// port which created the token for you. `zside_service_token` cannot be used with `secondary_connection`.
        /// More details in [Z-Side Fabric Service Tokens](https://docs.equinix.com/en-us/Content/Interconnection/Fabric/service%20tokens/Fabric-Service-Tokens.htm#:~:text=requirements%20per%20provider.-,Z%2DSide%20Service%20Tokens,-If%20you%20want).
        /// </summary>
        [Output("zsideServiceToken")]
        public Output<string?> ZsideServiceToken { get; private set; } = null!;

        /// <summary>
        /// C-Tag/Inner-Tag of the connection on the remote/destination
        /// side (z-side) - a numeric character ranging from 2 - 4094.
        /// `secondary_connection` is defined it will internally use same `zside_vlan_ctag` for the secondary
        /// connection.
        /// </summary>
        [Output("zsideVlanCtag")]
        public Output<int> ZsideVlanCtag { get; private set; } = null!;

        /// <summary>
        /// S-Tag/Outer-Tag of the connection on the remote/destination
        /// side (z-side) - a numeric character ranging from 2 - 4094.
        /// </summary>
        [Output("zsideVlanStag")]
        public Output<int> ZsideVlanStag { get; private set; } = null!;


        /// <summary>
        /// Create a ECXL2Connection 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 ECXL2Connection(string name, ECXL2ConnectionArgs args, CustomResourceOptions? options = null)
            : base("equinix:index/eCXL2Connection:ECXL2Connection", name, args ?? new ECXL2ConnectionArgs(), MakeResourceOptions(options, ""))
        {
        }

        private ECXL2Connection(string name, Input<string> id, ECXL2ConnectionState? state = null, CustomResourceOptions? options = null)
            : base("equinix:index/eCXL2Connection:ECXL2Connection", 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/cuemby",
            };
            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 ECXL2Connection 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 ECXL2Connection Get(string name, Input<string> id, ECXL2ConnectionState? state = null, CustomResourceOptions? options = null)
        {
            return new ECXL2Connection(name, id, state, options);
        }
    }

    public sealed class ECXL2ConnectionArgs : Pulumi.ResourceArgs
    {
        [Input("additionalInfos")]
        private InputList<Inputs.ECXL2ConnectionAdditionalInfoArgs>? _additionalInfos;

        /// <summary>
        /// one or more additional information key-value objects
        /// </summary>
        public InputList<Inputs.ECXL2ConnectionAdditionalInfoArgs> AdditionalInfos
        {
            get => _additionalInfos ?? (_additionalInfos = new InputList<Inputs.ECXL2ConnectionAdditionalInfoArgs>());
            set => _additionalInfos = value;
        }

        /// <summary>
        /// Unique identifier authorizing Equinix to provision a connection
        /// towards a cloud service provider. At Equinix, an `Authorization Key` is a generic term and is NOT
        /// encrypted on Equinix Fabric. Cloud Service Providers might use a different name to refer to this
        /// key such as `Service Key` or `Authentication Key`. Value depends on a provider service profile,
        /// more information on [Equinix Fabric how to guide](https://developer.equinix.com/docs/ecx-how-to-guide).
        /// </summary>
        [Input("authorizationKey")]
        public Input<string>? AuthorizationKey { get; set; }

        /// <summary>
        /// Applicable with `device_uuid`, identifier of network interface
        /// on a given device, used for a connection. If not specified then first available interface will be
        /// selected.
        /// </summary>
        [Input("deviceInterfaceId")]
        public Input<int>? DeviceInterfaceId { get; set; }

        /// <summary>
        /// Unique identifier of
        /// the Network Edge virtual device from which the connection would originate.
        /// </summary>
        [Input("deviceUuid")]
        public Input<string>? DeviceUuid { get; set; }

        /// <summary>
        /// additional information key
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// The type of peering to set up when connecting to Azure Express Route.
        /// Valid values: `PRIVATE`, `MICROSOFT`, `MANUAL`\*, `PUBLIC`\*.
        /// </summary>
        [Input("namedTag")]
        public Input<string>? NamedTag { get; set; }

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

        /// <summary>
        /// A list of email addresses used for sending connection update
        /// notifications.
        /// </summary>
        public InputList<string> Notifications
        {
            get => _notifications ?? (_notifications = new InputList<string>());
            set => _notifications = value;
        }

        /// <summary>
        /// Unique identifier of
        /// the Equinix Fabric Port from which the connection would originate.
        /// </summary>
        [Input("portUuid")]
        public Input<string>? PortUuid { get; set; }

        /// <summary>
        /// Unique identifier of the service provider's profile.
        /// </summary>
        [Input("profileUuid")]
        public Input<string>? ProfileUuid { get; set; }

        /// <summary>
        /// Connection's purchase order number to reflect on the invoice
        /// </summary>
        [Input("purchaseOrderNumber")]
        public Input<string>? PurchaseOrderNumber { get; set; }

        /// <summary>
        /// Definition of secondary connection for redundant, HA
        /// connectivity. See Secondary Connection below for more details.
        /// </summary>
        [Input("secondaryConnection")]
        public Input<Inputs.ECXL2ConnectionSecondaryConnectionArgs>? SecondaryConnection { get; set; }

        /// <summary>
        /// The metro code that denotes the connection’s remote/destination
        /// side (z-side).
        /// </summary>
        [Input("sellerMetroCode")]
        public Input<string>? SellerMetroCode { get; set; }

        /// <summary>
        /// The region in which the seller port resides.
        /// </summary>
        [Input("sellerRegion")]
        public Input<string>? SellerRegion { get; set; }

        /// <summary>
        /// - A-side
        /// service tokens authorize you to create a connection from a customer port, which created the token
        /// for you, to a service profile or your own port.
        /// More details in [A-Side Fabric Service Tokens](https://docs.equinix.com/en-us/Content/Interconnection/Fabric/service%20tokens/Fabric-Service-Tokens.htm#:~:text=the%20service%20token.-,A%2DSide%20Service%20Tokens,-If%20you%20want).
        /// </summary>
        [Input("serviceToken")]
        public Input<string>? ServiceToken { get; set; }

        /// <summary>
        /// Speed/Bandwidth to be allocated to the connection.
        /// </summary>
        [Input("speed", required: true)]
        public Input<int> Speed { get; set; } = null!;

        /// <summary>
        /// Unit of the speed/bandwidth to be allocated to the connection.
        /// </summary>
        [Input("speedUnit", required: true)]
        public Input<string> SpeedUnit { get; set; } = null!;

        /// <summary>
        /// C-Tag/Inner-Tag of the connection - a numeric character ranging from 2
        /// \- 4094.
        /// </summary>
        [Input("vlanCtag")]
        public Input<int>? VlanCtag { get; set; }

        /// <summary>
        /// S-Tag/Outer-Tag of the connection - a numeric
        /// character ranging from 2 - 4094.
        /// </summary>
        [Input("vlanStag")]
        public Input<int>? VlanStag { get; set; }

        /// <summary>
        /// Unique identifier of the port on the remote/destination side
        /// (z-side). Allows you to connect between your own ports or virtual devices across your company's
        /// Equinix Fabric deployment, with no need for a private service profile.
        /// </summary>
        [Input("zsidePortUuid")]
        public Input<string>? ZsidePortUuid { get; set; }

        /// <summary>
        /// - Z-side
        /// service tokens authorize you to create a connection from your port or virtual device to a customer
        /// port which created the token for you. `zside_service_token` cannot be used with `secondary_connection`.
        /// More details in [Z-Side Fabric Service Tokens](https://docs.equinix.com/en-us/Content/Interconnection/Fabric/service%20tokens/Fabric-Service-Tokens.htm#:~:text=requirements%20per%20provider.-,Z%2DSide%20Service%20Tokens,-If%20you%20want).
        /// </summary>
        [Input("zsideServiceToken")]
        public Input<string>? ZsideServiceToken { get; set; }

        /// <summary>
        /// C-Tag/Inner-Tag of the connection on the remote/destination
        /// side (z-side) - a numeric character ranging from 2 - 4094.
        /// `secondary_connection` is defined it will internally use same `zside_vlan_ctag` for the secondary
        /// connection.
        /// </summary>
        [Input("zsideVlanCtag")]
        public Input<int>? ZsideVlanCtag { get; set; }

        /// <summary>
        /// S-Tag/Outer-Tag of the connection on the remote/destination
        /// side (z-side) - a numeric character ranging from 2 - 4094.
        /// </summary>
        [Input("zsideVlanStag")]
        public Input<int>? ZsideVlanStag { get; set; }

        public ECXL2ConnectionArgs()
        {
        }
    }

    public sealed class ECXL2ConnectionState : Pulumi.ResourceArgs
    {
        [Input("actions")]
        private InputList<Inputs.ECXL2ConnectionActionGetArgs>? _actions;

        /// <summary>
        /// One or more pending actions to complete connection provisioning.
        /// </summary>
        public InputList<Inputs.ECXL2ConnectionActionGetArgs> Actions
        {
            get => _actions ?? (_actions = new InputList<Inputs.ECXL2ConnectionActionGetArgs>());
            set => _actions = value;
        }

        [Input("additionalInfos")]
        private InputList<Inputs.ECXL2ConnectionAdditionalInfoGetArgs>? _additionalInfos;

        /// <summary>
        /// one or more additional information key-value objects
        /// </summary>
        public InputList<Inputs.ECXL2ConnectionAdditionalInfoGetArgs> AdditionalInfos
        {
            get => _additionalInfos ?? (_additionalInfos = new InputList<Inputs.ECXL2ConnectionAdditionalInfoGetArgs>());
            set => _additionalInfos = value;
        }

        /// <summary>
        /// Unique identifier authorizing Equinix to provision a connection
        /// towards a cloud service provider. At Equinix, an `Authorization Key` is a generic term and is NOT
        /// encrypted on Equinix Fabric. Cloud Service Providers might use a different name to refer to this
        /// key such as `Service Key` or `Authentication Key`. Value depends on a provider service profile,
        /// more information on [Equinix Fabric how to guide](https://developer.equinix.com/docs/ecx-how-to-guide).
        /// </summary>
        [Input("authorizationKey")]
        public Input<string>? AuthorizationKey { get; set; }

        /// <summary>
        /// Applicable with `device_uuid`, identifier of network interface
        /// on a given device, used for a connection. If not specified then first available interface will be
        /// selected.
        /// </summary>
        [Input("deviceInterfaceId")]
        public Input<int>? DeviceInterfaceId { get; set; }

        /// <summary>
        /// Unique identifier of
        /// the Network Edge virtual device from which the connection would originate.
        /// </summary>
        [Input("deviceUuid")]
        public Input<string>? DeviceUuid { get; set; }

        /// <summary>
        /// additional information key
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// The type of peering to set up when connecting to Azure Express Route.
        /// Valid values: `PRIVATE`, `MICROSOFT`, `MANUAL`\*, `PUBLIC`\*.
        /// </summary>
        [Input("namedTag")]
        public Input<string>? NamedTag { get; set; }

        [Input("notifications")]
        private InputList<string>? _notifications;

        /// <summary>
        /// A list of email addresses used for sending connection update
        /// notifications.
        /// </summary>
        public InputList<string> Notifications
        {
            get => _notifications ?? (_notifications = new InputList<string>());
            set => _notifications = value;
        }

        /// <summary>
        /// Unique identifier of
        /// the Equinix Fabric Port from which the connection would originate.
        /// </summary>
        [Input("portUuid")]
        public Input<string>? PortUuid { get; set; }

        /// <summary>
        /// Unique identifier of the service provider's profile.
        /// </summary>
        [Input("profileUuid")]
        public Input<string>? ProfileUuid { get; set; }

        /// <summary>
        /// Connection provisioning status on service provider's side.
        /// </summary>
        [Input("providerStatus")]
        public Input<string>? ProviderStatus { get; set; }

        /// <summary>
        /// Connection's purchase order number to reflect on the invoice
        /// </summary>
        [Input("purchaseOrderNumber")]
        public Input<string>? PurchaseOrderNumber { get; set; }

        /// <summary>
        /// Unique identifier of group containing a primary and secondary connection.
        /// </summary>
        [Input("redundancyGroup")]
        public Input<string>? RedundancyGroup { get; set; }

        /// <summary>
        /// Connection redundancy type, applicable for HA connections. Valid values are
        /// `PRIMARY`, `SECONDARY`.
        /// </summary>
        [Input("redundancyType")]
        public Input<string>? RedundancyType { get; set; }

        /// <summary>
        /// Unique identifier of the redundant connection, applicable for HA connections.
        /// </summary>
        [Input("redundantUuid")]
        public Input<string>? RedundantUuid { get; set; }

        /// <summary>
        /// Definition of secondary connection for redundant, HA
        /// connectivity. See Secondary Connection below for more details.
        /// </summary>
        [Input("secondaryConnection")]
        public Input<Inputs.ECXL2ConnectionSecondaryConnectionGetArgs>? SecondaryConnection { get; set; }

        /// <summary>
        /// The metro code that denotes the connection’s remote/destination
        /// side (z-side).
        /// </summary>
        [Input("sellerMetroCode")]
        public Input<string>? SellerMetroCode { get; set; }

        /// <summary>
        /// The region in which the seller port resides.
        /// </summary>
        [Input("sellerRegion")]
        public Input<string>? SellerRegion { get; set; }

        /// <summary>
        /// - A-side
        /// service tokens authorize you to create a connection from a customer port, which created the token
        /// for you, to a service profile or your own port.
        /// More details in [A-Side Fabric Service Tokens](https://docs.equinix.com/en-us/Content/Interconnection/Fabric/service%20tokens/Fabric-Service-Tokens.htm#:~:text=the%20service%20token.-,A%2DSide%20Service%20Tokens,-If%20you%20want).
        /// </summary>
        [Input("serviceToken")]
        public Input<string>? ServiceToken { get; set; }

        /// <summary>
        /// Speed/Bandwidth to be allocated to the connection.
        /// </summary>
        [Input("speed")]
        public Input<int>? Speed { get; set; }

        /// <summary>
        /// Unit of the speed/bandwidth to be allocated to the connection.
        /// </summary>
        [Input("speedUnit")]
        public Input<string>? SpeedUnit { get; set; }

        /// <summary>
        /// Connection provisioning status on Equinix Fabric side.
        /// </summary>
        [Input("status")]
        public Input<string>? Status { get; set; }

        /// <summary>
        /// Unique identifier of the connection.
        /// </summary>
        [Input("uuid")]
        public Input<string>? Uuid { get; set; }

        /// <summary>
        /// The Equinix Fabric Token the connection was created with. Applicable if the
        /// connection was created with a `service_token` (a-side) or `zside_service_token` (z-side).
        /// * `secondary_connection`:
        /// * `zside_port_uuid`
        /// * `zside_vlan_stag`
        /// * `zside_vlan_ctag`
        /// * `redundancy_type`
        /// * `redundancy_group`
        /// * `vendor_token`
        /// </summary>
        [Input("vendorToken")]
        public Input<string>? VendorToken { get; set; }

        /// <summary>
        /// C-Tag/Inner-Tag of the connection - a numeric character ranging from 2
        /// \- 4094.
        /// </summary>
        [Input("vlanCtag")]
        public Input<int>? VlanCtag { get; set; }

        /// <summary>
        /// S-Tag/Outer-Tag of the connection - a numeric
        /// character ranging from 2 - 4094.
        /// </summary>
        [Input("vlanStag")]
        public Input<int>? VlanStag { get; set; }

        /// <summary>
        /// Unique identifier of the port on the remote/destination side
        /// (z-side). Allows you to connect between your own ports or virtual devices across your company's
        /// Equinix Fabric deployment, with no need for a private service profile.
        /// </summary>
        [Input("zsidePortUuid")]
        public Input<string>? ZsidePortUuid { get; set; }

        /// <summary>
        /// - Z-side
        /// service tokens authorize you to create a connection from your port or virtual device to a customer
        /// port which created the token for you. `zside_service_token` cannot be used with `secondary_connection`.
        /// More details in [Z-Side Fabric Service Tokens](https://docs.equinix.com/en-us/Content/Interconnection/Fabric/service%20tokens/Fabric-Service-Tokens.htm#:~:text=requirements%20per%20provider.-,Z%2DSide%20Service%20Tokens,-If%20you%20want).
        /// </summary>
        [Input("zsideServiceToken")]
        public Input<string>? ZsideServiceToken { get; set; }

        /// <summary>
        /// C-Tag/Inner-Tag of the connection on the remote/destination
        /// side (z-side) - a numeric character ranging from 2 - 4094.
        /// `secondary_connection` is defined it will internally use same `zside_vlan_ctag` for the secondary
        /// connection.
        /// </summary>
        [Input("zsideVlanCtag")]
        public Input<int>? ZsideVlanCtag { get; set; }

        /// <summary>
        /// S-Tag/Outer-Tag of the connection on the remote/destination
        /// side (z-side) - a numeric character ranging from 2 - 4094.
        /// </summary>
        [Input("zsideVlanStag")]
        public Input<int>? ZsideVlanStag { get; set; }

        public ECXL2ConnectionState()
        {
        }
    }
}
