1. Packages
  2. Tencentcloud Provider
  3. API Docs
  4. WafCustomRule
tencentcloud 1.81.182 published on Monday, Apr 14, 2025 by tencentcloudstack

tencentcloud.WafCustomRule

Explore with Pulumi AI

Provides a resource to create a waf custom rule

NOTE: If job_type is TimedJob, Then expire_time must select the maximum time value of the end_date_time in the parameter list timed.

Example Usage

Create a standard custom rule

import * as pulumi from "@pulumi/pulumi";
import * as tencentcloud from "@pulumi/tencentcloud";

const example = new tencentcloud.WafCustomRule("example", {
    actionType: "1",
    domain: "test.com",
    expireTime: "0",
    redirect: "/",
    sortId: "50",
    status: "1",
    strategies: [{
        arg: "",
        compareFunc: "ipmatch",
        content: "2.2.2.2",
        field: "IP",
    }],
});
Copy
import pulumi
import pulumi_tencentcloud as tencentcloud

example = tencentcloud.WafCustomRule("example",
    action_type="1",
    domain="test.com",
    expire_time="0",
    redirect="/",
    sort_id="50",
    status="1",
    strategies=[{
        "arg": "",
        "compare_func": "ipmatch",
        "content": "2.2.2.2",
        "field": "IP",
    }])
Copy
package main

import (
	"github.com/pulumi/pulumi-terraform-provider/sdks/go/tencentcloud/tencentcloud"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := tencentcloud.NewWafCustomRule(ctx, "example", &tencentcloud.WafCustomRuleArgs{
			ActionType: pulumi.String("1"),
			Domain:     pulumi.String("test.com"),
			ExpireTime: pulumi.String("0"),
			Redirect:   pulumi.String("/"),
			SortId:     pulumi.String("50"),
			Status:     pulumi.String("1"),
			Strategies: tencentcloud.WafCustomRuleStrategyArray{
				&tencentcloud.WafCustomRuleStrategyArgs{
					Arg:         pulumi.String(""),
					CompareFunc: pulumi.String("ipmatch"),
					Content:     pulumi.String("2.2.2.2"),
					Field:       pulumi.String("IP"),
				},
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
Copy
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Tencentcloud = Pulumi.Tencentcloud;

return await Deployment.RunAsync(() => 
{
    var example = new Tencentcloud.WafCustomRule("example", new()
    {
        ActionType = "1",
        Domain = "test.com",
        ExpireTime = "0",
        Redirect = "/",
        SortId = "50",
        Status = "1",
        Strategies = new[]
        {
            new Tencentcloud.Inputs.WafCustomRuleStrategyArgs
            {
                Arg = "",
                CompareFunc = "ipmatch",
                Content = "2.2.2.2",
                Field = "IP",
            },
        },
    });

});
Copy
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.tencentcloud.WafCustomRule;
import com.pulumi.tencentcloud.WafCustomRuleArgs;
import com.pulumi.tencentcloud.inputs.WafCustomRuleStrategyArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var example = new WafCustomRule("example", WafCustomRuleArgs.builder()
            .actionType("1")
            .domain("test.com")
            .expireTime("0")
            .redirect("/")
            .sortId("50")
            .status("1")
            .strategies(WafCustomRuleStrategyArgs.builder()
                .arg("")
                .compareFunc("ipmatch")
                .content("2.2.2.2")
                .field("IP")
                .build())
            .build());

    }
}
Copy
resources:
  example:
    type: tencentcloud:WafCustomRule
    properties:
      actionType: '1'
      domain: test.com
      expireTime: '0'
      redirect: /
      sortId: '50'
      status: '1'
      strategies:
        - arg: ""
          compareFunc: ipmatch
          content: 2.2.2.2
          field: IP
Copy

Create a timed resource for execution

import * as pulumi from "@pulumi/pulumi";
import * as tencentcloud from "@pulumi/tencentcloud";

const example = new tencentcloud.WafCustomRule("example", {
    actionType: "1",
    domain: "test.com",
    expireTime: "1740672000",
    jobDateTime: {
        timeTZone: "UTC+8",
        timeds: [{
            endDateTime: 1740672000,
            startDateTime: 1740585600,
        }],
    },
    jobType: "TimedJob",
    redirect: "/",
    sortId: "50",
    status: "1",
    strategies: [
        {
            arg: "",
            compareFunc: "ipmatch",
            content: "2.2.2.2",
            field: "IP",
        },
        {
            arg: "",
            caseNotSensitive: 1,
            compareFunc: "strprefix",
            content: "https://www.demo.com",
            field: "Referer",
        },
    ],
});
Copy
import pulumi
import pulumi_tencentcloud as tencentcloud

example = tencentcloud.WafCustomRule("example",
    action_type="1",
    domain="test.com",
    expire_time="1740672000",
    job_date_time={
        "time_t_zone": "UTC+8",
        "timeds": [{
            "end_date_time": 1740672000,
            "start_date_time": 1740585600,
        }],
    },
    job_type="TimedJob",
    redirect="/",
    sort_id="50",
    status="1",
    strategies=[
        {
            "arg": "",
            "compare_func": "ipmatch",
            "content": "2.2.2.2",
            "field": "IP",
        },
        {
            "arg": "",
            "case_not_sensitive": 1,
            "compare_func": "strprefix",
            "content": "https://www.demo.com",
            "field": "Referer",
        },
    ])
Copy
package main

import (
	"github.com/pulumi/pulumi-terraform-provider/sdks/go/tencentcloud/tencentcloud"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := tencentcloud.NewWafCustomRule(ctx, "example", &tencentcloud.WafCustomRuleArgs{
			ActionType: pulumi.String("1"),
			Domain:     pulumi.String("test.com"),
			ExpireTime: pulumi.String("1740672000"),
			JobDateTime: &tencentcloud.WafCustomRuleJobDateTimeArgs{
				TimeTZone: pulumi.String("UTC+8"),
				Timeds: tencentcloud.WafCustomRuleJobDateTimeTimedArray{
					&tencentcloud.WafCustomRuleJobDateTimeTimedArgs{
						EndDateTime:   pulumi.Float64(1740672000),
						StartDateTime: pulumi.Float64(1740585600),
					},
				},
			},
			JobType:  pulumi.String("TimedJob"),
			Redirect: pulumi.String("/"),
			SortId:   pulumi.String("50"),
			Status:   pulumi.String("1"),
			Strategies: tencentcloud.WafCustomRuleStrategyArray{
				&tencentcloud.WafCustomRuleStrategyArgs{
					Arg:         pulumi.String(""),
					CompareFunc: pulumi.String("ipmatch"),
					Content:     pulumi.String("2.2.2.2"),
					Field:       pulumi.String("IP"),
				},
				&tencentcloud.WafCustomRuleStrategyArgs{
					Arg:              pulumi.String(""),
					CaseNotSensitive: pulumi.Float64(1),
					CompareFunc:      pulumi.String("strprefix"),
					Content:          pulumi.String("https://www.demo.com"),
					Field:            pulumi.String("Referer"),
				},
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
Copy
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Tencentcloud = Pulumi.Tencentcloud;

return await Deployment.RunAsync(() => 
{
    var example = new Tencentcloud.WafCustomRule("example", new()
    {
        ActionType = "1",
        Domain = "test.com",
        ExpireTime = "1740672000",
        JobDateTime = new Tencentcloud.Inputs.WafCustomRuleJobDateTimeArgs
        {
            TimeTZone = "UTC+8",
            Timeds = new[]
            {
                new Tencentcloud.Inputs.WafCustomRuleJobDateTimeTimedArgs
                {
                    EndDateTime = 1740672000,
                    StartDateTime = 1740585600,
                },
            },
        },
        JobType = "TimedJob",
        Redirect = "/",
        SortId = "50",
        Status = "1",
        Strategies = new[]
        {
            new Tencentcloud.Inputs.WafCustomRuleStrategyArgs
            {
                Arg = "",
                CompareFunc = "ipmatch",
                Content = "2.2.2.2",
                Field = "IP",
            },
            new Tencentcloud.Inputs.WafCustomRuleStrategyArgs
            {
                Arg = "",
                CaseNotSensitive = 1,
                CompareFunc = "strprefix",
                Content = "https://www.demo.com",
                Field = "Referer",
            },
        },
    });

});
Copy
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.tencentcloud.WafCustomRule;
import com.pulumi.tencentcloud.WafCustomRuleArgs;
import com.pulumi.tencentcloud.inputs.WafCustomRuleJobDateTimeArgs;
import com.pulumi.tencentcloud.inputs.WafCustomRuleStrategyArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var example = new WafCustomRule("example", WafCustomRuleArgs.builder()
            .actionType("1")
            .domain("test.com")
            .expireTime("1740672000")
            .jobDateTime(WafCustomRuleJobDateTimeArgs.builder()
                .timeTZone("UTC+8")
                .timeds(WafCustomRuleJobDateTimeTimedArgs.builder()
                    .endDateTime(1740672000)
                    .startDateTime(1740585600)
                    .build())
                .build())
            .jobType("TimedJob")
            .redirect("/")
            .sortId("50")
            .status("1")
            .strategies(            
                WafCustomRuleStrategyArgs.builder()
                    .arg("")
                    .compareFunc("ipmatch")
                    .content("2.2.2.2")
                    .field("IP")
                    .build(),
                WafCustomRuleStrategyArgs.builder()
                    .arg("")
                    .caseNotSensitive(1)
                    .compareFunc("strprefix")
                    .content("https://www.demo.com")
                    .field("Referer")
                    .build())
            .build());

    }
}
Copy
resources:
  example:
    type: tencentcloud:WafCustomRule
    properties:
      actionType: '1'
      domain: test.com
      expireTime: '1740672000'
      jobDateTime:
        timeTZone: UTC+8
        timeds:
          - endDateTime: 1.740672e+09
            startDateTime: 1.7405856e+09
      jobType: TimedJob
      redirect: /
      sortId: '50'
      status: '1'
      strategies:
        - arg: ""
          compareFunc: ipmatch
          content: 2.2.2.2
          field: IP
        - arg: ""
          caseNotSensitive: 1
          compareFunc: strprefix
          content: https://www.demo.com
          field: Referer
Copy

Create a cron resource for execution

import * as pulumi from "@pulumi/pulumi";
import * as tencentcloud from "@pulumi/tencentcloud";

const example = new tencentcloud.WafCustomRule("example", {
    actionType: "1",
    domain: "test.com",
    expireTime: "0",
    jobDateTime: {
        crons: [{
            endTime: "03:00:00",
            startTime: "01:00:00",
            wDays: [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
            ],
        }],
        timeTZone: "UTC+8",
    },
    jobType: "CronJob",
    redirect: "/",
    sortId: "50",
    status: "1",
    strategies: [
        {
            arg: "",
            compareFunc: "ipmatch",
            content: "2.2.2.2",
            field: "IP",
        },
        {
            arg: "",
            caseNotSensitive: 1,
            compareFunc: "strprefix",
            content: "https://www.demo.com",
            field: "Referer",
        },
    ],
});
Copy
import pulumi
import pulumi_tencentcloud as tencentcloud

example = tencentcloud.WafCustomRule("example",
    action_type="1",
    domain="test.com",
    expire_time="0",
    job_date_time={
        "crons": [{
            "end_time": "03:00:00",
            "start_time": "01:00:00",
            "w_days": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
            ],
        }],
        "time_t_zone": "UTC+8",
    },
    job_type="CronJob",
    redirect="/",
    sort_id="50",
    status="1",
    strategies=[
        {
            "arg": "",
            "compare_func": "ipmatch",
            "content": "2.2.2.2",
            "field": "IP",
        },
        {
            "arg": "",
            "case_not_sensitive": 1,
            "compare_func": "strprefix",
            "content": "https://www.demo.com",
            "field": "Referer",
        },
    ])
Copy
package main

import (
	"github.com/pulumi/pulumi-terraform-provider/sdks/go/tencentcloud/tencentcloud"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := tencentcloud.NewWafCustomRule(ctx, "example", &tencentcloud.WafCustomRuleArgs{
			ActionType: pulumi.String("1"),
			Domain:     pulumi.String("test.com"),
			ExpireTime: pulumi.String("0"),
			JobDateTime: &tencentcloud.WafCustomRuleJobDateTimeArgs{
				Crons: tencentcloud.WafCustomRuleJobDateTimeCronArray{
					&tencentcloud.WafCustomRuleJobDateTimeCronArgs{
						EndTime:   pulumi.String("03:00:00"),
						StartTime: pulumi.String("01:00:00"),
						WDays: pulumi.Float64Array{
							pulumi.Float64(0),
							pulumi.Float64(1),
							pulumi.Float64(2),
							pulumi.Float64(3),
							pulumi.Float64(4),
							pulumi.Float64(5),
							pulumi.Float64(6),
						},
					},
				},
				TimeTZone: pulumi.String("UTC+8"),
			},
			JobType:  pulumi.String("CronJob"),
			Redirect: pulumi.String("/"),
			SortId:   pulumi.String("50"),
			Status:   pulumi.String("1"),
			Strategies: tencentcloud.WafCustomRuleStrategyArray{
				&tencentcloud.WafCustomRuleStrategyArgs{
					Arg:         pulumi.String(""),
					CompareFunc: pulumi.String("ipmatch"),
					Content:     pulumi.String("2.2.2.2"),
					Field:       pulumi.String("IP"),
				},
				&tencentcloud.WafCustomRuleStrategyArgs{
					Arg:              pulumi.String(""),
					CaseNotSensitive: pulumi.Float64(1),
					CompareFunc:      pulumi.String("strprefix"),
					Content:          pulumi.String("https://www.demo.com"),
					Field:            pulumi.String("Referer"),
				},
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
Copy
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Tencentcloud = Pulumi.Tencentcloud;

return await Deployment.RunAsync(() => 
{
    var example = new Tencentcloud.WafCustomRule("example", new()
    {
        ActionType = "1",
        Domain = "test.com",
        ExpireTime = "0",
        JobDateTime = new Tencentcloud.Inputs.WafCustomRuleJobDateTimeArgs
        {
            Crons = new[]
            {
                new Tencentcloud.Inputs.WafCustomRuleJobDateTimeCronArgs
                {
                    EndTime = "03:00:00",
                    StartTime = "01:00:00",
                    WDays = new[]
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                    },
                },
            },
            TimeTZone = "UTC+8",
        },
        JobType = "CronJob",
        Redirect = "/",
        SortId = "50",
        Status = "1",
        Strategies = new[]
        {
            new Tencentcloud.Inputs.WafCustomRuleStrategyArgs
            {
                Arg = "",
                CompareFunc = "ipmatch",
                Content = "2.2.2.2",
                Field = "IP",
            },
            new Tencentcloud.Inputs.WafCustomRuleStrategyArgs
            {
                Arg = "",
                CaseNotSensitive = 1,
                CompareFunc = "strprefix",
                Content = "https://www.demo.com",
                Field = "Referer",
            },
        },
    });

});
Copy
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.tencentcloud.WafCustomRule;
import com.pulumi.tencentcloud.WafCustomRuleArgs;
import com.pulumi.tencentcloud.inputs.WafCustomRuleJobDateTimeArgs;
import com.pulumi.tencentcloud.inputs.WafCustomRuleStrategyArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var example = new WafCustomRule("example", WafCustomRuleArgs.builder()
            .actionType("1")
            .domain("test.com")
            .expireTime("0")
            .jobDateTime(WafCustomRuleJobDateTimeArgs.builder()
                .crons(WafCustomRuleJobDateTimeCronArgs.builder()
                    .endTime("03:00:00")
                    .startTime("01:00:00")
                    .wDays(                    
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6)
                    .build())
                .timeTZone("UTC+8")
                .build())
            .jobType("CronJob")
            .redirect("/")
            .sortId("50")
            .status("1")
            .strategies(            
                WafCustomRuleStrategyArgs.builder()
                    .arg("")
                    .compareFunc("ipmatch")
                    .content("2.2.2.2")
                    .field("IP")
                    .build(),
                WafCustomRuleStrategyArgs.builder()
                    .arg("")
                    .caseNotSensitive(1)
                    .compareFunc("strprefix")
                    .content("https://www.demo.com")
                    .field("Referer")
                    .build())
            .build());

    }
}
Copy
resources:
  example:
    type: tencentcloud:WafCustomRule
    properties:
      actionType: '1'
      domain: test.com
      expireTime: '0'
      jobDateTime:
        crons:
          - endTime: 03:00:00
            startTime: 01:00:00
            wDays:
              - 0
              - 1
              - 2
              - 3
              - 4
              - 5
              - 6
        timeTZone: UTC+8
      jobType: CronJob
      redirect: /
      sortId: '50'
      status: '1'
      strategies:
        - arg: ""
          compareFunc: ipmatch
          content: 2.2.2.2
          field: IP
        - arg: ""
          caseNotSensitive: 1
          compareFunc: strprefix
          content: https://www.demo.com
          field: Referer
Copy

Create WafCustomRule Resource

Resources are created with functions called constructors. To learn more about declaring and configuring resources, see Resources.

Constructor syntax

new WafCustomRule(name: string, args: WafCustomRuleArgs, opts?: CustomResourceOptions);
@overload
def WafCustomRule(resource_name: str,
                  args: WafCustomRuleArgs,
                  opts: Optional[ResourceOptions] = None)

@overload
def WafCustomRule(resource_name: str,
                  opts: Optional[ResourceOptions] = None,
                  action_type: Optional[str] = None,
                  domain: Optional[str] = None,
                  expire_time: Optional[str] = None,
                  sort_id: Optional[str] = None,
                  strategies: Optional[Sequence[WafCustomRuleStrategyArgs]] = None,
                  job_date_time: Optional[WafCustomRuleJobDateTimeArgs] = None,
                  job_type: Optional[str] = None,
                  name: Optional[str] = None,
                  redirect: Optional[str] = None,
                  status: Optional[str] = None,
                  waf_custom_rule_id: Optional[str] = None)
func NewWafCustomRule(ctx *Context, name string, args WafCustomRuleArgs, opts ...ResourceOption) (*WafCustomRule, error)
public WafCustomRule(string name, WafCustomRuleArgs args, CustomResourceOptions? opts = null)
public WafCustomRule(String name, WafCustomRuleArgs args)
public WafCustomRule(String name, WafCustomRuleArgs args, CustomResourceOptions options)
type: tencentcloud:WafCustomRule
properties: # The arguments to resource properties.
options: # Bag of options to control resource's behavior.

Parameters

name This property is required. string
The unique name of the resource.
args This property is required. WafCustomRuleArgs
The arguments to resource properties.
opts CustomResourceOptions
Bag of options to control resource's behavior.
resource_name This property is required. str
The unique name of the resource.
args This property is required. WafCustomRuleArgs
The arguments to resource properties.
opts ResourceOptions
Bag of options to control resource's behavior.
ctx Context
Context object for the current deployment.
name This property is required. string
The unique name of the resource.
args This property is required. WafCustomRuleArgs
The arguments to resource properties.
opts ResourceOption
Bag of options to control resource's behavior.
name This property is required. string
The unique name of the resource.
args This property is required. WafCustomRuleArgs
The arguments to resource properties.
opts CustomResourceOptions
Bag of options to control resource's behavior.
name This property is required. String
The unique name of the resource.
args This property is required. WafCustomRuleArgs
The arguments to resource properties.
options CustomResourceOptions
Bag of options to control resource's behavior.

WafCustomRule Resource Properties

To learn more about resource properties and how to use them, see Inputs and Outputs in the Architecture and Concepts docs.

Inputs

In Python, inputs that are objects can be passed either as argument classes or as dictionary literals.

The WafCustomRule resource accepts the following input properties:

ActionType This property is required. string
Action type, 1(Block), 2(Captcha), 3(log), 4(Redirect).
Domain This property is required. string
Domain.
ExpireTime This property is required. string
Expiration time in second-level timestamp, for example, 1677254399 indicates the expiration time is 2023-02-24 23:59:59; 0 indicates it will never expire.
SortId This property is required. string
Priority, value range 0-100.
Strategies This property is required. List<WafCustomRuleStrategy>
Strategies detail.
JobDateTime WafCustomRuleJobDateTime
Rule execution time.
JobType string
Rule execution mode: TimedJob indicates scheduled execution. CronJob indicates periodic execution.
Name string
Rule Name.
Redirect string
If the action is a Redirect, it represents the redirect address; Other situations can be left blank.
Status string
The status of the rule, 1(open), 0(close).
WafCustomRuleId string
ID of the resource.
ActionType This property is required. string
Action type, 1(Block), 2(Captcha), 3(log), 4(Redirect).
Domain This property is required. string
Domain.
ExpireTime This property is required. string
Expiration time in second-level timestamp, for example, 1677254399 indicates the expiration time is 2023-02-24 23:59:59; 0 indicates it will never expire.
SortId This property is required. string
Priority, value range 0-100.
Strategies This property is required. []WafCustomRuleStrategyArgs
Strategies detail.
JobDateTime WafCustomRuleJobDateTimeArgs
Rule execution time.
JobType string
Rule execution mode: TimedJob indicates scheduled execution. CronJob indicates periodic execution.
Name string
Rule Name.
Redirect string
If the action is a Redirect, it represents the redirect address; Other situations can be left blank.
Status string
The status of the rule, 1(open), 0(close).
WafCustomRuleId string
ID of the resource.
actionType This property is required. String
Action type, 1(Block), 2(Captcha), 3(log), 4(Redirect).
domain This property is required. String
Domain.
expireTime This property is required. String
Expiration time in second-level timestamp, for example, 1677254399 indicates the expiration time is 2023-02-24 23:59:59; 0 indicates it will never expire.
sortId This property is required. String
Priority, value range 0-100.
strategies This property is required. List<WafCustomRuleStrategy>
Strategies detail.
jobDateTime WafCustomRuleJobDateTime
Rule execution time.
jobType String
Rule execution mode: TimedJob indicates scheduled execution. CronJob indicates periodic execution.
name String
Rule Name.
redirect String
If the action is a Redirect, it represents the redirect address; Other situations can be left blank.
status String
The status of the rule, 1(open), 0(close).
wafCustomRuleId String
ID of the resource.
actionType This property is required. string
Action type, 1(Block), 2(Captcha), 3(log), 4(Redirect).
domain This property is required. string
Domain.
expireTime This property is required. string
Expiration time in second-level timestamp, for example, 1677254399 indicates the expiration time is 2023-02-24 23:59:59; 0 indicates it will never expire.
sortId This property is required. string
Priority, value range 0-100.
strategies This property is required. WafCustomRuleStrategy[]
Strategies detail.
jobDateTime WafCustomRuleJobDateTime
Rule execution time.
jobType string
Rule execution mode: TimedJob indicates scheduled execution. CronJob indicates periodic execution.
name string
Rule Name.
redirect string
If the action is a Redirect, it represents the redirect address; Other situations can be left blank.
status string
The status of the rule, 1(open), 0(close).
wafCustomRuleId string
ID of the resource.
action_type This property is required. str
Action type, 1(Block), 2(Captcha), 3(log), 4(Redirect).
domain This property is required. str
Domain.
expire_time This property is required. str
Expiration time in second-level timestamp, for example, 1677254399 indicates the expiration time is 2023-02-24 23:59:59; 0 indicates it will never expire.
sort_id This property is required. str
Priority, value range 0-100.
strategies This property is required. Sequence[WafCustomRuleStrategyArgs]
Strategies detail.
job_date_time WafCustomRuleJobDateTimeArgs
Rule execution time.
job_type str
Rule execution mode: TimedJob indicates scheduled execution. CronJob indicates periodic execution.
name str
Rule Name.
redirect str
If the action is a Redirect, it represents the redirect address; Other situations can be left blank.
status str
The status of the rule, 1(open), 0(close).
waf_custom_rule_id str
ID of the resource.
actionType This property is required. String
Action type, 1(Block), 2(Captcha), 3(log), 4(Redirect).
domain This property is required. String
Domain.
expireTime This property is required. String
Expiration time in second-level timestamp, for example, 1677254399 indicates the expiration time is 2023-02-24 23:59:59; 0 indicates it will never expire.
sortId This property is required. String
Priority, value range 0-100.
strategies This property is required. List<Property Map>
Strategies detail.
jobDateTime Property Map
Rule execution time.
jobType String
Rule execution mode: TimedJob indicates scheduled execution. CronJob indicates periodic execution.
name String
Rule Name.
redirect String
If the action is a Redirect, it represents the redirect address; Other situations can be left blank.
status String
The status of the rule, 1(open), 0(close).
wafCustomRuleId String
ID of the resource.

Outputs

All input properties are implicitly available as output properties. Additionally, the WafCustomRule resource produces the following output properties:

Id string
The provider-assigned unique ID for this managed resource.
RuleId string
rule ID.
Id string
The provider-assigned unique ID for this managed resource.
RuleId string
rule ID.
id String
The provider-assigned unique ID for this managed resource.
ruleId String
rule ID.
id string
The provider-assigned unique ID for this managed resource.
ruleId string
rule ID.
id str
The provider-assigned unique ID for this managed resource.
rule_id str
rule ID.
id String
The provider-assigned unique ID for this managed resource.
ruleId String
rule ID.

Look up Existing WafCustomRule Resource

Get an existing WafCustomRule resource’s state with the given name, ID, and optional extra properties used to qualify the lookup.

public static get(name: string, id: Input<ID>, state?: WafCustomRuleState, opts?: CustomResourceOptions): WafCustomRule
@staticmethod
def get(resource_name: str,
        id: str,
        opts: Optional[ResourceOptions] = None,
        action_type: Optional[str] = None,
        domain: Optional[str] = None,
        expire_time: Optional[str] = None,
        job_date_time: Optional[WafCustomRuleJobDateTimeArgs] = None,
        job_type: Optional[str] = None,
        name: Optional[str] = None,
        redirect: Optional[str] = None,
        rule_id: Optional[str] = None,
        sort_id: Optional[str] = None,
        status: Optional[str] = None,
        strategies: Optional[Sequence[WafCustomRuleStrategyArgs]] = None,
        waf_custom_rule_id: Optional[str] = None) -> WafCustomRule
func GetWafCustomRule(ctx *Context, name string, id IDInput, state *WafCustomRuleState, opts ...ResourceOption) (*WafCustomRule, error)
public static WafCustomRule Get(string name, Input<string> id, WafCustomRuleState? state, CustomResourceOptions? opts = null)
public static WafCustomRule get(String name, Output<String> id, WafCustomRuleState state, CustomResourceOptions options)
resources:  _:    type: tencentcloud:WafCustomRule    get:      id: ${id}
name This property is required.
The unique name of the resulting resource.
id This property is required.
The unique provider ID of the resource to lookup.
state
Any extra arguments used during the lookup.
opts
A bag of options that control this resource's behavior.
resource_name This property is required.
The unique name of the resulting resource.
id This property is required.
The unique provider ID of the resource to lookup.
name This property is required.
The unique name of the resulting resource.
id This property is required.
The unique provider ID of the resource to lookup.
state
Any extra arguments used during the lookup.
opts
A bag of options that control this resource's behavior.
name This property is required.
The unique name of the resulting resource.
id This property is required.
The unique provider ID of the resource to lookup.
state
Any extra arguments used during the lookup.
opts
A bag of options that control this resource's behavior.
name This property is required.
The unique name of the resulting resource.
id This property is required.
The unique provider ID of the resource to lookup.
state
Any extra arguments used during the lookup.
opts
A bag of options that control this resource's behavior.
The following state arguments are supported:
ActionType string
Action type, 1(Block), 2(Captcha), 3(log), 4(Redirect).
Domain string
Domain.
ExpireTime string
Expiration time in second-level timestamp, for example, 1677254399 indicates the expiration time is 2023-02-24 23:59:59; 0 indicates it will never expire.
JobDateTime WafCustomRuleJobDateTime
Rule execution time.
JobType string
Rule execution mode: TimedJob indicates scheduled execution. CronJob indicates periodic execution.
Name string
Rule Name.
Redirect string
If the action is a Redirect, it represents the redirect address; Other situations can be left blank.
RuleId string
rule ID.
SortId string
Priority, value range 0-100.
Status string
The status of the rule, 1(open), 0(close).
Strategies List<WafCustomRuleStrategy>
Strategies detail.
WafCustomRuleId string
ID of the resource.
ActionType string
Action type, 1(Block), 2(Captcha), 3(log), 4(Redirect).
Domain string
Domain.
ExpireTime string
Expiration time in second-level timestamp, for example, 1677254399 indicates the expiration time is 2023-02-24 23:59:59; 0 indicates it will never expire.
JobDateTime WafCustomRuleJobDateTimeArgs
Rule execution time.
JobType string
Rule execution mode: TimedJob indicates scheduled execution. CronJob indicates periodic execution.
Name string
Rule Name.
Redirect string
If the action is a Redirect, it represents the redirect address; Other situations can be left blank.
RuleId string
rule ID.
SortId string
Priority, value range 0-100.
Status string
The status of the rule, 1(open), 0(close).
Strategies []WafCustomRuleStrategyArgs
Strategies detail.
WafCustomRuleId string
ID of the resource.
actionType String
Action type, 1(Block), 2(Captcha), 3(log), 4(Redirect).
domain String
Domain.
expireTime String
Expiration time in second-level timestamp, for example, 1677254399 indicates the expiration time is 2023-02-24 23:59:59; 0 indicates it will never expire.
jobDateTime WafCustomRuleJobDateTime
Rule execution time.
jobType String
Rule execution mode: TimedJob indicates scheduled execution. CronJob indicates periodic execution.
name String
Rule Name.
redirect String
If the action is a Redirect, it represents the redirect address; Other situations can be left blank.
ruleId String
rule ID.
sortId String
Priority, value range 0-100.
status String
The status of the rule, 1(open), 0(close).
strategies List<WafCustomRuleStrategy>
Strategies detail.
wafCustomRuleId String
ID of the resource.
actionType string
Action type, 1(Block), 2(Captcha), 3(log), 4(Redirect).
domain string
Domain.
expireTime string
Expiration time in second-level timestamp, for example, 1677254399 indicates the expiration time is 2023-02-24 23:59:59; 0 indicates it will never expire.
jobDateTime WafCustomRuleJobDateTime
Rule execution time.
jobType string
Rule execution mode: TimedJob indicates scheduled execution. CronJob indicates periodic execution.
name string
Rule Name.
redirect string
If the action is a Redirect, it represents the redirect address; Other situations can be left blank.
ruleId string
rule ID.
sortId string
Priority, value range 0-100.
status string
The status of the rule, 1(open), 0(close).
strategies WafCustomRuleStrategy[]
Strategies detail.
wafCustomRuleId string
ID of the resource.
action_type str
Action type, 1(Block), 2(Captcha), 3(log), 4(Redirect).
domain str
Domain.
expire_time str
Expiration time in second-level timestamp, for example, 1677254399 indicates the expiration time is 2023-02-24 23:59:59; 0 indicates it will never expire.
job_date_time WafCustomRuleJobDateTimeArgs
Rule execution time.
job_type str
Rule execution mode: TimedJob indicates scheduled execution. CronJob indicates periodic execution.
name str
Rule Name.
redirect str
If the action is a Redirect, it represents the redirect address; Other situations can be left blank.
rule_id str
rule ID.
sort_id str
Priority, value range 0-100.
status str
The status of the rule, 1(open), 0(close).
strategies Sequence[WafCustomRuleStrategyArgs]
Strategies detail.
waf_custom_rule_id str
ID of the resource.
actionType String
Action type, 1(Block), 2(Captcha), 3(log), 4(Redirect).
domain String
Domain.
expireTime String
Expiration time in second-level timestamp, for example, 1677254399 indicates the expiration time is 2023-02-24 23:59:59; 0 indicates it will never expire.
jobDateTime Property Map
Rule execution time.
jobType String
Rule execution mode: TimedJob indicates scheduled execution. CronJob indicates periodic execution.
name String
Rule Name.
redirect String
If the action is a Redirect, it represents the redirect address; Other situations can be left blank.
ruleId String
rule ID.
sortId String
Priority, value range 0-100.
status String
The status of the rule, 1(open), 0(close).
strategies List<Property Map>
Strategies detail.
wafCustomRuleId String
ID of the resource.

Supporting Types

WafCustomRuleJobDateTime
, WafCustomRuleJobDateTimeArgs

Crons List<WafCustomRuleJobDateTimeCron>
Time parameters for periodic execution. Note: This field may return null, indicating that no valid values can be obtained.
TimeTZone string
Time zone. Note: This field may return null, indicating that no valid values can be obtained.
Timeds List<WafCustomRuleJobDateTimeTimed>
Time parameters for scheduled execution. Note: This field may return null, indicating that no valid values can be obtained.
Crons []WafCustomRuleJobDateTimeCron
Time parameters for periodic execution. Note: This field may return null, indicating that no valid values can be obtained.
TimeTZone string
Time zone. Note: This field may return null, indicating that no valid values can be obtained.
Timeds []WafCustomRuleJobDateTimeTimed
Time parameters for scheduled execution. Note: This field may return null, indicating that no valid values can be obtained.
crons List<WafCustomRuleJobDateTimeCron>
Time parameters for periodic execution. Note: This field may return null, indicating that no valid values can be obtained.
timeTZone String
Time zone. Note: This field may return null, indicating that no valid values can be obtained.
timeds List<WafCustomRuleJobDateTimeTimed>
Time parameters for scheduled execution. Note: This field may return null, indicating that no valid values can be obtained.
crons WafCustomRuleJobDateTimeCron[]
Time parameters for periodic execution. Note: This field may return null, indicating that no valid values can be obtained.
timeTZone string
Time zone. Note: This field may return null, indicating that no valid values can be obtained.
timeds WafCustomRuleJobDateTimeTimed[]
Time parameters for scheduled execution. Note: This field may return null, indicating that no valid values can be obtained.
crons Sequence[WafCustomRuleJobDateTimeCron]
Time parameters for periodic execution. Note: This field may return null, indicating that no valid values can be obtained.
time_t_zone str
Time zone. Note: This field may return null, indicating that no valid values can be obtained.
timeds Sequence[WafCustomRuleJobDateTimeTimed]
Time parameters for scheduled execution. Note: This field may return null, indicating that no valid values can be obtained.
crons List<Property Map>
Time parameters for periodic execution. Note: This field may return null, indicating that no valid values can be obtained.
timeTZone String
Time zone. Note: This field may return null, indicating that no valid values can be obtained.
timeds List<Property Map>
Time parameters for scheduled execution. Note: This field may return null, indicating that no valid values can be obtained.

WafCustomRuleJobDateTimeCron
, WafCustomRuleJobDateTimeCronArgs

Days List<double>
Days in each month for execution. Note: This field may return null, indicating that no valid values can be obtained.
EndTime string
End time. Note: This field may return null, indicating that no valid values can be obtained.
StartTime string
Start time. Note: This field may return null, indicating that no valid values can be obtained.
WDays List<double>
Days of each week for execution. Note: This field may return null, indicating that no valid values can be obtained.
Days []float64
Days in each month for execution. Note: This field may return null, indicating that no valid values can be obtained.
EndTime string
End time. Note: This field may return null, indicating that no valid values can be obtained.
StartTime string
Start time. Note: This field may return null, indicating that no valid values can be obtained.
WDays []float64
Days of each week for execution. Note: This field may return null, indicating that no valid values can be obtained.
days List<Double>
Days in each month for execution. Note: This field may return null, indicating that no valid values can be obtained.
endTime String
End time. Note: This field may return null, indicating that no valid values can be obtained.
startTime String
Start time. Note: This field may return null, indicating that no valid values can be obtained.
wDays List<Double>
Days of each week for execution. Note: This field may return null, indicating that no valid values can be obtained.
days number[]
Days in each month for execution. Note: This field may return null, indicating that no valid values can be obtained.
endTime string
End time. Note: This field may return null, indicating that no valid values can be obtained.
startTime string
Start time. Note: This field may return null, indicating that no valid values can be obtained.
wDays number[]
Days of each week for execution. Note: This field may return null, indicating that no valid values can be obtained.
days Sequence[float]
Days in each month for execution. Note: This field may return null, indicating that no valid values can be obtained.
end_time str
End time. Note: This field may return null, indicating that no valid values can be obtained.
start_time str
Start time. Note: This field may return null, indicating that no valid values can be obtained.
w_days Sequence[float]
Days of each week for execution. Note: This field may return null, indicating that no valid values can be obtained.
days List<Number>
Days in each month for execution. Note: This field may return null, indicating that no valid values can be obtained.
endTime String
End time. Note: This field may return null, indicating that no valid values can be obtained.
startTime String
Start time. Note: This field may return null, indicating that no valid values can be obtained.
wDays List<Number>
Days of each week for execution. Note: This field may return null, indicating that no valid values can be obtained.

WafCustomRuleJobDateTimeTimed
, WafCustomRuleJobDateTimeTimedArgs

EndDateTime double
End timestamp, in seconds. Note: This field may return null, indicating that no valid values can be obtained.
StartDateTime double
Start timestamp, in seconds. Note: This field may return null, indicating that no valid values can be obtained.
EndDateTime float64
End timestamp, in seconds. Note: This field may return null, indicating that no valid values can be obtained.
StartDateTime float64
Start timestamp, in seconds. Note: This field may return null, indicating that no valid values can be obtained.
endDateTime Double
End timestamp, in seconds. Note: This field may return null, indicating that no valid values can be obtained.
startDateTime Double
Start timestamp, in seconds. Note: This field may return null, indicating that no valid values can be obtained.
endDateTime number
End timestamp, in seconds. Note: This field may return null, indicating that no valid values can be obtained.
startDateTime number
Start timestamp, in seconds. Note: This field may return null, indicating that no valid values can be obtained.
end_date_time float
End timestamp, in seconds. Note: This field may return null, indicating that no valid values can be obtained.
start_date_time float
Start timestamp, in seconds. Note: This field may return null, indicating that no valid values can be obtained.
endDateTime Number
End timestamp, in seconds. Note: This field may return null, indicating that no valid values can be obtained.
startDateTime Number
Start timestamp, in seconds. Note: This field may return null, indicating that no valid values can be obtained.

WafCustomRuleStrategy
, WafCustomRuleStrategyArgs

Arg This property is required. string
Matching parameter There are two types of configuration parameters: unsupported parameters and supported parameters. The matching parameter can be entered only when the matching field is one of the following four. Otherwise, the parameter is not supported. GET (GET parameter value) POST (POST parameter value) ARGS_COOKIE (Cookie parameter value) ARGS_HEADER (Header parameter value) Note: This field may return null, indicating that no valid values can be obtained.
CompareFunc This property is required. string
Logic symbol Logical symbols are divided into the following types: empty (content is empty) null (do not exist) eq (equal to) neq (not equal to) contains (contain) ncontains (do not contain) strprefix (prefix matching) strsuffix (suffix matching) len_eq (length equals to) len_gt (length is greater than) len_lt (length is less than) ipmatch (belong to) ipnmatch (do not belong to) numgt (number greater than) numlt (number less than) geo_in (IP geo belongs to) geo_not_in (IP geo not belongs to) rematch (regex match) Different matching fields correspond to different logical operators. For details, see the matching field table above. Note: This field may return null, indicating that no valid values can be obtained.
Content This property is required. string
Matching content Currently, when the matching field is COOKIE (cookie), the matching content is not required. In other scenes, the matching content is required. Note: This field may return null, indicating that no valid values can be obtained.
Field This property is required. string
Matching field Different matching fields result in different matching parameters, logical operators, and matching contents. The details are as follows:

CaseNotSensitive double
0: case-sensitive, 1: case-insensitive. Note: This field may return null, indicating that no valid values can be obtained.
Arg This property is required. string
Matching parameter There are two types of configuration parameters: unsupported parameters and supported parameters. The matching parameter can be entered only when the matching field is one of the following four. Otherwise, the parameter is not supported. GET (GET parameter value) POST (POST parameter value) ARGS_COOKIE (Cookie parameter value) ARGS_HEADER (Header parameter value) Note: This field may return null, indicating that no valid values can be obtained.
CompareFunc This property is required. string
Logic symbol Logical symbols are divided into the following types: empty (content is empty) null (do not exist) eq (equal to) neq (not equal to) contains (contain) ncontains (do not contain) strprefix (prefix matching) strsuffix (suffix matching) len_eq (length equals to) len_gt (length is greater than) len_lt (length is less than) ipmatch (belong to) ipnmatch (do not belong to) numgt (number greater than) numlt (number less than) geo_in (IP geo belongs to) geo_not_in (IP geo not belongs to) rematch (regex match) Different matching fields correspond to different logical operators. For details, see the matching field table above. Note: This field may return null, indicating that no valid values can be obtained.
Content This property is required. string
Matching content Currently, when the matching field is COOKIE (cookie), the matching content is not required. In other scenes, the matching content is required. Note: This field may return null, indicating that no valid values can be obtained.
Field This property is required. string
Matching field Different matching fields result in different matching parameters, logical operators, and matching contents. The details are as follows:

CaseNotSensitive float64
0: case-sensitive, 1: case-insensitive. Note: This field may return null, indicating that no valid values can be obtained.
arg This property is required. String
Matching parameter There are two types of configuration parameters: unsupported parameters and supported parameters. The matching parameter can be entered only when the matching field is one of the following four. Otherwise, the parameter is not supported. GET (GET parameter value) POST (POST parameter value) ARGS_COOKIE (Cookie parameter value) ARGS_HEADER (Header parameter value) Note: This field may return null, indicating that no valid values can be obtained.
compareFunc This property is required. String
Logic symbol Logical symbols are divided into the following types: empty (content is empty) null (do not exist) eq (equal to) neq (not equal to) contains (contain) ncontains (do not contain) strprefix (prefix matching) strsuffix (suffix matching) len_eq (length equals to) len_gt (length is greater than) len_lt (length is less than) ipmatch (belong to) ipnmatch (do not belong to) numgt (number greater than) numlt (number less than) geo_in (IP geo belongs to) geo_not_in (IP geo not belongs to) rematch (regex match) Different matching fields correspond to different logical operators. For details, see the matching field table above. Note: This field may return null, indicating that no valid values can be obtained.
content This property is required. String
Matching content Currently, when the matching field is COOKIE (cookie), the matching content is not required. In other scenes, the matching content is required. Note: This field may return null, indicating that no valid values can be obtained.
field This property is required. String
Matching field Different matching fields result in different matching parameters, logical operators, and matching contents. The details are as follows:

caseNotSensitive Double
0: case-sensitive, 1: case-insensitive. Note: This field may return null, indicating that no valid values can be obtained.
arg This property is required. string
Matching parameter There are two types of configuration parameters: unsupported parameters and supported parameters. The matching parameter can be entered only when the matching field is one of the following four. Otherwise, the parameter is not supported. GET (GET parameter value) POST (POST parameter value) ARGS_COOKIE (Cookie parameter value) ARGS_HEADER (Header parameter value) Note: This field may return null, indicating that no valid values can be obtained.
compareFunc This property is required. string
Logic symbol Logical symbols are divided into the following types: empty (content is empty) null (do not exist) eq (equal to) neq (not equal to) contains (contain) ncontains (do not contain) strprefix (prefix matching) strsuffix (suffix matching) len_eq (length equals to) len_gt (length is greater than) len_lt (length is less than) ipmatch (belong to) ipnmatch (do not belong to) numgt (number greater than) numlt (number less than) geo_in (IP geo belongs to) geo_not_in (IP geo not belongs to) rematch (regex match) Different matching fields correspond to different logical operators. For details, see the matching field table above. Note: This field may return null, indicating that no valid values can be obtained.
content This property is required. string
Matching content Currently, when the matching field is COOKIE (cookie), the matching content is not required. In other scenes, the matching content is required. Note: This field may return null, indicating that no valid values can be obtained.
field This property is required. string
Matching field Different matching fields result in different matching parameters, logical operators, and matching contents. The details are as follows:

caseNotSensitive number
0: case-sensitive, 1: case-insensitive. Note: This field may return null, indicating that no valid values can be obtained.
arg This property is required. str
Matching parameter There are two types of configuration parameters: unsupported parameters and supported parameters. The matching parameter can be entered only when the matching field is one of the following four. Otherwise, the parameter is not supported. GET (GET parameter value) POST (POST parameter value) ARGS_COOKIE (Cookie parameter value) ARGS_HEADER (Header parameter value) Note: This field may return null, indicating that no valid values can be obtained.
compare_func This property is required. str
Logic symbol Logical symbols are divided into the following types: empty (content is empty) null (do not exist) eq (equal to) neq (not equal to) contains (contain) ncontains (do not contain) strprefix (prefix matching) strsuffix (suffix matching) len_eq (length equals to) len_gt (length is greater than) len_lt (length is less than) ipmatch (belong to) ipnmatch (do not belong to) numgt (number greater than) numlt (number less than) geo_in (IP geo belongs to) geo_not_in (IP geo not belongs to) rematch (regex match) Different matching fields correspond to different logical operators. For details, see the matching field table above. Note: This field may return null, indicating that no valid values can be obtained.
content This property is required. str
Matching content Currently, when the matching field is COOKIE (cookie), the matching content is not required. In other scenes, the matching content is required. Note: This field may return null, indicating that no valid values can be obtained.
field This property is required. str
Matching field Different matching fields result in different matching parameters, logical operators, and matching contents. The details are as follows:

case_not_sensitive float
0: case-sensitive, 1: case-insensitive. Note: This field may return null, indicating that no valid values can be obtained.
arg This property is required. String
Matching parameter There are two types of configuration parameters: unsupported parameters and supported parameters. The matching parameter can be entered only when the matching field is one of the following four. Otherwise, the parameter is not supported. GET (GET parameter value) POST (POST parameter value) ARGS_COOKIE (Cookie parameter value) ARGS_HEADER (Header parameter value) Note: This field may return null, indicating that no valid values can be obtained.
compareFunc This property is required. String
Logic symbol Logical symbols are divided into the following types: empty (content is empty) null (do not exist) eq (equal to) neq (not equal to) contains (contain) ncontains (do not contain) strprefix (prefix matching) strsuffix (suffix matching) len_eq (length equals to) len_gt (length is greater than) len_lt (length is less than) ipmatch (belong to) ipnmatch (do not belong to) numgt (number greater than) numlt (number less than) geo_in (IP geo belongs to) geo_not_in (IP geo not belongs to) rematch (regex match) Different matching fields correspond to different logical operators. For details, see the matching field table above. Note: This field may return null, indicating that no valid values can be obtained.
content This property is required. String
Matching content Currently, when the matching field is COOKIE (cookie), the matching content is not required. In other scenes, the matching content is required. Note: This field may return null, indicating that no valid values can be obtained.
field This property is required. String
Matching field Different matching fields result in different matching parameters, logical operators, and matching contents. The details are as follows:

caseNotSensitive Number
0: case-sensitive, 1: case-insensitive. Note: This field may return null, indicating that no valid values can be obtained.

Import

waf custom rule can be imported using the id, e.g.

$ pulumi import tencentcloud:index/wafCustomRule:WafCustomRule example test.com#1100310609
Copy

To learn more about importing existing cloud resources, see Importing resources.

Package Details

Repository
tencentcloud tencentcloudstack/terraform-provider-tencentcloud
License
Notes
This Pulumi package is based on the tencentcloud Terraform Provider.