<reponame>pulumiverse/pulumi-fortios// *** 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 Pulumiverse.Fortios
{
    /// <summary>
    /// Configure connection to SDN Connector.
    /// 
    /// ## Example Usage
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using System.Linq;
    /// using Pulumi;
    /// using Fortios = Pulumiverse.Fortios;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var trname = new Fortios.SystemSdnconnector("trname", new()
    ///     {
    ///         AzureRegion = "global",
    ///         HaStatus = "disable",
    ///         Password = "deWdf321ds",
    ///         Server = "1.1.1.1",
    ///         ServerPort = 3,
    ///         Status = "disable",
    ///         Type = "aci",
    ///         UpdateInterval = 60,
    ///         UseMetadataIam = "disable",
    ///         Username = "sg",
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// System SdnConnector can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemSdnconnector:SystemSdnconnector labelname {{name}}
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemSdnconnector:SystemSdnconnector labelname {{name}}
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/systemSdnconnector:SystemSdnconnector")]
    public partial class SystemSdnconnector : global::Pulumi.CustomResource
    {
        /// <summary>
        /// AWS access key ID.
        /// </summary>
        [Output("accessKey")]
        public Output<string> AccessKey { get; private set; } = null!;

        /// <summary>
        /// IBM cloud API key or service ID API key.
        /// </summary>
        [Output("apiKey")]
        public Output<string?> ApiKey { get; private set; } = null!;

        /// <summary>
        /// Azure server region. Valid values: `global`, `china`, `germany`, `usgov`, `local`.
        /// </summary>
        [Output("azureRegion")]
        public Output<string> AzureRegion { get; private set; } = null!;

        /// <summary>
        /// Azure client ID (application ID).
        /// </summary>
        [Output("clientId")]
        public Output<string> ClientId { get; private set; } = null!;

        /// <summary>
        /// Azure client secret (application key).
        /// </summary>
        [Output("clientSecret")]
        public Output<string?> ClientSecret { get; private set; } = null!;

        /// <summary>
        /// Compartment ID.
        /// </summary>
        [Output("compartmentId")]
        public Output<string> CompartmentId { get; private set; } = null!;

        /// <summary>
        /// Compute generation for IBM cloud infrastructure.
        /// </summary>
        [Output("computeGeneration")]
        public Output<int> ComputeGeneration { get; private set; } = null!;

        /// <summary>
        /// Domain name.
        /// </summary>
        [Output("domain")]
        public Output<string> Domain { get; private set; } = null!;

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Output("dynamicSortSubtable")]
        public Output<string?> DynamicSortSubtable { get; private set; } = null!;

        /// <summary>
        /// Configure AWS external account list. The structure of `external_account_list` block is documented below.
        /// </summary>
        [Output("externalAccountLists")]
        public Output<ImmutableArray<Outputs.SystemSdnconnectorExternalAccountList>> ExternalAccountLists { get; private set; } = null!;

        /// <summary>
        /// Configure GCP external IP. The structure of `external_ip` block is documented below.
        /// </summary>
        [Output("externalIps")]
        public Output<ImmutableArray<Outputs.SystemSdnconnectorExternalIp>> ExternalIps { get; private set; } = null!;

        /// <summary>
        /// Configure GCP forwarding rule. The structure of `forwarding_rule` block is documented below.
        /// </summary>
        [Output("forwardingRules")]
        public Output<ImmutableArray<Outputs.SystemSdnconnectorForwardingRule>> ForwardingRules { get; private set; } = null!;

        /// <summary>
        /// GCP project name.
        /// </summary>
        [Output("gcpProject")]
        public Output<string> GcpProject { get; private set; } = null!;

        /// <summary>
        /// Configure GCP project list. The structure of `gcp_project_list` block is documented below.
        /// </summary>
        [Output("gcpProjectLists")]
        public Output<ImmutableArray<Outputs.SystemSdnconnectorGcpProjectList>> GcpProjectLists { get; private set; } = null!;

        /// <summary>
        /// Group name of computers.
        /// </summary>
        [Output("groupName")]
        public Output<string> GroupName { get; private set; } = null!;

        /// <summary>
        /// Enable/disable use for FortiGate HA service. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("haStatus")]
        public Output<string> HaStatus { get; private set; } = null!;

        /// <summary>
        /// IBM cloud region name.
        /// </summary>
        [Output("ibmRegion")]
        public Output<string> IbmRegion { get; private set; } = null!;

        /// <summary>
        /// IBM cloud compute generation 1 region name. Valid values: `us-south`, `us-east`, `germany`, `great-britain`, `japan`, `australia`.
        /// </summary>
        [Output("ibmRegionGen1")]
        public Output<string> IbmRegionGen1 { get; private set; } = null!;

        /// <summary>
        /// IBM cloud compute generation 2 region name. Valid values: `us-south`, `us-east`, `great-britain`.
        /// </summary>
        [Output("ibmRegionGen2")]
        public Output<string> IbmRegionGen2 { get; private set; } = null!;

        /// <summary>
        /// Private key password.
        /// </summary>
        [Output("keyPasswd")]
        public Output<string?> KeyPasswd { get; private set; } = null!;

        /// <summary>
        /// Azure Stack login endpoint.
        /// </summary>
        [Output("loginEndpoint")]
        public Output<string> LoginEndpoint { get; private set; } = null!;

        /// <summary>
        /// SDN connector name.
        /// </summary>
        [Output("name")]
        public Output<string> Name { get; private set; } = null!;

        /// <summary>
        /// Configure Azure network interface. The structure of `nic` block is documented below.
        /// </summary>
        [Output("nics")]
        public Output<ImmutableArray<Outputs.SystemSdnconnectorNic>> Nics { get; private set; } = null!;

        /// <summary>
        /// OCI certificate.
        /// </summary>
        [Output("ociCert")]
        public Output<string> OciCert { get; private set; } = null!;

        /// <summary>
        /// OCI pubkey fingerprint.
        /// </summary>
        [Output("ociFingerprint")]
        public Output<string> OciFingerprint { get; private set; } = null!;

        /// <summary>
        /// OCI server region.
        /// </summary>
        [Output("ociRegion")]
        public Output<string> OciRegion { get; private set; } = null!;

        /// <summary>
        /// OCI region type. Valid values: `commercial`, `government`.
        /// </summary>
        [Output("ociRegionType")]
        public Output<string> OciRegionType { get; private set; } = null!;

        /// <summary>
        /// Password of the remote SDN connector as login credentials.
        /// </summary>
        [Output("password")]
        public Output<string> Password { get; private set; } = null!;

        /// <summary>
        /// Private key of GCP service account.
        /// </summary>
        [Output("privateKey")]
        public Output<string> PrivateKey { get; private set; } = null!;

        /// <summary>
        /// AWS region name.
        /// </summary>
        [Output("region")]
        public Output<string> Region { get; private set; } = null!;

        /// <summary>
        /// Azure resource group.
        /// </summary>
        [Output("resourceGroup")]
        public Output<string> ResourceGroup { get; private set; } = null!;

        /// <summary>
        /// Azure Stack resource URL.
        /// </summary>
        [Output("resourceUrl")]
        public Output<string> ResourceUrl { get; private set; } = null!;

        /// <summary>
        /// Configure Azure route table. The structure of `route_table` block is documented below.
        /// </summary>
        [Output("routeTables")]
        public Output<ImmutableArray<Outputs.SystemSdnconnectorRouteTable>> RouteTables { get; private set; } = null!;

        /// <summary>
        /// Configure GCP route. The structure of `route` block is documented below.
        /// </summary>
        [Output("routes")]
        public Output<ImmutableArray<Outputs.SystemSdnconnectorRoute>> Routes { get; private set; } = null!;

        /// <summary>
        /// AWS secret access key.
        /// </summary>
        [Output("secretKey")]
        public Output<string?> SecretKey { get; private set; } = null!;

        /// <summary>
        /// Secret token of Kubernetes service account.
        /// </summary>
        [Output("secretToken")]
        public Output<string> SecretToken { get; private set; } = null!;

        /// <summary>
        /// Server address of the remote SDN connector.
        /// </summary>
        [Output("server")]
        public Output<string> Server { get; private set; } = null!;

        /// <summary>
        /// Server address list of the remote SDN connector. The structure of `server_list` block is documented below.
        /// </summary>
        [Output("serverLists")]
        public Output<ImmutableArray<Outputs.SystemSdnconnectorServerList>> ServerLists { get; private set; } = null!;

        /// <summary>
        /// Port number of the remote SDN connector.
        /// </summary>
        [Output("serverPort")]
        public Output<int> ServerPort { get; private set; } = null!;

        /// <summary>
        /// GCP service account email.
        /// </summary>
        [Output("serviceAccount")]
        public Output<string> ServiceAccount { get; private set; } = null!;

        /// <summary>
        /// Enable/disable connection to the remote SDN connector. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("status")]
        public Output<string> Status { get; private set; } = null!;

        /// <summary>
        /// Azure subscription ID.
        /// </summary>
        [Output("subscriptionId")]
        public Output<string> SubscriptionId { get; private set; } = null!;

        /// <summary>
        /// Tenant ID (directory ID).
        /// </summary>
        [Output("tenantId")]
        public Output<string> TenantId { get; private set; } = null!;

        /// <summary>
        /// Type of SDN connector.
        /// </summary>
        [Output("type")]
        public Output<string> Type { get; private set; } = null!;

        /// <summary>
        /// Dynamic object update interval (0 - 3600 sec, 0 means disabled, default = 60).
        /// </summary>
        [Output("updateInterval")]
        public Output<int> UpdateInterval { get; private set; } = null!;

        /// <summary>
        /// Enable/disable using IAM role from metadata to call API. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("useMetadataIam")]
        public Output<string> UseMetadataIam { get; private set; } = null!;

        /// <summary>
        /// User ID.
        /// </summary>
        [Output("userId")]
        public Output<string> UserId { get; private set; } = null!;

        /// <summary>
        /// Username of the remote SDN connector as login credentials.
        /// </summary>
        [Output("username")]
        public Output<string> Username { get; private set; } = null!;

        /// <summary>
        /// vCenter server password for NSX quarantine.
        /// </summary>
        [Output("vcenterPassword")]
        public Output<string?> VcenterPassword { get; private set; } = null!;

        /// <summary>
        /// vCenter server address for NSX quarantine.
        /// </summary>
        [Output("vcenterServer")]
        public Output<string> VcenterServer { get; private set; } = null!;

        /// <summary>
        /// vCenter server username for NSX quarantine.
        /// </summary>
        [Output("vcenterUsername")]
        public Output<string> VcenterUsername { get; private set; } = null!;

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Output("vdomparam")]
        public Output<string?> Vdomparam { get; private set; } = null!;

        /// <summary>
        /// Enable/disable server certificate verification. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("verifyCertificate")]
        public Output<string> VerifyCertificate { get; private set; } = null!;

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


        /// <summary>
        /// Create a SystemSdnconnector 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 SystemSdnconnector(string name, SystemSdnconnectorArgs args, CustomResourceOptions? options = null)
            : base("fortios:index/systemSdnconnector:SystemSdnconnector", name, args ?? new SystemSdnconnectorArgs(), MakeResourceOptions(options, ""))
        {
        }

        private SystemSdnconnector(string name, Input<string> id, SystemSdnconnectorState? state = null, CustomResourceOptions? options = null)
            : base("fortios:index/systemSdnconnector:SystemSdnconnector", 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/pulumiverse/pulumi-fortios",
                AdditionalSecretOutputs =
                {
                    "accessKey",
                    "apiKey",
                    "clientSecret",
                    "keyPasswd",
                    "password",
                    "privateKey",
                    "secretKey",
                    "secretToken",
                    "vcenterPassword",
                },
            };
            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 SystemSdnconnector 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 SystemSdnconnector Get(string name, Input<string> id, SystemSdnconnectorState? state = null, CustomResourceOptions? options = null)
        {
            return new SystemSdnconnector(name, id, state, options);
        }
    }

    public sealed class SystemSdnconnectorArgs : global::Pulumi.ResourceArgs
    {
        [Input("accessKey")]
        private Input<string>? _accessKey;

        /// <summary>
        /// AWS access key ID.
        /// </summary>
        public Input<string>? AccessKey
        {
            get => _accessKey;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _accessKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        [Input("apiKey")]
        private Input<string>? _apiKey;

        /// <summary>
        /// IBM cloud API key or service ID API key.
        /// </summary>
        public Input<string>? ApiKey
        {
            get => _apiKey;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _apiKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Azure server region. Valid values: `global`, `china`, `germany`, `usgov`, `local`.
        /// </summary>
        [Input("azureRegion")]
        public Input<string>? AzureRegion { get; set; }

        /// <summary>
        /// Azure client ID (application ID).
        /// </summary>
        [Input("clientId")]
        public Input<string>? ClientId { get; set; }

        [Input("clientSecret")]
        private Input<string>? _clientSecret;

        /// <summary>
        /// Azure client secret (application key).
        /// </summary>
        public Input<string>? ClientSecret
        {
            get => _clientSecret;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _clientSecret = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Compartment ID.
        /// </summary>
        [Input("compartmentId")]
        public Input<string>? CompartmentId { get; set; }

        /// <summary>
        /// Compute generation for IBM cloud infrastructure.
        /// </summary>
        [Input("computeGeneration")]
        public Input<int>? ComputeGeneration { get; set; }

        /// <summary>
        /// Domain name.
        /// </summary>
        [Input("domain")]
        public Input<string>? Domain { get; set; }

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Input("dynamicSortSubtable")]
        public Input<string>? DynamicSortSubtable { get; set; }

        [Input("externalAccountLists")]
        private InputList<Inputs.SystemSdnconnectorExternalAccountListArgs>? _externalAccountLists;

        /// <summary>
        /// Configure AWS external account list. The structure of `external_account_list` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSdnconnectorExternalAccountListArgs> ExternalAccountLists
        {
            get => _externalAccountLists ?? (_externalAccountLists = new InputList<Inputs.SystemSdnconnectorExternalAccountListArgs>());
            set => _externalAccountLists = value;
        }

        [Input("externalIps")]
        private InputList<Inputs.SystemSdnconnectorExternalIpArgs>? _externalIps;

        /// <summary>
        /// Configure GCP external IP. The structure of `external_ip` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSdnconnectorExternalIpArgs> ExternalIps
        {
            get => _externalIps ?? (_externalIps = new InputList<Inputs.SystemSdnconnectorExternalIpArgs>());
            set => _externalIps = value;
        }

        [Input("forwardingRules")]
        private InputList<Inputs.SystemSdnconnectorForwardingRuleArgs>? _forwardingRules;

        /// <summary>
        /// Configure GCP forwarding rule. The structure of `forwarding_rule` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSdnconnectorForwardingRuleArgs> ForwardingRules
        {
            get => _forwardingRules ?? (_forwardingRules = new InputList<Inputs.SystemSdnconnectorForwardingRuleArgs>());
            set => _forwardingRules = value;
        }

        /// <summary>
        /// GCP project name.
        /// </summary>
        [Input("gcpProject")]
        public Input<string>? GcpProject { get; set; }

        [Input("gcpProjectLists")]
        private InputList<Inputs.SystemSdnconnectorGcpProjectListArgs>? _gcpProjectLists;

        /// <summary>
        /// Configure GCP project list. The structure of `gcp_project_list` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSdnconnectorGcpProjectListArgs> GcpProjectLists
        {
            get => _gcpProjectLists ?? (_gcpProjectLists = new InputList<Inputs.SystemSdnconnectorGcpProjectListArgs>());
            set => _gcpProjectLists = value;
        }

        /// <summary>
        /// Group name of computers.
        /// </summary>
        [Input("groupName")]
        public Input<string>? GroupName { get; set; }

        /// <summary>
        /// Enable/disable use for FortiGate HA service. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("haStatus")]
        public Input<string>? HaStatus { get; set; }

        /// <summary>
        /// IBM cloud region name.
        /// </summary>
        [Input("ibmRegion")]
        public Input<string>? IbmRegion { get; set; }

        /// <summary>
        /// IBM cloud compute generation 1 region name. Valid values: `us-south`, `us-east`, `germany`, `great-britain`, `japan`, `australia`.
        /// </summary>
        [Input("ibmRegionGen1")]
        public Input<string>? IbmRegionGen1 { get; set; }

        /// <summary>
        /// IBM cloud compute generation 2 region name. Valid values: `us-south`, `us-east`, `great-britain`.
        /// </summary>
        [Input("ibmRegionGen2")]
        public Input<string>? IbmRegionGen2 { get; set; }

        [Input("keyPasswd")]
        private Input<string>? _keyPasswd;

        /// <summary>
        /// Private key password.
        /// </summary>
        public Input<string>? KeyPasswd
        {
            get => _keyPasswd;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _keyPasswd = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Azure Stack login endpoint.
        /// </summary>
        [Input("loginEndpoint")]
        public Input<string>? LoginEndpoint { get; set; }

        /// <summary>
        /// SDN connector name.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        [Input("nics")]
        private InputList<Inputs.SystemSdnconnectorNicArgs>? _nics;

        /// <summary>
        /// Configure Azure network interface. The structure of `nic` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSdnconnectorNicArgs> Nics
        {
            get => _nics ?? (_nics = new InputList<Inputs.SystemSdnconnectorNicArgs>());
            set => _nics = value;
        }

        /// <summary>
        /// OCI certificate.
        /// </summary>
        [Input("ociCert")]
        public Input<string>? OciCert { get; set; }

        /// <summary>
        /// OCI pubkey fingerprint.
        /// </summary>
        [Input("ociFingerprint")]
        public Input<string>? OciFingerprint { get; set; }

        /// <summary>
        /// OCI server region.
        /// </summary>
        [Input("ociRegion")]
        public Input<string>? OciRegion { get; set; }

        /// <summary>
        /// OCI region type. Valid values: `commercial`, `government`.
        /// </summary>
        [Input("ociRegionType")]
        public Input<string>? OciRegionType { get; set; }

        [Input("password")]
        private Input<string>? _password;

        /// <summary>
        /// Password of the remote SDN connector as login credentials.
        /// </summary>
        public Input<string>? Password
        {
            get => _password;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _password = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        [Input("privateKey")]
        private Input<string>? _privateKey;

        /// <summary>
        /// Private key of GCP service account.
        /// </summary>
        public Input<string>? PrivateKey
        {
            get => _privateKey;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _privateKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// AWS region name.
        /// </summary>
        [Input("region")]
        public Input<string>? Region { get; set; }

        /// <summary>
        /// Azure resource group.
        /// </summary>
        [Input("resourceGroup")]
        public Input<string>? ResourceGroup { get; set; }

        /// <summary>
        /// Azure Stack resource URL.
        /// </summary>
        [Input("resourceUrl")]
        public Input<string>? ResourceUrl { get; set; }

        [Input("routeTables")]
        private InputList<Inputs.SystemSdnconnectorRouteTableArgs>? _routeTables;

        /// <summary>
        /// Configure Azure route table. The structure of `route_table` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSdnconnectorRouteTableArgs> RouteTables
        {
            get => _routeTables ?? (_routeTables = new InputList<Inputs.SystemSdnconnectorRouteTableArgs>());
            set => _routeTables = value;
        }

        [Input("routes")]
        private InputList<Inputs.SystemSdnconnectorRouteArgs>? _routes;

        /// <summary>
        /// Configure GCP route. The structure of `route` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSdnconnectorRouteArgs> Routes
        {
            get => _routes ?? (_routes = new InputList<Inputs.SystemSdnconnectorRouteArgs>());
            set => _routes = value;
        }

        [Input("secretKey")]
        private Input<string>? _secretKey;

        /// <summary>
        /// AWS secret access key.
        /// </summary>
        public Input<string>? SecretKey
        {
            get => _secretKey;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _secretKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        [Input("secretToken")]
        private Input<string>? _secretToken;

        /// <summary>
        /// Secret token of Kubernetes service account.
        /// </summary>
        public Input<string>? SecretToken
        {
            get => _secretToken;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _secretToken = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Server address of the remote SDN connector.
        /// </summary>
        [Input("server")]
        public Input<string>? Server { get; set; }

        [Input("serverLists")]
        private InputList<Inputs.SystemSdnconnectorServerListArgs>? _serverLists;

        /// <summary>
        /// Server address list of the remote SDN connector. The structure of `server_list` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSdnconnectorServerListArgs> ServerLists
        {
            get => _serverLists ?? (_serverLists = new InputList<Inputs.SystemSdnconnectorServerListArgs>());
            set => _serverLists = value;
        }

        /// <summary>
        /// Port number of the remote SDN connector.
        /// </summary>
        [Input("serverPort")]
        public Input<int>? ServerPort { get; set; }

        /// <summary>
        /// GCP service account email.
        /// </summary>
        [Input("serviceAccount")]
        public Input<string>? ServiceAccount { get; set; }

        /// <summary>
        /// Enable/disable connection to the remote SDN connector. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("status", required: true)]
        public Input<string> Status { get; set; } = null!;

        /// <summary>
        /// Azure subscription ID.
        /// </summary>
        [Input("subscriptionId")]
        public Input<string>? SubscriptionId { get; set; }

        /// <summary>
        /// Tenant ID (directory ID).
        /// </summary>
        [Input("tenantId")]
        public Input<string>? TenantId { get; set; }

        /// <summary>
        /// Type of SDN connector.
        /// </summary>
        [Input("type", required: true)]
        public Input<string> Type { get; set; } = null!;

        /// <summary>
        /// Dynamic object update interval (0 - 3600 sec, 0 means disabled, default = 60).
        /// </summary>
        [Input("updateInterval")]
        public Input<int>? UpdateInterval { get; set; }

        /// <summary>
        /// Enable/disable using IAM role from metadata to call API. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("useMetadataIam")]
        public Input<string>? UseMetadataIam { get; set; }

        /// <summary>
        /// User ID.
        /// </summary>
        [Input("userId")]
        public Input<string>? UserId { get; set; }

        /// <summary>
        /// Username of the remote SDN connector as login credentials.
        /// </summary>
        [Input("username")]
        public Input<string>? Username { get; set; }

        [Input("vcenterPassword")]
        private Input<string>? _vcenterPassword;

        /// <summary>
        /// vCenter server password for NSX quarantine.
        /// </summary>
        public Input<string>? VcenterPassword
        {
            get => _vcenterPassword;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _vcenterPassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// vCenter server address for NSX quarantine.
        /// </summary>
        [Input("vcenterServer")]
        public Input<string>? VcenterServer { get; set; }

        /// <summary>
        /// vCenter server username for NSX quarantine.
        /// </summary>
        [Input("vcenterUsername")]
        public Input<string>? VcenterUsername { get; set; }

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Input("vdomparam")]
        public Input<string>? Vdomparam { get; set; }

        /// <summary>
        /// Enable/disable server certificate verification. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("verifyCertificate")]
        public Input<string>? VerifyCertificate { get; set; }

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

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

    public sealed class SystemSdnconnectorState : global::Pulumi.ResourceArgs
    {
        [Input("accessKey")]
        private Input<string>? _accessKey;

        /// <summary>
        /// AWS access key ID.
        /// </summary>
        public Input<string>? AccessKey
        {
            get => _accessKey;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _accessKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        [Input("apiKey")]
        private Input<string>? _apiKey;

        /// <summary>
        /// IBM cloud API key or service ID API key.
        /// </summary>
        public Input<string>? ApiKey
        {
            get => _apiKey;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _apiKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Azure server region. Valid values: `global`, `china`, `germany`, `usgov`, `local`.
        /// </summary>
        [Input("azureRegion")]
        public Input<string>? AzureRegion { get; set; }

        /// <summary>
        /// Azure client ID (application ID).
        /// </summary>
        [Input("clientId")]
        public Input<string>? ClientId { get; set; }

        [Input("clientSecret")]
        private Input<string>? _clientSecret;

        /// <summary>
        /// Azure client secret (application key).
        /// </summary>
        public Input<string>? ClientSecret
        {
            get => _clientSecret;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _clientSecret = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Compartment ID.
        /// </summary>
        [Input("compartmentId")]
        public Input<string>? CompartmentId { get; set; }

        /// <summary>
        /// Compute generation for IBM cloud infrastructure.
        /// </summary>
        [Input("computeGeneration")]
        public Input<int>? ComputeGeneration { get; set; }

        /// <summary>
        /// Domain name.
        /// </summary>
        [Input("domain")]
        public Input<string>? Domain { get; set; }

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Input("dynamicSortSubtable")]
        public Input<string>? DynamicSortSubtable { get; set; }

        [Input("externalAccountLists")]
        private InputList<Inputs.SystemSdnconnectorExternalAccountListGetArgs>? _externalAccountLists;

        /// <summary>
        /// Configure AWS external account list. The structure of `external_account_list` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSdnconnectorExternalAccountListGetArgs> ExternalAccountLists
        {
            get => _externalAccountLists ?? (_externalAccountLists = new InputList<Inputs.SystemSdnconnectorExternalAccountListGetArgs>());
            set => _externalAccountLists = value;
        }

        [Input("externalIps")]
        private InputList<Inputs.SystemSdnconnectorExternalIpGetArgs>? _externalIps;

        /// <summary>
        /// Configure GCP external IP. The structure of `external_ip` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSdnconnectorExternalIpGetArgs> ExternalIps
        {
            get => _externalIps ?? (_externalIps = new InputList<Inputs.SystemSdnconnectorExternalIpGetArgs>());
            set => _externalIps = value;
        }

        [Input("forwardingRules")]
        private InputList<Inputs.SystemSdnconnectorForwardingRuleGetArgs>? _forwardingRules;

        /// <summary>
        /// Configure GCP forwarding rule. The structure of `forwarding_rule` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSdnconnectorForwardingRuleGetArgs> ForwardingRules
        {
            get => _forwardingRules ?? (_forwardingRules = new InputList<Inputs.SystemSdnconnectorForwardingRuleGetArgs>());
            set => _forwardingRules = value;
        }

        /// <summary>
        /// GCP project name.
        /// </summary>
        [Input("gcpProject")]
        public Input<string>? GcpProject { get; set; }

        [Input("gcpProjectLists")]
        private InputList<Inputs.SystemSdnconnectorGcpProjectListGetArgs>? _gcpProjectLists;

        /// <summary>
        /// Configure GCP project list. The structure of `gcp_project_list` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSdnconnectorGcpProjectListGetArgs> GcpProjectLists
        {
            get => _gcpProjectLists ?? (_gcpProjectLists = new InputList<Inputs.SystemSdnconnectorGcpProjectListGetArgs>());
            set => _gcpProjectLists = value;
        }

        /// <summary>
        /// Group name of computers.
        /// </summary>
        [Input("groupName")]
        public Input<string>? GroupName { get; set; }

        /// <summary>
        /// Enable/disable use for FortiGate HA service. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("haStatus")]
        public Input<string>? HaStatus { get; set; }

        /// <summary>
        /// IBM cloud region name.
        /// </summary>
        [Input("ibmRegion")]
        public Input<string>? IbmRegion { get; set; }

        /// <summary>
        /// IBM cloud compute generation 1 region name. Valid values: `us-south`, `us-east`, `germany`, `great-britain`, `japan`, `australia`.
        /// </summary>
        [Input("ibmRegionGen1")]
        public Input<string>? IbmRegionGen1 { get; set; }

        /// <summary>
        /// IBM cloud compute generation 2 region name. Valid values: `us-south`, `us-east`, `great-britain`.
        /// </summary>
        [Input("ibmRegionGen2")]
        public Input<string>? IbmRegionGen2 { get; set; }

        [Input("keyPasswd")]
        private Input<string>? _keyPasswd;

        /// <summary>
        /// Private key password.
        /// </summary>
        public Input<string>? KeyPasswd
        {
            get => _keyPasswd;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _keyPasswd = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Azure Stack login endpoint.
        /// </summary>
        [Input("loginEndpoint")]
        public Input<string>? LoginEndpoint { get; set; }

        /// <summary>
        /// SDN connector name.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        [Input("nics")]
        private InputList<Inputs.SystemSdnconnectorNicGetArgs>? _nics;

        /// <summary>
        /// Configure Azure network interface. The structure of `nic` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSdnconnectorNicGetArgs> Nics
        {
            get => _nics ?? (_nics = new InputList<Inputs.SystemSdnconnectorNicGetArgs>());
            set => _nics = value;
        }

        /// <summary>
        /// OCI certificate.
        /// </summary>
        [Input("ociCert")]
        public Input<string>? OciCert { get; set; }

        /// <summary>
        /// OCI pubkey fingerprint.
        /// </summary>
        [Input("ociFingerprint")]
        public Input<string>? OciFingerprint { get; set; }

        /// <summary>
        /// OCI server region.
        /// </summary>
        [Input("ociRegion")]
        public Input<string>? OciRegion { get; set; }

        /// <summary>
        /// OCI region type. Valid values: `commercial`, `government`.
        /// </summary>
        [Input("ociRegionType")]
        public Input<string>? OciRegionType { get; set; }

        [Input("password")]
        private Input<string>? _password;

        /// <summary>
        /// Password of the remote SDN connector as login credentials.
        /// </summary>
        public Input<string>? Password
        {
            get => _password;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _password = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        [Input("privateKey")]
        private Input<string>? _privateKey;

        /// <summary>
        /// Private key of GCP service account.
        /// </summary>
        public Input<string>? PrivateKey
        {
            get => _privateKey;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _privateKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// AWS region name.
        /// </summary>
        [Input("region")]
        public Input<string>? Region { get; set; }

        /// <summary>
        /// Azure resource group.
        /// </summary>
        [Input("resourceGroup")]
        public Input<string>? ResourceGroup { get; set; }

        /// <summary>
        /// Azure Stack resource URL.
        /// </summary>
        [Input("resourceUrl")]
        public Input<string>? ResourceUrl { get; set; }

        [Input("routeTables")]
        private InputList<Inputs.SystemSdnconnectorRouteTableGetArgs>? _routeTables;

        /// <summary>
        /// Configure Azure route table. The structure of `route_table` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSdnconnectorRouteTableGetArgs> RouteTables
        {
            get => _routeTables ?? (_routeTables = new InputList<Inputs.SystemSdnconnectorRouteTableGetArgs>());
            set => _routeTables = value;
        }

        [Input("routes")]
        private InputList<Inputs.SystemSdnconnectorRouteGetArgs>? _routes;

        /// <summary>
        /// Configure GCP route. The structure of `route` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSdnconnectorRouteGetArgs> Routes
        {
            get => _routes ?? (_routes = new InputList<Inputs.SystemSdnconnectorRouteGetArgs>());
            set => _routes = value;
        }

        [Input("secretKey")]
        private Input<string>? _secretKey;

        /// <summary>
        /// AWS secret access key.
        /// </summary>
        public Input<string>? SecretKey
        {
            get => _secretKey;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _secretKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        [Input("secretToken")]
        private Input<string>? _secretToken;

        /// <summary>
        /// Secret token of Kubernetes service account.
        /// </summary>
        public Input<string>? SecretToken
        {
            get => _secretToken;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _secretToken = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Server address of the remote SDN connector.
        /// </summary>
        [Input("server")]
        public Input<string>? Server { get; set; }

        [Input("serverLists")]
        private InputList<Inputs.SystemSdnconnectorServerListGetArgs>? _serverLists;

        /// <summary>
        /// Server address list of the remote SDN connector. The structure of `server_list` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemSdnconnectorServerListGetArgs> ServerLists
        {
            get => _serverLists ?? (_serverLists = new InputList<Inputs.SystemSdnconnectorServerListGetArgs>());
            set => _serverLists = value;
        }

        /// <summary>
        /// Port number of the remote SDN connector.
        /// </summary>
        [Input("serverPort")]
        public Input<int>? ServerPort { get; set; }

        /// <summary>
        /// GCP service account email.
        /// </summary>
        [Input("serviceAccount")]
        public Input<string>? ServiceAccount { get; set; }

        /// <summary>
        /// Enable/disable connection to the remote SDN connector. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("status")]
        public Input<string>? Status { get; set; }

        /// <summary>
        /// Azure subscription ID.
        /// </summary>
        [Input("subscriptionId")]
        public Input<string>? SubscriptionId { get; set; }

        /// <summary>
        /// Tenant ID (directory ID).
        /// </summary>
        [Input("tenantId")]
        public Input<string>? TenantId { get; set; }

        /// <summary>
        /// Type of SDN connector.
        /// </summary>
        [Input("type")]
        public Input<string>? Type { get; set; }

        /// <summary>
        /// Dynamic object update interval (0 - 3600 sec, 0 means disabled, default = 60).
        /// </summary>
        [Input("updateInterval")]
        public Input<int>? UpdateInterval { get; set; }

        /// <summary>
        /// Enable/disable using IAM role from metadata to call API. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("useMetadataIam")]
        public Input<string>? UseMetadataIam { get; set; }

        /// <summary>
        /// User ID.
        /// </summary>
        [Input("userId")]
        public Input<string>? UserId { get; set; }

        /// <summary>
        /// Username of the remote SDN connector as login credentials.
        /// </summary>
        [Input("username")]
        public Input<string>? Username { get; set; }

        [Input("vcenterPassword")]
        private Input<string>? _vcenterPassword;

        /// <summary>
        /// vCenter server password for NSX quarantine.
        /// </summary>
        public Input<string>? VcenterPassword
        {
            get => _vcenterPassword;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _vcenterPassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// vCenter server address for NSX quarantine.
        /// </summary>
        [Input("vcenterServer")]
        public Input<string>? VcenterServer { get; set; }

        /// <summary>
        /// vCenter server username for NSX quarantine.
        /// </summary>
        [Input("vcenterUsername")]
        public Input<string>? VcenterUsername { get; set; }

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Input("vdomparam")]
        public Input<string>? Vdomparam { get; set; }

        /// <summary>
        /// Enable/disable server certificate verification. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("verifyCertificate")]
        public Input<string>? VerifyCertificate { get; set; }

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

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