// *** 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>
    /// ## Import
    /// 
    /// **site2cloud** can be imported using the `connection_name` and `vpc_id`, e.g.
    /// 
    /// ```sh
    ///  $ pulumi import aviatrix:index/aviatrixSite2Cloud:AviatrixSite2Cloud test connection_name~vpc_id
    /// ```
    /// </summary>
    [AviatrixResourceType("aviatrix:index/aviatrixSite2Cloud:AviatrixSite2Cloud")]
    public partial class AviatrixSite2Cloud : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Authentication Type. Valid values: 'PSK' and 'Cert'. Default value: 'PSK'.
        /// </summary>
        [Output("authType")]
        public Output<string?> AuthType { get; private set; } = null!;

        /// <summary>
        /// Backup gateway name. **NOTE: Please see notes here regarding HA requirements.**
        /// </summary>
        [Output("backupGatewayName")]
        public Output<string?> BackupGatewayName { get; private set; } = null!;

        /// <summary>
        /// Backup local tunnel IP address. Only valid when HA enabled route based connection. Available as of provider version R2.19+.
        /// </summary>
        [Output("backupLocalTunnelIp")]
        public Output<string?> BackupLocalTunnelIp { get; private set; } = null!;

        /// <summary>
        /// Backup Pre-Shared Key.
        /// </summary>
        [Output("backupPreSharedKey")]
        public Output<string?> BackupPreSharedKey { get; private set; } = null!;

        /// <summary>
        /// Backup Remote Gateway IP. **NOTE: Please see notes here regarding HA requirements.**
        /// </summary>
        [Output("backupRemoteGatewayIp")]
        public Output<string> BackupRemoteGatewayIp { get; private set; } = null!;

        /// <summary>
        /// Latitude of backup remote gateway. Does not support refresh.
        /// </summary>
        [Output("backupRemoteGatewayLatitude")]
        public Output<double?> BackupRemoteGatewayLatitude { get; private set; } = null!;

        /// <summary>
        /// Longitude of backup remote gateway. Does not support refresh.
        /// </summary>
        [Output("backupRemoteGatewayLongitude")]
        public Output<double?> BackupRemoteGatewayLongitude { get; private set; } = null!;

        /// <summary>
        /// Backup remote identifier. Required for Cert based authentication type with HA enabled. Example: "gw-10-10-0-116".
        /// </summary>
        [Output("backupRemoteIdentifier")]
        public Output<string?> BackupRemoteIdentifier { get; private set; } = null!;

        /// <summary>
        /// Backup remote tunnel IP address. Only valid when HA enabled route based connection. Available as of provider version R2.19+.
        /// </summary>
        [Output("backupRemoteTunnelIp")]
        public Output<string?> BackupRemoteTunnelIp { get; private set; } = null!;

        /// <summary>
        /// Name of Remote CA Certificate Tag for creating Site2Cloud tunnels. Required for Cert based authentication type.
        /// </summary>
        [Output("caCertTagName")]
        public Output<string?> CaCertTagName { get; private set; } = null!;

        /// <summary>
        /// Site2Cloud connection name.
        /// </summary>
        [Output("connectionName")]
        public Output<string> ConnectionName { get; private set; } = null!;

        /// <summary>
        /// Connection type. Valid Values: "mapped", "unmapped".
        /// </summary>
        [Output("connectionType")]
        public Output<string> ConnectionType { get; private set; } = null!;

        /// <summary>
        /// Switch to enable custom/non-default algorithms for IPSec Authentication/Encryption. Valid values: true, false. **NOTE: Please see notes here for more information.**
        /// </summary>
        [Output("customAlgorithms")]
        public Output<bool?> CustomAlgorithms { get; private set; } = null!;

        /// <summary>
        /// Enable custom mapped connection. Default value: false. Valid values: true/false. Available in provider version R2.17.1+.
        /// </summary>
        [Output("customMapped")]
        public Output<bool?> CustomMapped { get; private set; } = null!;

        /// <summary>
        /// Enable/disable active active HA for an existing site2cloud connection. Valid values: true, false. Default value: false.
        /// </summary>
        [Output("enableActiveActive")]
        public Output<bool?> EnableActiveActive { get; private set; } = null!;

        /// <summary>
        /// Enable/disable Deed Peer Detection for an existing site2cloud connection. Default value: true. **NOTE: Please see notes here in regards to any deltas found in your state with the addition of this argument in R1.9**
        /// </summary>
        [Output("enableDeadPeerDetection")]
        public Output<bool?> EnableDeadPeerDetection { get; private set; } = null!;

        /// <summary>
        /// Enable Event Triggered HA. Default value: false. Valid values: true or false. Available as of provider version R2.19+.
        /// </summary>
        [Output("enableEventTriggeredHa")]
        public Output<bool?> EnableEventTriggeredHa { get; private set; } = null!;

        /// <summary>
        /// Switch to enable IKEv2. Valid values: true, false. Default value: false.
        /// </summary>
        [Output("enableIkev2")]
        public Output<bool?> EnableIkev2 { get; private set; } = null!;

        /// <summary>
        /// Enable single IP HA feature. Available as of provider version 2.19+.
        /// </summary>
        [Output("enableSingleIpHa")]
        public Output<bool?> EnableSingleIpHa { get; private set; } = null!;

        /// <summary>
        /// Enable spoke gateway with mapped site2cloud configurations to forward traffic from site2cloud connection to Aviatrix Transit Gateway. Default value: false. Valid values: true or false. Available in provider version 2.17.2+.
        /// </summary>
        [Output("forwardTrafficToTransit")]
        public Output<bool?> ForwardTrafficToTransit { get; private set; } = null!;

        /// <summary>
        /// Specify whether or not to enable HA. Valid Values: true, false. **NOTE: Please see notes here regarding HA requirements.**
        /// </summary>
        [Output("haEnabled")]
        public Output<bool?> HaEnabled { get; private set; } = null!;

        /// <summary>
        /// List of Local Initiated Traffic Destination Real CIDRs.
        /// </summary>
        [Output("localDestinationRealCidrs")]
        public Output<ImmutableArray<string>> LocalDestinationRealCidrs { get; private set; } = null!;

        /// <summary>
        /// List of Local Initiated Traffic Destination Virtual CIDRs.
        /// </summary>
        [Output("localDestinationVirtualCidrs")]
        public Output<ImmutableArray<string>> LocalDestinationVirtualCidrs { get; private set; } = null!;

        /// <summary>
        /// List of Local Initiated Traffic Source Real CIDRs.
        /// </summary>
        [Output("localSourceRealCidrs")]
        public Output<ImmutableArray<string>> LocalSourceRealCidrs { get; private set; } = null!;

        /// <summary>
        /// List of Local Initiated Traffic Source Virtual CIDRs.
        /// </summary>
        [Output("localSourceVirtualCidrs")]
        public Output<ImmutableArray<string>> LocalSourceVirtualCidrs { get; private set; } = null!;

        /// <summary>
        /// Local subnet CIDR. **Required for connection type "mapped", except for `custom_mapped` connection.**
        /// </summary>
        [Output("localSubnetCidr")]
        public Output<string> LocalSubnetCidr { get; private set; } = null!;

        /// <summary>
        /// Local subnet CIDR (Virtual). **Required for connection type "mapped", except for `custom_mapped` connection.**
        /// </summary>
        [Output("localSubnetVirtual")]
        public Output<string?> LocalSubnetVirtual { get; private set; } = null!;

        /// <summary>
        /// Local tunnel IP address. Only valid for route based connection. Available as of provider version R2.19+.
        /// </summary>
        [Output("localTunnelIp")]
        public Output<string?> LocalTunnelIp { get; private set; } = null!;

        /// <summary>
        /// Phase one Authentication. Valid values: "SHA-1", "SHA-256", "SHA-384" and "SHA-512". Default value: "SHA-256".
        /// </summary>
        [Output("phase1Authentication")]
        public Output<string?> Phase1Authentication { get; private set; } = null!;

        /// <summary>
        /// Phase one DH Groups. Valid values: "1", "2", "5", "14", "15", "16", "17", "18", "19", "20" and "21". Default value: "14".
        /// </summary>
        [Output("phase1DhGroups")]
        public Output<string?> Phase1DhGroups { get; private set; } = null!;

        /// <summary>
        /// Phase one Encryption. Valid values: "3DES", "AES-128-CBC", "AES-192-CBC", "AES-256-CBC", "AES-128-GCM-64", "AES-128-GCM-96", "AES-128-GCM-128", "AES-256-GCM-64", "AES-256-GCM-96", and "AES-256-GCM-128". Default value: "AES-256-CBC".
        /// </summary>
        [Output("phase1Encryption")]
        public Output<string?> Phase1Encryption { get; private set; } = null!;

        /// <summary>
        /// Phase 1 remote identifier of the IPsec tunnel. This can be configured to be either the public IP address or the private IP address of the peer terminating the IPsec tunnel. Example: ["1.2.3.4"] when HA is disabled, ["1.2.3.4", "5.6.7.8"] when HA is enabled. Available as of provider version R2.19+.
        /// </summary>
        [Output("phase1RemoteIdentifiers")]
        public Output<ImmutableArray<string>> Phase1RemoteIdentifiers { get; private set; } = null!;

        /// <summary>
        /// Phase two Authentication. Valid values: "NO-AUTH", "HMAC-SHA-1", "HMAC-SHA-256", "HMAC-SHA-384" and "HMAC-SHA-512". Default value: "HMAC-SHA-256".
        /// </summary>
        [Output("phase2Authentication")]
        public Output<string?> Phase2Authentication { get; private set; } = null!;

        /// <summary>
        /// Phase two DH Groups. Valid values: "1", "2", "5", "14", "15", "16", "17", "18", "19", "20" and "21". Default value: "14".
        /// </summary>
        [Output("phase2DhGroups")]
        public Output<string?> Phase2DhGroups { get; private set; } = null!;

        /// <summary>
        /// Phase two Encryption. Valid values: "3DES", "AES-128-CBC", "AES-192-CBC", "AES-256-CBC", "AES-128-GCM-64", "AES-128-GCM-96", "AES-128-GCM-128", "AES-256-GCM-64", "AES-256-GCM-96", "AES-256-GCM-128" and "NULL-ENCR". Default value: "AES-256-CBC".
        /// </summary>
        [Output("phase2Encryption")]
        public Output<string?> Phase2Encryption { get; private set; } = null!;

        /// <summary>
        /// Pre-Shared Key.
        /// </summary>
        [Output("preSharedKey")]
        public Output<string?> PreSharedKey { get; private set; } = null!;

        /// <summary>
        /// Primary cloud gateway name.
        /// </summary>
        [Output("primaryCloudGatewayName")]
        public Output<string> PrimaryCloudGatewayName { get; private set; } = null!;

        /// <summary>
        /// Private route encryption switch. Valid values: true, false.
        /// </summary>
        [Output("privateRouteEncryption")]
        public Output<bool?> PrivateRouteEncryption { get; private set; } = null!;

        /// <summary>
        /// List of  Remote Initiated Traffic Destination Real CIDRs.
        /// </summary>
        [Output("remoteDestinationRealCidrs")]
        public Output<ImmutableArray<string>> RemoteDestinationRealCidrs { get; private set; } = null!;

        /// <summary>
        /// List of Remote Initiated Traffic Destination Virtual CIDRs.
        /// </summary>
        [Output("remoteDestinationVirtualCidrs")]
        public Output<ImmutableArray<string>> RemoteDestinationVirtualCidrs { get; private set; } = null!;

        /// <summary>
        /// Remote gateway IP.
        /// </summary>
        [Output("remoteGatewayIp")]
        public Output<string> RemoteGatewayIp { get; private set; } = null!;

        /// <summary>
        /// Latitude of remote gateway. Does not support refresh.
        /// </summary>
        [Output("remoteGatewayLatitude")]
        public Output<double?> RemoteGatewayLatitude { get; private set; } = null!;

        /// <summary>
        /// Longitude of remote gateway. Does not support refresh.
        /// </summary>
        [Output("remoteGatewayLongitude")]
        public Output<double?> RemoteGatewayLongitude { get; private set; } = null!;

        /// <summary>
        /// Remote gateway type. Valid Values: "generic", "avx", "aws", "azure", "sonicwall", "oracle".
        /// </summary>
        [Output("remoteGatewayType")]
        public Output<string> RemoteGatewayType { get; private set; } = null!;

        /// <summary>
        /// Remote identifier. Required for Cert based authentication type. Example: "gw-10-10-0-115".
        /// </summary>
        [Output("remoteIdentifier")]
        public Output<string?> RemoteIdentifier { get; private set; } = null!;

        /// <summary>
        /// List of Remote Initiated Traffic Source Real CIDRs.
        /// </summary>
        [Output("remoteSourceRealCidrs")]
        public Output<ImmutableArray<string>> RemoteSourceRealCidrs { get; private set; } = null!;

        /// <summary>
        /// List of Remote Initiated Traffic Source Virtual CIDRs.
        /// </summary>
        [Output("remoteSourceVirtualCidrs")]
        public Output<ImmutableArray<string>> RemoteSourceVirtualCidrs { get; private set; } = null!;

        /// <summary>
        /// Remote subnet CIDR. **Not required for custom_mapped connection.**
        /// </summary>
        [Output("remoteSubnetCidr")]
        public Output<string?> RemoteSubnetCidr { get; private set; } = null!;

        /// <summary>
        /// Remote subnet CIDR (Virtual). **Required for connection type "mapped", except for `custom_mapped` connection.**
        /// </summary>
        [Output("remoteSubnetVirtual")]
        public Output<string?> RemoteSubnetVirtual { get; private set; } = null!;

        /// <summary>
        /// Remote tunnel IP address. Only valid for route based connection. Available as of provider version R2.19+.
        /// </summary>
        [Output("remoteTunnelIp")]
        public Output<string?> RemoteTunnelIp { get; private set; } = null!;

        /// <summary>
        /// Route tables to modify.
        /// </summary>
        [Output("routeTableLists")]
        public Output<ImmutableArray<string>> RouteTableLists { get; private set; } = null!;

        /// <summary>
        /// Specify ssl_server_pool. Default value: "192.168.44.0/24". **NOTE: Please see notes here for more information.**
        /// </summary>
        [Output("sslServerPool")]
        public Output<string?> SslServerPool { get; private set; } = null!;

        /// <summary>
        /// Site2Cloud tunnel type. Valid Values: "policy", "route".
        /// </summary>
        [Output("tunnelType")]
        public Output<string> TunnelType { get; private set; } = null!;

        /// <summary>
        /// VPC ID of the cloud gateway.
        /// </summary>
        [Output("vpcId")]
        public Output<string> VpcId { get; private set; } = null!;


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

        private AviatrixSite2Cloud(string name, Input<string> id, AviatrixSite2CloudState? state = null, CustomResourceOptions? options = null)
            : base("aviatrix:index/aviatrixSite2Cloud:AviatrixSite2Cloud", 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",
                AdditionalSecretOutputs =
                {
                    "backupPreSharedKey",
                    "preSharedKey",
                },
            };
            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 AviatrixSite2Cloud 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 AviatrixSite2Cloud Get(string name, Input<string> id, AviatrixSite2CloudState? state = null, CustomResourceOptions? options = null)
        {
            return new AviatrixSite2Cloud(name, id, state, options);
        }
    }

    public sealed class AviatrixSite2CloudArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Authentication Type. Valid values: 'PSK' and 'Cert'. Default value: 'PSK'.
        /// </summary>
        [Input("authType")]
        public Input<string>? AuthType { get; set; }

        /// <summary>
        /// Backup gateway name. **NOTE: Please see notes here regarding HA requirements.**
        /// </summary>
        [Input("backupGatewayName")]
        public Input<string>? BackupGatewayName { get; set; }

        /// <summary>
        /// Backup local tunnel IP address. Only valid when HA enabled route based connection. Available as of provider version R2.19+.
        /// </summary>
        [Input("backupLocalTunnelIp")]
        public Input<string>? BackupLocalTunnelIp { get; set; }

        [Input("backupPreSharedKey")]
        private Input<string>? _backupPreSharedKey;

        /// <summary>
        /// Backup Pre-Shared Key.
        /// </summary>
        public Input<string>? BackupPreSharedKey
        {
            get => _backupPreSharedKey;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _backupPreSharedKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Backup Remote Gateway IP. **NOTE: Please see notes here regarding HA requirements.**
        /// </summary>
        [Input("backupRemoteGatewayIp")]
        public Input<string>? BackupRemoteGatewayIp { get; set; }

        /// <summary>
        /// Latitude of backup remote gateway. Does not support refresh.
        /// </summary>
        [Input("backupRemoteGatewayLatitude")]
        public Input<double>? BackupRemoteGatewayLatitude { get; set; }

        /// <summary>
        /// Longitude of backup remote gateway. Does not support refresh.
        /// </summary>
        [Input("backupRemoteGatewayLongitude")]
        public Input<double>? BackupRemoteGatewayLongitude { get; set; }

        /// <summary>
        /// Backup remote identifier. Required for Cert based authentication type with HA enabled. Example: "gw-10-10-0-116".
        /// </summary>
        [Input("backupRemoteIdentifier")]
        public Input<string>? BackupRemoteIdentifier { get; set; }

        /// <summary>
        /// Backup remote tunnel IP address. Only valid when HA enabled route based connection. Available as of provider version R2.19+.
        /// </summary>
        [Input("backupRemoteTunnelIp")]
        public Input<string>? BackupRemoteTunnelIp { get; set; }

        /// <summary>
        /// Name of Remote CA Certificate Tag for creating Site2Cloud tunnels. Required for Cert based authentication type.
        /// </summary>
        [Input("caCertTagName")]
        public Input<string>? CaCertTagName { get; set; }

        /// <summary>
        /// Site2Cloud connection name.
        /// </summary>
        [Input("connectionName", required: true)]
        public Input<string> ConnectionName { get; set; } = null!;

        /// <summary>
        /// Connection type. Valid Values: "mapped", "unmapped".
        /// </summary>
        [Input("connectionType", required: true)]
        public Input<string> ConnectionType { get; set; } = null!;

        /// <summary>
        /// Switch to enable custom/non-default algorithms for IPSec Authentication/Encryption. Valid values: true, false. **NOTE: Please see notes here for more information.**
        /// </summary>
        [Input("customAlgorithms")]
        public Input<bool>? CustomAlgorithms { get; set; }

        /// <summary>
        /// Enable custom mapped connection. Default value: false. Valid values: true/false. Available in provider version R2.17.1+.
        /// </summary>
        [Input("customMapped")]
        public Input<bool>? CustomMapped { get; set; }

        /// <summary>
        /// Enable/disable active active HA for an existing site2cloud connection. Valid values: true, false. Default value: false.
        /// </summary>
        [Input("enableActiveActive")]
        public Input<bool>? EnableActiveActive { get; set; }

        /// <summary>
        /// Enable/disable Deed Peer Detection for an existing site2cloud connection. Default value: true. **NOTE: Please see notes here in regards to any deltas found in your state with the addition of this argument in R1.9**
        /// </summary>
        [Input("enableDeadPeerDetection")]
        public Input<bool>? EnableDeadPeerDetection { get; set; }

        /// <summary>
        /// Enable Event Triggered HA. Default value: false. Valid values: true or false. Available as of provider version R2.19+.
        /// </summary>
        [Input("enableEventTriggeredHa")]
        public Input<bool>? EnableEventTriggeredHa { get; set; }

        /// <summary>
        /// Switch to enable IKEv2. Valid values: true, false. Default value: false.
        /// </summary>
        [Input("enableIkev2")]
        public Input<bool>? EnableIkev2 { get; set; }

        /// <summary>
        /// Enable single IP HA feature. Available as of provider version 2.19+.
        /// </summary>
        [Input("enableSingleIpHa")]
        public Input<bool>? EnableSingleIpHa { get; set; }

        /// <summary>
        /// Enable spoke gateway with mapped site2cloud configurations to forward traffic from site2cloud connection to Aviatrix Transit Gateway. Default value: false. Valid values: true or false. Available in provider version 2.17.2+.
        /// </summary>
        [Input("forwardTrafficToTransit")]
        public Input<bool>? ForwardTrafficToTransit { get; set; }

        /// <summary>
        /// Specify whether or not to enable HA. Valid Values: true, false. **NOTE: Please see notes here regarding HA requirements.**
        /// </summary>
        [Input("haEnabled")]
        public Input<bool>? HaEnabled { get; set; }

        [Input("localDestinationRealCidrs")]
        private InputList<string>? _localDestinationRealCidrs;

        /// <summary>
        /// List of Local Initiated Traffic Destination Real CIDRs.
        /// </summary>
        public InputList<string> LocalDestinationRealCidrs
        {
            get => _localDestinationRealCidrs ?? (_localDestinationRealCidrs = new InputList<string>());
            set => _localDestinationRealCidrs = value;
        }

        [Input("localDestinationVirtualCidrs")]
        private InputList<string>? _localDestinationVirtualCidrs;

        /// <summary>
        /// List of Local Initiated Traffic Destination Virtual CIDRs.
        /// </summary>
        public InputList<string> LocalDestinationVirtualCidrs
        {
            get => _localDestinationVirtualCidrs ?? (_localDestinationVirtualCidrs = new InputList<string>());
            set => _localDestinationVirtualCidrs = value;
        }

        [Input("localSourceRealCidrs")]
        private InputList<string>? _localSourceRealCidrs;

        /// <summary>
        /// List of Local Initiated Traffic Source Real CIDRs.
        /// </summary>
        public InputList<string> LocalSourceRealCidrs
        {
            get => _localSourceRealCidrs ?? (_localSourceRealCidrs = new InputList<string>());
            set => _localSourceRealCidrs = value;
        }

        [Input("localSourceVirtualCidrs")]
        private InputList<string>? _localSourceVirtualCidrs;

        /// <summary>
        /// List of Local Initiated Traffic Source Virtual CIDRs.
        /// </summary>
        public InputList<string> LocalSourceVirtualCidrs
        {
            get => _localSourceVirtualCidrs ?? (_localSourceVirtualCidrs = new InputList<string>());
            set => _localSourceVirtualCidrs = value;
        }

        /// <summary>
        /// Local subnet CIDR. **Required for connection type "mapped", except for `custom_mapped` connection.**
        /// </summary>
        [Input("localSubnetCidr")]
        public Input<string>? LocalSubnetCidr { get; set; }

        /// <summary>
        /// Local subnet CIDR (Virtual). **Required for connection type "mapped", except for `custom_mapped` connection.**
        /// </summary>
        [Input("localSubnetVirtual")]
        public Input<string>? LocalSubnetVirtual { get; set; }

        /// <summary>
        /// Local tunnel IP address. Only valid for route based connection. Available as of provider version R2.19+.
        /// </summary>
        [Input("localTunnelIp")]
        public Input<string>? LocalTunnelIp { get; set; }

        /// <summary>
        /// Phase one Authentication. Valid values: "SHA-1", "SHA-256", "SHA-384" and "SHA-512". Default value: "SHA-256".
        /// </summary>
        [Input("phase1Authentication")]
        public Input<string>? Phase1Authentication { get; set; }

        /// <summary>
        /// Phase one DH Groups. Valid values: "1", "2", "5", "14", "15", "16", "17", "18", "19", "20" and "21". Default value: "14".
        /// </summary>
        [Input("phase1DhGroups")]
        public Input<string>? Phase1DhGroups { get; set; }

        /// <summary>
        /// Phase one Encryption. Valid values: "3DES", "AES-128-CBC", "AES-192-CBC", "AES-256-CBC", "AES-128-GCM-64", "AES-128-GCM-96", "AES-128-GCM-128", "AES-256-GCM-64", "AES-256-GCM-96", and "AES-256-GCM-128". Default value: "AES-256-CBC".
        /// </summary>
        [Input("phase1Encryption")]
        public Input<string>? Phase1Encryption { get; set; }

        [Input("phase1RemoteIdentifiers")]
        private InputList<string>? _phase1RemoteIdentifiers;

        /// <summary>
        /// Phase 1 remote identifier of the IPsec tunnel. This can be configured to be either the public IP address or the private IP address of the peer terminating the IPsec tunnel. Example: ["1.2.3.4"] when HA is disabled, ["1.2.3.4", "5.6.7.8"] when HA is enabled. Available as of provider version R2.19+.
        /// </summary>
        public InputList<string> Phase1RemoteIdentifiers
        {
            get => _phase1RemoteIdentifiers ?? (_phase1RemoteIdentifiers = new InputList<string>());
            set => _phase1RemoteIdentifiers = value;
        }

        /// <summary>
        /// Phase two Authentication. Valid values: "NO-AUTH", "HMAC-SHA-1", "HMAC-SHA-256", "HMAC-SHA-384" and "HMAC-SHA-512". Default value: "HMAC-SHA-256".
        /// </summary>
        [Input("phase2Authentication")]
        public Input<string>? Phase2Authentication { get; set; }

        /// <summary>
        /// Phase two DH Groups. Valid values: "1", "2", "5", "14", "15", "16", "17", "18", "19", "20" and "21". Default value: "14".
        /// </summary>
        [Input("phase2DhGroups")]
        public Input<string>? Phase2DhGroups { get; set; }

        /// <summary>
        /// Phase two Encryption. Valid values: "3DES", "AES-128-CBC", "AES-192-CBC", "AES-256-CBC", "AES-128-GCM-64", "AES-128-GCM-96", "AES-128-GCM-128", "AES-256-GCM-64", "AES-256-GCM-96", "AES-256-GCM-128" and "NULL-ENCR". Default value: "AES-256-CBC".
        /// </summary>
        [Input("phase2Encryption")]
        public Input<string>? Phase2Encryption { get; set; }

        [Input("preSharedKey")]
        private Input<string>? _preSharedKey;

        /// <summary>
        /// Pre-Shared Key.
        /// </summary>
        public Input<string>? PreSharedKey
        {
            get => _preSharedKey;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _preSharedKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Primary cloud gateway name.
        /// </summary>
        [Input("primaryCloudGatewayName", required: true)]
        public Input<string> PrimaryCloudGatewayName { get; set; } = null!;

        /// <summary>
        /// Private route encryption switch. Valid values: true, false.
        /// </summary>
        [Input("privateRouteEncryption")]
        public Input<bool>? PrivateRouteEncryption { get; set; }

        [Input("remoteDestinationRealCidrs")]
        private InputList<string>? _remoteDestinationRealCidrs;

        /// <summary>
        /// List of  Remote Initiated Traffic Destination Real CIDRs.
        /// </summary>
        public InputList<string> RemoteDestinationRealCidrs
        {
            get => _remoteDestinationRealCidrs ?? (_remoteDestinationRealCidrs = new InputList<string>());
            set => _remoteDestinationRealCidrs = value;
        }

        [Input("remoteDestinationVirtualCidrs")]
        private InputList<string>? _remoteDestinationVirtualCidrs;

        /// <summary>
        /// List of Remote Initiated Traffic Destination Virtual CIDRs.
        /// </summary>
        public InputList<string> RemoteDestinationVirtualCidrs
        {
            get => _remoteDestinationVirtualCidrs ?? (_remoteDestinationVirtualCidrs = new InputList<string>());
            set => _remoteDestinationVirtualCidrs = value;
        }

        /// <summary>
        /// Remote gateway IP.
        /// </summary>
        [Input("remoteGatewayIp", required: true)]
        public Input<string> RemoteGatewayIp { get; set; } = null!;

        /// <summary>
        /// Latitude of remote gateway. Does not support refresh.
        /// </summary>
        [Input("remoteGatewayLatitude")]
        public Input<double>? RemoteGatewayLatitude { get; set; }

        /// <summary>
        /// Longitude of remote gateway. Does not support refresh.
        /// </summary>
        [Input("remoteGatewayLongitude")]
        public Input<double>? RemoteGatewayLongitude { get; set; }

        /// <summary>
        /// Remote gateway type. Valid Values: "generic", "avx", "aws", "azure", "sonicwall", "oracle".
        /// </summary>
        [Input("remoteGatewayType", required: true)]
        public Input<string> RemoteGatewayType { get; set; } = null!;

        /// <summary>
        /// Remote identifier. Required for Cert based authentication type. Example: "gw-10-10-0-115".
        /// </summary>
        [Input("remoteIdentifier")]
        public Input<string>? RemoteIdentifier { get; set; }

        [Input("remoteSourceRealCidrs")]
        private InputList<string>? _remoteSourceRealCidrs;

        /// <summary>
        /// List of Remote Initiated Traffic Source Real CIDRs.
        /// </summary>
        public InputList<string> RemoteSourceRealCidrs
        {
            get => _remoteSourceRealCidrs ?? (_remoteSourceRealCidrs = new InputList<string>());
            set => _remoteSourceRealCidrs = value;
        }

        [Input("remoteSourceVirtualCidrs")]
        private InputList<string>? _remoteSourceVirtualCidrs;

        /// <summary>
        /// List of Remote Initiated Traffic Source Virtual CIDRs.
        /// </summary>
        public InputList<string> RemoteSourceVirtualCidrs
        {
            get => _remoteSourceVirtualCidrs ?? (_remoteSourceVirtualCidrs = new InputList<string>());
            set => _remoteSourceVirtualCidrs = value;
        }

        /// <summary>
        /// Remote subnet CIDR. **Not required for custom_mapped connection.**
        /// </summary>
        [Input("remoteSubnetCidr")]
        public Input<string>? RemoteSubnetCidr { get; set; }

        /// <summary>
        /// Remote subnet CIDR (Virtual). **Required for connection type "mapped", except for `custom_mapped` connection.**
        /// </summary>
        [Input("remoteSubnetVirtual")]
        public Input<string>? RemoteSubnetVirtual { get; set; }

        /// <summary>
        /// Remote tunnel IP address. Only valid for route based connection. Available as of provider version R2.19+.
        /// </summary>
        [Input("remoteTunnelIp")]
        public Input<string>? RemoteTunnelIp { get; set; }

        [Input("routeTableLists")]
        private InputList<string>? _routeTableLists;

        /// <summary>
        /// Route tables to modify.
        /// </summary>
        public InputList<string> RouteTableLists
        {
            get => _routeTableLists ?? (_routeTableLists = new InputList<string>());
            set => _routeTableLists = value;
        }

        /// <summary>
        /// Specify ssl_server_pool. Default value: "192.168.44.0/24". **NOTE: Please see notes here for more information.**
        /// </summary>
        [Input("sslServerPool")]
        public Input<string>? SslServerPool { get; set; }

        /// <summary>
        /// Site2Cloud tunnel type. Valid Values: "policy", "route".
        /// </summary>
        [Input("tunnelType", required: true)]
        public Input<string> TunnelType { get; set; } = null!;

        /// <summary>
        /// VPC ID of the cloud gateway.
        /// </summary>
        [Input("vpcId", required: true)]
        public Input<string> VpcId { get; set; } = null!;

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

    public sealed class AviatrixSite2CloudState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Authentication Type. Valid values: 'PSK' and 'Cert'. Default value: 'PSK'.
        /// </summary>
        [Input("authType")]
        public Input<string>? AuthType { get; set; }

        /// <summary>
        /// Backup gateway name. **NOTE: Please see notes here regarding HA requirements.**
        /// </summary>
        [Input("backupGatewayName")]
        public Input<string>? BackupGatewayName { get; set; }

        /// <summary>
        /// Backup local tunnel IP address. Only valid when HA enabled route based connection. Available as of provider version R2.19+.
        /// </summary>
        [Input("backupLocalTunnelIp")]
        public Input<string>? BackupLocalTunnelIp { get; set; }

        [Input("backupPreSharedKey")]
        private Input<string>? _backupPreSharedKey;

        /// <summary>
        /// Backup Pre-Shared Key.
        /// </summary>
        public Input<string>? BackupPreSharedKey
        {
            get => _backupPreSharedKey;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _backupPreSharedKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Backup Remote Gateway IP. **NOTE: Please see notes here regarding HA requirements.**
        /// </summary>
        [Input("backupRemoteGatewayIp")]
        public Input<string>? BackupRemoteGatewayIp { get; set; }

        /// <summary>
        /// Latitude of backup remote gateway. Does not support refresh.
        /// </summary>
        [Input("backupRemoteGatewayLatitude")]
        public Input<double>? BackupRemoteGatewayLatitude { get; set; }

        /// <summary>
        /// Longitude of backup remote gateway. Does not support refresh.
        /// </summary>
        [Input("backupRemoteGatewayLongitude")]
        public Input<double>? BackupRemoteGatewayLongitude { get; set; }

        /// <summary>
        /// Backup remote identifier. Required for Cert based authentication type with HA enabled. Example: "gw-10-10-0-116".
        /// </summary>
        [Input("backupRemoteIdentifier")]
        public Input<string>? BackupRemoteIdentifier { get; set; }

        /// <summary>
        /// Backup remote tunnel IP address. Only valid when HA enabled route based connection. Available as of provider version R2.19+.
        /// </summary>
        [Input("backupRemoteTunnelIp")]
        public Input<string>? BackupRemoteTunnelIp { get; set; }

        /// <summary>
        /// Name of Remote CA Certificate Tag for creating Site2Cloud tunnels. Required for Cert based authentication type.
        /// </summary>
        [Input("caCertTagName")]
        public Input<string>? CaCertTagName { get; set; }

        /// <summary>
        /// Site2Cloud connection name.
        /// </summary>
        [Input("connectionName")]
        public Input<string>? ConnectionName { get; set; }

        /// <summary>
        /// Connection type. Valid Values: "mapped", "unmapped".
        /// </summary>
        [Input("connectionType")]
        public Input<string>? ConnectionType { get; set; }

        /// <summary>
        /// Switch to enable custom/non-default algorithms for IPSec Authentication/Encryption. Valid values: true, false. **NOTE: Please see notes here for more information.**
        /// </summary>
        [Input("customAlgorithms")]
        public Input<bool>? CustomAlgorithms { get; set; }

        /// <summary>
        /// Enable custom mapped connection. Default value: false. Valid values: true/false. Available in provider version R2.17.1+.
        /// </summary>
        [Input("customMapped")]
        public Input<bool>? CustomMapped { get; set; }

        /// <summary>
        /// Enable/disable active active HA for an existing site2cloud connection. Valid values: true, false. Default value: false.
        /// </summary>
        [Input("enableActiveActive")]
        public Input<bool>? EnableActiveActive { get; set; }

        /// <summary>
        /// Enable/disable Deed Peer Detection for an existing site2cloud connection. Default value: true. **NOTE: Please see notes here in regards to any deltas found in your state with the addition of this argument in R1.9**
        /// </summary>
        [Input("enableDeadPeerDetection")]
        public Input<bool>? EnableDeadPeerDetection { get; set; }

        /// <summary>
        /// Enable Event Triggered HA. Default value: false. Valid values: true or false. Available as of provider version R2.19+.
        /// </summary>
        [Input("enableEventTriggeredHa")]
        public Input<bool>? EnableEventTriggeredHa { get; set; }

        /// <summary>
        /// Switch to enable IKEv2. Valid values: true, false. Default value: false.
        /// </summary>
        [Input("enableIkev2")]
        public Input<bool>? EnableIkev2 { get; set; }

        /// <summary>
        /// Enable single IP HA feature. Available as of provider version 2.19+.
        /// </summary>
        [Input("enableSingleIpHa")]
        public Input<bool>? EnableSingleIpHa { get; set; }

        /// <summary>
        /// Enable spoke gateway with mapped site2cloud configurations to forward traffic from site2cloud connection to Aviatrix Transit Gateway. Default value: false. Valid values: true or false. Available in provider version 2.17.2+.
        /// </summary>
        [Input("forwardTrafficToTransit")]
        public Input<bool>? ForwardTrafficToTransit { get; set; }

        /// <summary>
        /// Specify whether or not to enable HA. Valid Values: true, false. **NOTE: Please see notes here regarding HA requirements.**
        /// </summary>
        [Input("haEnabled")]
        public Input<bool>? HaEnabled { get; set; }

        [Input("localDestinationRealCidrs")]
        private InputList<string>? _localDestinationRealCidrs;

        /// <summary>
        /// List of Local Initiated Traffic Destination Real CIDRs.
        /// </summary>
        public InputList<string> LocalDestinationRealCidrs
        {
            get => _localDestinationRealCidrs ?? (_localDestinationRealCidrs = new InputList<string>());
            set => _localDestinationRealCidrs = value;
        }

        [Input("localDestinationVirtualCidrs")]
        private InputList<string>? _localDestinationVirtualCidrs;

        /// <summary>
        /// List of Local Initiated Traffic Destination Virtual CIDRs.
        /// </summary>
        public InputList<string> LocalDestinationVirtualCidrs
        {
            get => _localDestinationVirtualCidrs ?? (_localDestinationVirtualCidrs = new InputList<string>());
            set => _localDestinationVirtualCidrs = value;
        }

        [Input("localSourceRealCidrs")]
        private InputList<string>? _localSourceRealCidrs;

        /// <summary>
        /// List of Local Initiated Traffic Source Real CIDRs.
        /// </summary>
        public InputList<string> LocalSourceRealCidrs
        {
            get => _localSourceRealCidrs ?? (_localSourceRealCidrs = new InputList<string>());
            set => _localSourceRealCidrs = value;
        }

        [Input("localSourceVirtualCidrs")]
        private InputList<string>? _localSourceVirtualCidrs;

        /// <summary>
        /// List of Local Initiated Traffic Source Virtual CIDRs.
        /// </summary>
        public InputList<string> LocalSourceVirtualCidrs
        {
            get => _localSourceVirtualCidrs ?? (_localSourceVirtualCidrs = new InputList<string>());
            set => _localSourceVirtualCidrs = value;
        }

        /// <summary>
        /// Local subnet CIDR. **Required for connection type "mapped", except for `custom_mapped` connection.**
        /// </summary>
        [Input("localSubnetCidr")]
        public Input<string>? LocalSubnetCidr { get; set; }

        /// <summary>
        /// Local subnet CIDR (Virtual). **Required for connection type "mapped", except for `custom_mapped` connection.**
        /// </summary>
        [Input("localSubnetVirtual")]
        public Input<string>? LocalSubnetVirtual { get; set; }

        /// <summary>
        /// Local tunnel IP address. Only valid for route based connection. Available as of provider version R2.19+.
        /// </summary>
        [Input("localTunnelIp")]
        public Input<string>? LocalTunnelIp { get; set; }

        /// <summary>
        /// Phase one Authentication. Valid values: "SHA-1", "SHA-256", "SHA-384" and "SHA-512". Default value: "SHA-256".
        /// </summary>
        [Input("phase1Authentication")]
        public Input<string>? Phase1Authentication { get; set; }

        /// <summary>
        /// Phase one DH Groups. Valid values: "1", "2", "5", "14", "15", "16", "17", "18", "19", "20" and "21". Default value: "14".
        /// </summary>
        [Input("phase1DhGroups")]
        public Input<string>? Phase1DhGroups { get; set; }

        /// <summary>
        /// Phase one Encryption. Valid values: "3DES", "AES-128-CBC", "AES-192-CBC", "AES-256-CBC", "AES-128-GCM-64", "AES-128-GCM-96", "AES-128-GCM-128", "AES-256-GCM-64", "AES-256-GCM-96", and "AES-256-GCM-128". Default value: "AES-256-CBC".
        /// </summary>
        [Input("phase1Encryption")]
        public Input<string>? Phase1Encryption { get; set; }

        [Input("phase1RemoteIdentifiers")]
        private InputList<string>? _phase1RemoteIdentifiers;

        /// <summary>
        /// Phase 1 remote identifier of the IPsec tunnel. This can be configured to be either the public IP address or the private IP address of the peer terminating the IPsec tunnel. Example: ["1.2.3.4"] when HA is disabled, ["1.2.3.4", "5.6.7.8"] when HA is enabled. Available as of provider version R2.19+.
        /// </summary>
        public InputList<string> Phase1RemoteIdentifiers
        {
            get => _phase1RemoteIdentifiers ?? (_phase1RemoteIdentifiers = new InputList<string>());
            set => _phase1RemoteIdentifiers = value;
        }

        /// <summary>
        /// Phase two Authentication. Valid values: "NO-AUTH", "HMAC-SHA-1", "HMAC-SHA-256", "HMAC-SHA-384" and "HMAC-SHA-512". Default value: "HMAC-SHA-256".
        /// </summary>
        [Input("phase2Authentication")]
        public Input<string>? Phase2Authentication { get; set; }

        /// <summary>
        /// Phase two DH Groups. Valid values: "1", "2", "5", "14", "15", "16", "17", "18", "19", "20" and "21". Default value: "14".
        /// </summary>
        [Input("phase2DhGroups")]
        public Input<string>? Phase2DhGroups { get; set; }

        /// <summary>
        /// Phase two Encryption. Valid values: "3DES", "AES-128-CBC", "AES-192-CBC", "AES-256-CBC", "AES-128-GCM-64", "AES-128-GCM-96", "AES-128-GCM-128", "AES-256-GCM-64", "AES-256-GCM-96", "AES-256-GCM-128" and "NULL-ENCR". Default value: "AES-256-CBC".
        /// </summary>
        [Input("phase2Encryption")]
        public Input<string>? Phase2Encryption { get; set; }

        [Input("preSharedKey")]
        private Input<string>? _preSharedKey;

        /// <summary>
        /// Pre-Shared Key.
        /// </summary>
        public Input<string>? PreSharedKey
        {
            get => _preSharedKey;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _preSharedKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Primary cloud gateway name.
        /// </summary>
        [Input("primaryCloudGatewayName")]
        public Input<string>? PrimaryCloudGatewayName { get; set; }

        /// <summary>
        /// Private route encryption switch. Valid values: true, false.
        /// </summary>
        [Input("privateRouteEncryption")]
        public Input<bool>? PrivateRouteEncryption { get; set; }

        [Input("remoteDestinationRealCidrs")]
        private InputList<string>? _remoteDestinationRealCidrs;

        /// <summary>
        /// List of  Remote Initiated Traffic Destination Real CIDRs.
        /// </summary>
        public InputList<string> RemoteDestinationRealCidrs
        {
            get => _remoteDestinationRealCidrs ?? (_remoteDestinationRealCidrs = new InputList<string>());
            set => _remoteDestinationRealCidrs = value;
        }

        [Input("remoteDestinationVirtualCidrs")]
        private InputList<string>? _remoteDestinationVirtualCidrs;

        /// <summary>
        /// List of Remote Initiated Traffic Destination Virtual CIDRs.
        /// </summary>
        public InputList<string> RemoteDestinationVirtualCidrs
        {
            get => _remoteDestinationVirtualCidrs ?? (_remoteDestinationVirtualCidrs = new InputList<string>());
            set => _remoteDestinationVirtualCidrs = value;
        }

        /// <summary>
        /// Remote gateway IP.
        /// </summary>
        [Input("remoteGatewayIp")]
        public Input<string>? RemoteGatewayIp { get; set; }

        /// <summary>
        /// Latitude of remote gateway. Does not support refresh.
        /// </summary>
        [Input("remoteGatewayLatitude")]
        public Input<double>? RemoteGatewayLatitude { get; set; }

        /// <summary>
        /// Longitude of remote gateway. Does not support refresh.
        /// </summary>
        [Input("remoteGatewayLongitude")]
        public Input<double>? RemoteGatewayLongitude { get; set; }

        /// <summary>
        /// Remote gateway type. Valid Values: "generic", "avx", "aws", "azure", "sonicwall", "oracle".
        /// </summary>
        [Input("remoteGatewayType")]
        public Input<string>? RemoteGatewayType { get; set; }

        /// <summary>
        /// Remote identifier. Required for Cert based authentication type. Example: "gw-10-10-0-115".
        /// </summary>
        [Input("remoteIdentifier")]
        public Input<string>? RemoteIdentifier { get; set; }

        [Input("remoteSourceRealCidrs")]
        private InputList<string>? _remoteSourceRealCidrs;

        /// <summary>
        /// List of Remote Initiated Traffic Source Real CIDRs.
        /// </summary>
        public InputList<string> RemoteSourceRealCidrs
        {
            get => _remoteSourceRealCidrs ?? (_remoteSourceRealCidrs = new InputList<string>());
            set => _remoteSourceRealCidrs = value;
        }

        [Input("remoteSourceVirtualCidrs")]
        private InputList<string>? _remoteSourceVirtualCidrs;

        /// <summary>
        /// List of Remote Initiated Traffic Source Virtual CIDRs.
        /// </summary>
        public InputList<string> RemoteSourceVirtualCidrs
        {
            get => _remoteSourceVirtualCidrs ?? (_remoteSourceVirtualCidrs = new InputList<string>());
            set => _remoteSourceVirtualCidrs = value;
        }

        /// <summary>
        /// Remote subnet CIDR. **Not required for custom_mapped connection.**
        /// </summary>
        [Input("remoteSubnetCidr")]
        public Input<string>? RemoteSubnetCidr { get; set; }

        /// <summary>
        /// Remote subnet CIDR (Virtual). **Required for connection type "mapped", except for `custom_mapped` connection.**
        /// </summary>
        [Input("remoteSubnetVirtual")]
        public Input<string>? RemoteSubnetVirtual { get; set; }

        /// <summary>
        /// Remote tunnel IP address. Only valid for route based connection. Available as of provider version R2.19+.
        /// </summary>
        [Input("remoteTunnelIp")]
        public Input<string>? RemoteTunnelIp { get; set; }

        [Input("routeTableLists")]
        private InputList<string>? _routeTableLists;

        /// <summary>
        /// Route tables to modify.
        /// </summary>
        public InputList<string> RouteTableLists
        {
            get => _routeTableLists ?? (_routeTableLists = new InputList<string>());
            set => _routeTableLists = value;
        }

        /// <summary>
        /// Specify ssl_server_pool. Default value: "192.168.44.0/24". **NOTE: Please see notes here for more information.**
        /// </summary>
        [Input("sslServerPool")]
        public Input<string>? SslServerPool { get; set; }

        /// <summary>
        /// Site2Cloud tunnel type. Valid Values: "policy", "route".
        /// </summary>
        [Input("tunnelType")]
        public Input<string>? TunnelType { get; set; }

        /// <summary>
        /// VPC ID of the cloud gateway.
        /// </summary>
        [Input("vpcId")]
        public Input<string>? VpcId { get; set; }

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