// *** 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 zscaler.PulumiPackage.Zia.TrafficForwarding
{
    public static class GetTrafficForwardingVPNCredentials
    {
        /// <summary>
        /// Use the **zia_traffic_forwarding_vpn_credentials** data source to get information about VPN credentials that can be associated to locations. VPN is one way to route traffic from customer locations to the cloud. Site-to-Site IPSec VPN credentials can be identified by the cloud through one of the following methods:
        /// 
        /// * Common Name (CN) of IPSec Certificate
        /// * VPN User FQDN - requires VPN_SITE_TO_SITE subscription
        /// * VPN IP Address - requires VPN_SITE_TO_SITE subscription
        /// * Extended Authentication (XAUTH) or hosted mobile UserID - requires VPN_MOBILE subscription
        /// 
        /// {{% examples %}}
        /// ## Example Usage
        /// {{% example %}}
        /// 
        /// ```csharp
        /// using System.Collections.Generic;
        /// using Pulumi;
        /// using Zia = Pulumi.Zia;
        /// 
        /// return await Deployment.RunAsync(() =&gt; 
        /// {
        ///     var example = Zia.TrafficForwarding.GetTrafficForwardingVPNCredentials.Invoke(new()
        ///     {
        ///         Fqdn = "lyhxr@example.com",
        ///     });
        /// 
        /// });
        /// ```
        /// 
        /// ```csharp
        /// using System.Collections.Generic;
        /// using Pulumi;
        /// using Zia = Pulumi.Zia;
        /// 
        /// return await Deployment.RunAsync(() =&gt; 
        /// {
        ///     var example = Zia.TrafficForwarding.GetTrafficForwardingVPNCredentials.Invoke(new()
        ///     {
        ///         IpAddress = "1.1.1.1",
        ///     });
        /// 
        /// });
        /// ```
        /// {{% /example %}}
        /// {{% /examples %}}
        /// </summary>
        public static Task<GetTrafficForwardingVPNCredentialsResult> InvokeAsync(GetTrafficForwardingVPNCredentialsArgs? args = null, InvokeOptions? options = null)
            => global::Pulumi.Deployment.Instance.InvokeAsync<GetTrafficForwardingVPNCredentialsResult>("zia:TrafficForwarding/getTrafficForwardingVPNCredentials:getTrafficForwardingVPNCredentials", args ?? new GetTrafficForwardingVPNCredentialsArgs(), options.WithDefaults());

        /// <summary>
        /// Use the **zia_traffic_forwarding_vpn_credentials** data source to get information about VPN credentials that can be associated to locations. VPN is one way to route traffic from customer locations to the cloud. Site-to-Site IPSec VPN credentials can be identified by the cloud through one of the following methods:
        /// 
        /// * Common Name (CN) of IPSec Certificate
        /// * VPN User FQDN - requires VPN_SITE_TO_SITE subscription
        /// * VPN IP Address - requires VPN_SITE_TO_SITE subscription
        /// * Extended Authentication (XAUTH) or hosted mobile UserID - requires VPN_MOBILE subscription
        /// 
        /// {{% examples %}}
        /// ## Example Usage
        /// {{% example %}}
        /// 
        /// ```csharp
        /// using System.Collections.Generic;
        /// using Pulumi;
        /// using Zia = Pulumi.Zia;
        /// 
        /// return await Deployment.RunAsync(() =&gt; 
        /// {
        ///     var example = Zia.TrafficForwarding.GetTrafficForwardingVPNCredentials.Invoke(new()
        ///     {
        ///         Fqdn = "lyhxr@example.com",
        ///     });
        /// 
        /// });
        /// ```
        /// 
        /// ```csharp
        /// using System.Collections.Generic;
        /// using Pulumi;
        /// using Zia = Pulumi.Zia;
        /// 
        /// return await Deployment.RunAsync(() =&gt; 
        /// {
        ///     var example = Zia.TrafficForwarding.GetTrafficForwardingVPNCredentials.Invoke(new()
        ///     {
        ///         IpAddress = "1.1.1.1",
        ///     });
        /// 
        /// });
        /// ```
        /// {{% /example %}}
        /// {{% /examples %}}
        /// </summary>
        public static Output<GetTrafficForwardingVPNCredentialsResult> Invoke(GetTrafficForwardingVPNCredentialsInvokeArgs? args = null, InvokeOptions? options = null)
            => global::Pulumi.Deployment.Instance.Invoke<GetTrafficForwardingVPNCredentialsResult>("zia:TrafficForwarding/getTrafficForwardingVPNCredentials:getTrafficForwardingVPNCredentials", args ?? new GetTrafficForwardingVPNCredentialsInvokeArgs(), options.WithDefaults());
    }


    public sealed class GetTrafficForwardingVPNCredentialsArgs : global::Pulumi.InvokeArgs
    {
        /// <summary>
        /// (String) Fully Qualified Domain Name. Applicable only to `UFQDN` or `XAUTH` (or `HOSTED_MOBILE_USERS`) auth type.
        /// </summary>
        [Input("fqdn")]
        public string? Fqdn { get; set; }

        /// <summary>
        /// Unique identifer of the GRE virtual IP address (VIP)
        /// </summary>
        [Input("id")]
        public int? Id { get; set; }

        /// <summary>
        /// Filter based on an IP address range.
        /// </summary>
        [Input("ipAddress")]
        public string? IpAddress { get; set; }

        /// <summary>
        /// (String) VPN authentication type (i.e., how the VPN credential is sent to the server). It is not modifiable after VpnCredential is created.
        /// </summary>
        [Input("type")]
        public string? Type { get; set; }

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

    public sealed class GetTrafficForwardingVPNCredentialsInvokeArgs : global::Pulumi.InvokeArgs
    {
        /// <summary>
        /// (String) Fully Qualified Domain Name. Applicable only to `UFQDN` or `XAUTH` (or `HOSTED_MOBILE_USERS`) auth type.
        /// </summary>
        [Input("fqdn")]
        public Input<string>? Fqdn { get; set; }

        /// <summary>
        /// Unique identifer of the GRE virtual IP address (VIP)
        /// </summary>
        [Input("id")]
        public Input<int>? Id { get; set; }

        /// <summary>
        /// Filter based on an IP address range.
        /// </summary>
        [Input("ipAddress")]
        public Input<string>? IpAddress { get; set; }

        /// <summary>
        /// (String) VPN authentication type (i.e., how the VPN credential is sent to the server). It is not modifiable after VpnCredential is created.
        /// </summary>
        [Input("type")]
        public Input<string>? Type { get; set; }

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


    [OutputType]
    public sealed class GetTrafficForwardingVPNCredentialsResult
    {
        /// <summary>
        /// (String) Additional information about this VPN credential.
        /// </summary>
        public readonly string Comments;
        /// <summary>
        /// (String) Fully Qualified Domain Name. Applicable only to `UFQDN` or `XAUTH` (or `HOSTED_MOBILE_USERS`) auth type.
        /// </summary>
        public readonly string? Fqdn;
        /// <summary>
        /// (Number) Identifier that uniquely identifies an entity
        /// </summary>
        public readonly int Id;
        public readonly string? IpAddress;
        /// <summary>
        /// (Set of Object) Location that is associated to this VPN credential. Non-existence means not associated to any location.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetTrafficForwardingVPNCredentialsLocationResult> Locations;
        /// <summary>
        /// (Set of Object) SD-WAN Partner that manages the location. If a partner does not manage the locaton, this is set to Self.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetTrafficForwardingVPNCredentialsManagedByResult> ManagedBies;
        /// <summary>
        /// (String) Pre-shared key. This is a required field for `UFQDN` and `IP` auth type.
        /// </summary>
        public readonly string PreSharedKey;
        /// <summary>
        /// (String) VPN authentication type (i.e., how the VPN credential is sent to the server). It is not modifiable after VpnCredential is created.
        /// </summary>
        public readonly string Type;

        [OutputConstructor]
        private GetTrafficForwardingVPNCredentialsResult(
            string comments,

            string? fqdn,

            int id,

            string? ipAddress,

            ImmutableArray<Outputs.GetTrafficForwardingVPNCredentialsLocationResult> locations,

            ImmutableArray<Outputs.GetTrafficForwardingVPNCredentialsManagedByResult> managedBies,

            string preSharedKey,

            string type)
        {
            Comments = comments;
            Fqdn = fqdn;
            Id = id;
            IpAddress = ipAddress;
            Locations = locations;
            ManagedBies = managedBies;
            PreSharedKey = preSharedKey;
            Type = type;
        }
    }
}
