<reponame>pulumiverse/pulumi-fortios<gh_stars>0// *** 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>
    /// Action for automation stitches.
    /// 
    /// ## 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.SystemAutomationaction("trname", new()
    ///     {
    ///         ActionType = "email",
    ///         AwsDomain = "amazonaws.com",
    ///         Delay = 0,
    ///         EmailSubject = "SUBJECT1",
    ///         Method = "post",
    ///         MinimumInterval = 1,
    ///         Protocol = "http",
    ///         Required = "disable",
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// System AutomationAction can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemAutomationaction:SystemAutomationaction labelname {{name}}
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemAutomationaction:SystemAutomationaction labelname {{name}}
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/systemAutomationaction:SystemAutomationaction")]
    public partial class SystemAutomationaction : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Access profile for CLI script action to access FortiGate features.
        /// </summary>
        [Output("accprofile")]
        public Output<string> Accprofile { get; private set; } = null!;

        /// <summary>
        /// Action type.
        /// </summary>
        [Output("actionType")]
        public Output<string> ActionType { get; private set; } = null!;

        /// <summary>
        /// AliCloud AccessKey ID.
        /// </summary>
        [Output("alicloudAccessKeyId")]
        public Output<string> AlicloudAccessKeyId { get; private set; } = null!;

        /// <summary>
        /// AliCloud AccessKey secret.
        /// </summary>
        [Output("alicloudAccessKeySecret")]
        public Output<string?> AlicloudAccessKeySecret { get; private set; } = null!;

        /// <summary>
        /// AliCloud account ID.
        /// </summary>
        [Output("alicloudAccountId")]
        public Output<string> AlicloudAccountId { get; private set; } = null!;

        /// <summary>
        /// AliCloud function name.
        /// </summary>
        [Output("alicloudFunction")]
        public Output<string> AlicloudFunction { get; private set; } = null!;

        /// <summary>
        /// AliCloud function authorization type. Valid values: `anonymous`, `function`.
        /// </summary>
        [Output("alicloudFunctionAuthorization")]
        public Output<string> AlicloudFunctionAuthorization { get; private set; } = null!;

        /// <summary>
        /// AliCloud function domain.
        /// </summary>
        [Output("alicloudFunctionDomain")]
        public Output<string> AlicloudFunctionDomain { get; private set; } = null!;

        /// <summary>
        /// AliCloud region.
        /// </summary>
        [Output("alicloudRegion")]
        public Output<string> AlicloudRegion { get; private set; } = null!;

        /// <summary>
        /// AliCloud service name.
        /// </summary>
        [Output("alicloudService")]
        public Output<string> AlicloudService { get; private set; } = null!;

        /// <summary>
        /// AliCloud version.
        /// </summary>
        [Output("alicloudVersion")]
        public Output<string> AlicloudVersion { get; private set; } = null!;

        /// <summary>
        /// AWS API Gateway ID.
        /// </summary>
        [Output("awsApiId")]
        public Output<string> AwsApiId { get; private set; } = null!;

        /// <summary>
        /// AWS API Gateway API key.
        /// </summary>
        [Output("awsApiKey")]
        public Output<string?> AwsApiKey { get; private set; } = null!;

        /// <summary>
        /// AWS API Gateway path.
        /// </summary>
        [Output("awsApiPath")]
        public Output<string> AwsApiPath { get; private set; } = null!;

        /// <summary>
        /// AWS API Gateway deployment stage name.
        /// </summary>
        [Output("awsApiStage")]
        public Output<string> AwsApiStage { get; private set; } = null!;

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

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

        /// <summary>
        /// Azure function API key.
        /// </summary>
        [Output("azureApiKey")]
        public Output<string?> AzureApiKey { get; private set; } = null!;

        /// <summary>
        /// Azure function application name.
        /// </summary>
        [Output("azureApp")]
        public Output<string> AzureApp { get; private set; } = null!;

        /// <summary>
        /// Azure function domain.
        /// </summary>
        [Output("azureDomain")]
        public Output<string> AzureDomain { get; private set; } = null!;

        /// <summary>
        /// Azure function name.
        /// </summary>
        [Output("azureFunction")]
        public Output<string> AzureFunction { get; private set; } = null!;

        /// <summary>
        /// Azure function authorization level. Valid values: `anonymous`, `function`, `admin`.
        /// </summary>
        [Output("azureFunctionAuthorization")]
        public Output<string> AzureFunctionAuthorization { get; private set; } = null!;

        /// <summary>
        /// Delay before execution (in seconds).
        /// </summary>
        [Output("delay")]
        public Output<int> Delay { get; private set; } = null!;

        /// <summary>
        /// Description.
        /// </summary>
        [Output("description")]
        public Output<string?> Description { 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>
        /// Email body.
        /// </summary>
        [Output("emailBody")]
        public Output<string> EmailBody { get; private set; } = null!;

        /// <summary>
        /// Email sender name.
        /// </summary>
        [Output("emailFrom")]
        public Output<string?> EmailFrom { get; private set; } = null!;

        /// <summary>
        /// Email subject.
        /// </summary>
        [Output("emailSubject")]
        public Output<string?> EmailSubject { get; private set; } = null!;

        /// <summary>
        /// Email addresses. The structure of `email_to` block is documented below.
        /// </summary>
        [Output("emailTos")]
        public Output<ImmutableArray<Outputs.SystemAutomationactionEmailTo>> EmailTos { get; private set; } = null!;

        /// <summary>
        /// Enable/disable execution of CLI script on all or only one FortiGate unit in the Security Fabric. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("executeSecurityFabric")]
        public Output<string> ExecuteSecurityFabric { get; private set; } = null!;

        /// <summary>
        /// Google Cloud function name.
        /// </summary>
        [Output("gcpFunction")]
        public Output<string> GcpFunction { get; private set; } = null!;

        /// <summary>
        /// Google Cloud function domain.
        /// </summary>
        [Output("gcpFunctionDomain")]
        public Output<string> GcpFunctionDomain { get; private set; } = null!;

        /// <summary>
        /// Google Cloud function region.
        /// </summary>
        [Output("gcpFunctionRegion")]
        public Output<string> GcpFunctionRegion { get; private set; } = null!;

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

        /// <summary>
        /// Request headers. The structure of `headers` block is documented below.
        /// </summary>
        [Output("headers")]
        public Output<ImmutableArray<Outputs.SystemAutomationactionHeader>> Headers { get; private set; } = null!;

        /// <summary>
        /// Request body (if necessary). Should be serialized json string.
        /// </summary>
        [Output("httpBody")]
        public Output<string?> HttpBody { get; private set; } = null!;

        /// <summary>
        /// Request headers. The structure of `http_headers` block is documented below.
        /// </summary>
        [Output("httpHeaders")]
        public Output<ImmutableArray<Outputs.SystemAutomationactionHttpHeader>> HttpHeaders { get; private set; } = null!;

        /// <summary>
        /// Message content.
        /// </summary>
        [Output("message")]
        public Output<string> Message { get; private set; } = null!;

        /// <summary>
        /// Message type. Valid values: `text`, `json`.
        /// </summary>
        [Output("messageType")]
        public Output<string> MessageType { get; private set; } = null!;

        /// <summary>
        /// Request method (POST, PUT, GET, PATCH or DELETE). Valid values: `post`, `put`, `get`, `patch`, `delete`.
        /// </summary>
        [Output("method")]
        public Output<string> Method { get; private set; } = null!;

        /// <summary>
        /// Limit execution to no more than once in this interval (in seconds).
        /// </summary>
        [Output("minimumInterval")]
        public Output<int> MinimumInterval { get; private set; } = null!;

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

        /// <summary>
        /// Number of megabytes to limit script output to (1 - 1024, default = 10).
        /// </summary>
        [Output("outputSize")]
        public Output<int> OutputSize { get; private set; } = null!;

        /// <summary>
        /// Protocol port.
        /// </summary>
        [Output("port")]
        public Output<int> Port { get; private set; } = null!;

        /// <summary>
        /// Request protocol. Valid values: `http`, `https`.
        /// </summary>
        [Output("protocol")]
        public Output<string> Protocol { get; private set; } = null!;

        /// <summary>
        /// Enable/disable replacement message. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("replacementMessage")]
        public Output<string> ReplacementMessage { get; private set; } = null!;

        /// <summary>
        /// Replacement message group.
        /// </summary>
        [Output("replacemsgGroup")]
        public Output<string> ReplacemsgGroup { get; private set; } = null!;

        /// <summary>
        /// Required in action chain. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("required")]
        public Output<string> Required { get; private set; } = null!;

        /// <summary>
        /// CLI script.
        /// </summary>
        [Output("script")]
        public Output<string?> Script { get; private set; } = null!;

        /// <summary>
        /// NSX SDN connector names. The structure of `sdn_connector` block is documented below.
        /// </summary>
        [Output("sdnConnectors")]
        public Output<ImmutableArray<Outputs.SystemAutomationactionSdnConnector>> SdnConnectors { get; private set; } = null!;

        /// <summary>
        /// NSX security tag.
        /// </summary>
        [Output("securityTag")]
        public Output<string> SecurityTag { get; private set; } = null!;

        /// <summary>
        /// System action type. Valid values: `reboot`, `shutdown`, `backup-config`.
        /// </summary>
        [Output("systemAction")]
        public Output<string> SystemAction { get; private set; } = null!;

        /// <summary>
        /// Maximum running time for this script in seconds (0 = no timeout).
        /// </summary>
        [Output("timeout")]
        public Output<int> Timeout { get; private set; } = null!;

        /// <summary>
        /// Custom TLS certificate for API request.
        /// </summary>
        [Output("tlsCertificate")]
        public Output<string> TlsCertificate { get; private set; } = null!;

        /// <summary>
        /// Request API URI.
        /// </summary>
        [Output("uri")]
        public Output<string?> Uri { 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 verification of the remote host certificate. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("verifyHostCert")]
        public Output<string> VerifyHostCert { get; private set; } = null!;


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

        private SystemAutomationaction(string name, Input<string> id, SystemAutomationactionState? state = null, CustomResourceOptions? options = null)
            : base("fortios:index/systemAutomationaction:SystemAutomationaction", 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 =
                {
                    "alicloudAccessKeySecret",
                    "awsApiKey",
                    "azureApiKey",
                },
            };
            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 SystemAutomationaction 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 SystemAutomationaction Get(string name, Input<string> id, SystemAutomationactionState? state = null, CustomResourceOptions? options = null)
        {
            return new SystemAutomationaction(name, id, state, options);
        }
    }

    public sealed class SystemAutomationactionArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Access profile for CLI script action to access FortiGate features.
        /// </summary>
        [Input("accprofile")]
        public Input<string>? Accprofile { get; set; }

        /// <summary>
        /// Action type.
        /// </summary>
        [Input("actionType")]
        public Input<string>? ActionType { get; set; }

        /// <summary>
        /// AliCloud AccessKey ID.
        /// </summary>
        [Input("alicloudAccessKeyId")]
        public Input<string>? AlicloudAccessKeyId { get; set; }

        [Input("alicloudAccessKeySecret")]
        private Input<string>? _alicloudAccessKeySecret;

        /// <summary>
        /// AliCloud AccessKey secret.
        /// </summary>
        public Input<string>? AlicloudAccessKeySecret
        {
            get => _alicloudAccessKeySecret;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _alicloudAccessKeySecret = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// AliCloud account ID.
        /// </summary>
        [Input("alicloudAccountId")]
        public Input<string>? AlicloudAccountId { get; set; }

        /// <summary>
        /// AliCloud function name.
        /// </summary>
        [Input("alicloudFunction")]
        public Input<string>? AlicloudFunction { get; set; }

        /// <summary>
        /// AliCloud function authorization type. Valid values: `anonymous`, `function`.
        /// </summary>
        [Input("alicloudFunctionAuthorization")]
        public Input<string>? AlicloudFunctionAuthorization { get; set; }

        /// <summary>
        /// AliCloud function domain.
        /// </summary>
        [Input("alicloudFunctionDomain")]
        public Input<string>? AlicloudFunctionDomain { get; set; }

        /// <summary>
        /// AliCloud region.
        /// </summary>
        [Input("alicloudRegion")]
        public Input<string>? AlicloudRegion { get; set; }

        /// <summary>
        /// AliCloud service name.
        /// </summary>
        [Input("alicloudService")]
        public Input<string>? AlicloudService { get; set; }

        /// <summary>
        /// AliCloud version.
        /// </summary>
        [Input("alicloudVersion")]
        public Input<string>? AlicloudVersion { get; set; }

        /// <summary>
        /// AWS API Gateway ID.
        /// </summary>
        [Input("awsApiId")]
        public Input<string>? AwsApiId { get; set; }

        [Input("awsApiKey")]
        private Input<string>? _awsApiKey;

        /// <summary>
        /// AWS API Gateway API key.
        /// </summary>
        public Input<string>? AwsApiKey
        {
            get => _awsApiKey;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _awsApiKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// AWS API Gateway path.
        /// </summary>
        [Input("awsApiPath")]
        public Input<string>? AwsApiPath { get; set; }

        /// <summary>
        /// AWS API Gateway deployment stage name.
        /// </summary>
        [Input("awsApiStage")]
        public Input<string>? AwsApiStage { get; set; }

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

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

        [Input("azureApiKey")]
        private Input<string>? _azureApiKey;

        /// <summary>
        /// Azure function API key.
        /// </summary>
        public Input<string>? AzureApiKey
        {
            get => _azureApiKey;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _azureApiKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Azure function application name.
        /// </summary>
        [Input("azureApp")]
        public Input<string>? AzureApp { get; set; }

        /// <summary>
        /// Azure function domain.
        /// </summary>
        [Input("azureDomain")]
        public Input<string>? AzureDomain { get; set; }

        /// <summary>
        /// Azure function name.
        /// </summary>
        [Input("azureFunction")]
        public Input<string>? AzureFunction { get; set; }

        /// <summary>
        /// Azure function authorization level. Valid values: `anonymous`, `function`, `admin`.
        /// </summary>
        [Input("azureFunctionAuthorization")]
        public Input<string>? AzureFunctionAuthorization { get; set; }

        /// <summary>
        /// Delay before execution (in seconds).
        /// </summary>
        [Input("delay")]
        public Input<int>? Delay { get; set; }

        /// <summary>
        /// Description.
        /// </summary>
        [Input("description")]
        public Input<string>? Description { 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; }

        /// <summary>
        /// Email body.
        /// </summary>
        [Input("emailBody")]
        public Input<string>? EmailBody { get; set; }

        /// <summary>
        /// Email sender name.
        /// </summary>
        [Input("emailFrom")]
        public Input<string>? EmailFrom { get; set; }

        /// <summary>
        /// Email subject.
        /// </summary>
        [Input("emailSubject")]
        public Input<string>? EmailSubject { get; set; }

        [Input("emailTos")]
        private InputList<Inputs.SystemAutomationactionEmailToArgs>? _emailTos;

        /// <summary>
        /// Email addresses. The structure of `email_to` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAutomationactionEmailToArgs> EmailTos
        {
            get => _emailTos ?? (_emailTos = new InputList<Inputs.SystemAutomationactionEmailToArgs>());
            set => _emailTos = value;
        }

        /// <summary>
        /// Enable/disable execution of CLI script on all or only one FortiGate unit in the Security Fabric. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("executeSecurityFabric")]
        public Input<string>? ExecuteSecurityFabric { get; set; }

        /// <summary>
        /// Google Cloud function name.
        /// </summary>
        [Input("gcpFunction")]
        public Input<string>? GcpFunction { get; set; }

        /// <summary>
        /// Google Cloud function domain.
        /// </summary>
        [Input("gcpFunctionDomain")]
        public Input<string>? GcpFunctionDomain { get; set; }

        /// <summary>
        /// Google Cloud function region.
        /// </summary>
        [Input("gcpFunctionRegion")]
        public Input<string>? GcpFunctionRegion { get; set; }

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

        [Input("headers")]
        private InputList<Inputs.SystemAutomationactionHeaderArgs>? _headers;

        /// <summary>
        /// Request headers. The structure of `headers` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAutomationactionHeaderArgs> Headers
        {
            get => _headers ?? (_headers = new InputList<Inputs.SystemAutomationactionHeaderArgs>());
            set => _headers = value;
        }

        /// <summary>
        /// Request body (if necessary). Should be serialized json string.
        /// </summary>
        [Input("httpBody")]
        public Input<string>? HttpBody { get; set; }

        [Input("httpHeaders")]
        private InputList<Inputs.SystemAutomationactionHttpHeaderArgs>? _httpHeaders;

        /// <summary>
        /// Request headers. The structure of `http_headers` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAutomationactionHttpHeaderArgs> HttpHeaders
        {
            get => _httpHeaders ?? (_httpHeaders = new InputList<Inputs.SystemAutomationactionHttpHeaderArgs>());
            set => _httpHeaders = value;
        }

        /// <summary>
        /// Message content.
        /// </summary>
        [Input("message")]
        public Input<string>? Message { get; set; }

        /// <summary>
        /// Message type. Valid values: `text`, `json`.
        /// </summary>
        [Input("messageType")]
        public Input<string>? MessageType { get; set; }

        /// <summary>
        /// Request method (POST, PUT, GET, PATCH or DELETE). Valid values: `post`, `put`, `get`, `patch`, `delete`.
        /// </summary>
        [Input("method")]
        public Input<string>? Method { get; set; }

        /// <summary>
        /// Limit execution to no more than once in this interval (in seconds).
        /// </summary>
        [Input("minimumInterval")]
        public Input<int>? MinimumInterval { get; set; }

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

        /// <summary>
        /// Number of megabytes to limit script output to (1 - 1024, default = 10).
        /// </summary>
        [Input("outputSize")]
        public Input<int>? OutputSize { get; set; }

        /// <summary>
        /// Protocol port.
        /// </summary>
        [Input("port")]
        public Input<int>? Port { get; set; }

        /// <summary>
        /// Request protocol. Valid values: `http`, `https`.
        /// </summary>
        [Input("protocol")]
        public Input<string>? Protocol { get; set; }

        /// <summary>
        /// Enable/disable replacement message. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("replacementMessage")]
        public Input<string>? ReplacementMessage { get; set; }

        /// <summary>
        /// Replacement message group.
        /// </summary>
        [Input("replacemsgGroup")]
        public Input<string>? ReplacemsgGroup { get; set; }

        /// <summary>
        /// Required in action chain. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("required")]
        public Input<string>? Required { get; set; }

        /// <summary>
        /// CLI script.
        /// </summary>
        [Input("script")]
        public Input<string>? Script { get; set; }

        [Input("sdnConnectors")]
        private InputList<Inputs.SystemAutomationactionSdnConnectorArgs>? _sdnConnectors;

        /// <summary>
        /// NSX SDN connector names. The structure of `sdn_connector` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAutomationactionSdnConnectorArgs> SdnConnectors
        {
            get => _sdnConnectors ?? (_sdnConnectors = new InputList<Inputs.SystemAutomationactionSdnConnectorArgs>());
            set => _sdnConnectors = value;
        }

        /// <summary>
        /// NSX security tag.
        /// </summary>
        [Input("securityTag")]
        public Input<string>? SecurityTag { get; set; }

        /// <summary>
        /// System action type. Valid values: `reboot`, `shutdown`, `backup-config`.
        /// </summary>
        [Input("systemAction")]
        public Input<string>? SystemAction { get; set; }

        /// <summary>
        /// Maximum running time for this script in seconds (0 = no timeout).
        /// </summary>
        [Input("timeout")]
        public Input<int>? Timeout { get; set; }

        /// <summary>
        /// Custom TLS certificate for API request.
        /// </summary>
        [Input("tlsCertificate")]
        public Input<string>? TlsCertificate { get; set; }

        /// <summary>
        /// Request API URI.
        /// </summary>
        [Input("uri")]
        public Input<string>? Uri { 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 verification of the remote host certificate. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("verifyHostCert")]
        public Input<string>? VerifyHostCert { get; set; }

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

    public sealed class SystemAutomationactionState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Access profile for CLI script action to access FortiGate features.
        /// </summary>
        [Input("accprofile")]
        public Input<string>? Accprofile { get; set; }

        /// <summary>
        /// Action type.
        /// </summary>
        [Input("actionType")]
        public Input<string>? ActionType { get; set; }

        /// <summary>
        /// AliCloud AccessKey ID.
        /// </summary>
        [Input("alicloudAccessKeyId")]
        public Input<string>? AlicloudAccessKeyId { get; set; }

        [Input("alicloudAccessKeySecret")]
        private Input<string>? _alicloudAccessKeySecret;

        /// <summary>
        /// AliCloud AccessKey secret.
        /// </summary>
        public Input<string>? AlicloudAccessKeySecret
        {
            get => _alicloudAccessKeySecret;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _alicloudAccessKeySecret = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// AliCloud account ID.
        /// </summary>
        [Input("alicloudAccountId")]
        public Input<string>? AlicloudAccountId { get; set; }

        /// <summary>
        /// AliCloud function name.
        /// </summary>
        [Input("alicloudFunction")]
        public Input<string>? AlicloudFunction { get; set; }

        /// <summary>
        /// AliCloud function authorization type. Valid values: `anonymous`, `function`.
        /// </summary>
        [Input("alicloudFunctionAuthorization")]
        public Input<string>? AlicloudFunctionAuthorization { get; set; }

        /// <summary>
        /// AliCloud function domain.
        /// </summary>
        [Input("alicloudFunctionDomain")]
        public Input<string>? AlicloudFunctionDomain { get; set; }

        /// <summary>
        /// AliCloud region.
        /// </summary>
        [Input("alicloudRegion")]
        public Input<string>? AlicloudRegion { get; set; }

        /// <summary>
        /// AliCloud service name.
        /// </summary>
        [Input("alicloudService")]
        public Input<string>? AlicloudService { get; set; }

        /// <summary>
        /// AliCloud version.
        /// </summary>
        [Input("alicloudVersion")]
        public Input<string>? AlicloudVersion { get; set; }

        /// <summary>
        /// AWS API Gateway ID.
        /// </summary>
        [Input("awsApiId")]
        public Input<string>? AwsApiId { get; set; }

        [Input("awsApiKey")]
        private Input<string>? _awsApiKey;

        /// <summary>
        /// AWS API Gateway API key.
        /// </summary>
        public Input<string>? AwsApiKey
        {
            get => _awsApiKey;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _awsApiKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// AWS API Gateway path.
        /// </summary>
        [Input("awsApiPath")]
        public Input<string>? AwsApiPath { get; set; }

        /// <summary>
        /// AWS API Gateway deployment stage name.
        /// </summary>
        [Input("awsApiStage")]
        public Input<string>? AwsApiStage { get; set; }

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

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

        [Input("azureApiKey")]
        private Input<string>? _azureApiKey;

        /// <summary>
        /// Azure function API key.
        /// </summary>
        public Input<string>? AzureApiKey
        {
            get => _azureApiKey;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _azureApiKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Azure function application name.
        /// </summary>
        [Input("azureApp")]
        public Input<string>? AzureApp { get; set; }

        /// <summary>
        /// Azure function domain.
        /// </summary>
        [Input("azureDomain")]
        public Input<string>? AzureDomain { get; set; }

        /// <summary>
        /// Azure function name.
        /// </summary>
        [Input("azureFunction")]
        public Input<string>? AzureFunction { get; set; }

        /// <summary>
        /// Azure function authorization level. Valid values: `anonymous`, `function`, `admin`.
        /// </summary>
        [Input("azureFunctionAuthorization")]
        public Input<string>? AzureFunctionAuthorization { get; set; }

        /// <summary>
        /// Delay before execution (in seconds).
        /// </summary>
        [Input("delay")]
        public Input<int>? Delay { get; set; }

        /// <summary>
        /// Description.
        /// </summary>
        [Input("description")]
        public Input<string>? Description { 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; }

        /// <summary>
        /// Email body.
        /// </summary>
        [Input("emailBody")]
        public Input<string>? EmailBody { get; set; }

        /// <summary>
        /// Email sender name.
        /// </summary>
        [Input("emailFrom")]
        public Input<string>? EmailFrom { get; set; }

        /// <summary>
        /// Email subject.
        /// </summary>
        [Input("emailSubject")]
        public Input<string>? EmailSubject { get; set; }

        [Input("emailTos")]
        private InputList<Inputs.SystemAutomationactionEmailToGetArgs>? _emailTos;

        /// <summary>
        /// Email addresses. The structure of `email_to` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAutomationactionEmailToGetArgs> EmailTos
        {
            get => _emailTos ?? (_emailTos = new InputList<Inputs.SystemAutomationactionEmailToGetArgs>());
            set => _emailTos = value;
        }

        /// <summary>
        /// Enable/disable execution of CLI script on all or only one FortiGate unit in the Security Fabric. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("executeSecurityFabric")]
        public Input<string>? ExecuteSecurityFabric { get; set; }

        /// <summary>
        /// Google Cloud function name.
        /// </summary>
        [Input("gcpFunction")]
        public Input<string>? GcpFunction { get; set; }

        /// <summary>
        /// Google Cloud function domain.
        /// </summary>
        [Input("gcpFunctionDomain")]
        public Input<string>? GcpFunctionDomain { get; set; }

        /// <summary>
        /// Google Cloud function region.
        /// </summary>
        [Input("gcpFunctionRegion")]
        public Input<string>? GcpFunctionRegion { get; set; }

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

        [Input("headers")]
        private InputList<Inputs.SystemAutomationactionHeaderGetArgs>? _headers;

        /// <summary>
        /// Request headers. The structure of `headers` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAutomationactionHeaderGetArgs> Headers
        {
            get => _headers ?? (_headers = new InputList<Inputs.SystemAutomationactionHeaderGetArgs>());
            set => _headers = value;
        }

        /// <summary>
        /// Request body (if necessary). Should be serialized json string.
        /// </summary>
        [Input("httpBody")]
        public Input<string>? HttpBody { get; set; }

        [Input("httpHeaders")]
        private InputList<Inputs.SystemAutomationactionHttpHeaderGetArgs>? _httpHeaders;

        /// <summary>
        /// Request headers. The structure of `http_headers` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAutomationactionHttpHeaderGetArgs> HttpHeaders
        {
            get => _httpHeaders ?? (_httpHeaders = new InputList<Inputs.SystemAutomationactionHttpHeaderGetArgs>());
            set => _httpHeaders = value;
        }

        /// <summary>
        /// Message content.
        /// </summary>
        [Input("message")]
        public Input<string>? Message { get; set; }

        /// <summary>
        /// Message type. Valid values: `text`, `json`.
        /// </summary>
        [Input("messageType")]
        public Input<string>? MessageType { get; set; }

        /// <summary>
        /// Request method (POST, PUT, GET, PATCH or DELETE). Valid values: `post`, `put`, `get`, `patch`, `delete`.
        /// </summary>
        [Input("method")]
        public Input<string>? Method { get; set; }

        /// <summary>
        /// Limit execution to no more than once in this interval (in seconds).
        /// </summary>
        [Input("minimumInterval")]
        public Input<int>? MinimumInterval { get; set; }

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

        /// <summary>
        /// Number of megabytes to limit script output to (1 - 1024, default = 10).
        /// </summary>
        [Input("outputSize")]
        public Input<int>? OutputSize { get; set; }

        /// <summary>
        /// Protocol port.
        /// </summary>
        [Input("port")]
        public Input<int>? Port { get; set; }

        /// <summary>
        /// Request protocol. Valid values: `http`, `https`.
        /// </summary>
        [Input("protocol")]
        public Input<string>? Protocol { get; set; }

        /// <summary>
        /// Enable/disable replacement message. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("replacementMessage")]
        public Input<string>? ReplacementMessage { get; set; }

        /// <summary>
        /// Replacement message group.
        /// </summary>
        [Input("replacemsgGroup")]
        public Input<string>? ReplacemsgGroup { get; set; }

        /// <summary>
        /// Required in action chain. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("required")]
        public Input<string>? Required { get; set; }

        /// <summary>
        /// CLI script.
        /// </summary>
        [Input("script")]
        public Input<string>? Script { get; set; }

        [Input("sdnConnectors")]
        private InputList<Inputs.SystemAutomationactionSdnConnectorGetArgs>? _sdnConnectors;

        /// <summary>
        /// NSX SDN connector names. The structure of `sdn_connector` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAutomationactionSdnConnectorGetArgs> SdnConnectors
        {
            get => _sdnConnectors ?? (_sdnConnectors = new InputList<Inputs.SystemAutomationactionSdnConnectorGetArgs>());
            set => _sdnConnectors = value;
        }

        /// <summary>
        /// NSX security tag.
        /// </summary>
        [Input("securityTag")]
        public Input<string>? SecurityTag { get; set; }

        /// <summary>
        /// System action type. Valid values: `reboot`, `shutdown`, `backup-config`.
        /// </summary>
        [Input("systemAction")]
        public Input<string>? SystemAction { get; set; }

        /// <summary>
        /// Maximum running time for this script in seconds (0 = no timeout).
        /// </summary>
        [Input("timeout")]
        public Input<int>? Timeout { get; set; }

        /// <summary>
        /// Custom TLS certificate for API request.
        /// </summary>
        [Input("tlsCertificate")]
        public Input<string>? TlsCertificate { get; set; }

        /// <summary>
        /// Request API URI.
        /// </summary>
        [Input("uri")]
        public Input<string>? Uri { 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 verification of the remote host certificate. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("verifyHostCert")]
        public Input<string>? VerifyHostCert { get; set; }

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