Ready to level-up your engineering skills? Join a Pulumi Workshop. Register Now

ProjectAlertRule

Provides a Rancher v2 Project Alert Rule resource. This can be used to create Project Alert Rule for Rancher v2 environments and retrieve their information.

Example Usage

using Pulumi;
using Rancher2 = Pulumi.Rancher2;

class MyStack : Stack
{
    public MyStack()
    {
        // Create a new Rancher2 Project
        var fooProject = new Rancher2.Project("fooProject", new Rancher2.ProjectArgs
        {
            ClusterId = "<cluster_id>",
            Description = "Terraform project ",
            ResourceQuota = new Rancher2.Inputs.ProjectResourceQuotaArgs
            {
                ProjectLimit = new Rancher2.Inputs.ProjectResourceQuotaProjectLimitArgs
                {
                    LimitsCpu = "2000m",
                    LimitsMemory = "2000Mi",
                    RequestsStorage = "2Gi",
                },
                NamespaceDefaultLimit = new Rancher2.Inputs.ProjectResourceQuotaNamespaceDefaultLimitArgs
                {
                    LimitsCpu = "500m",
                    LimitsMemory = "500Mi",
                    RequestsStorage = "1Gi",
                },
            },
            ContainerResourceLimit = new Rancher2.Inputs.ProjectContainerResourceLimitArgs
            {
                LimitsCpu = "20m",
                LimitsMemory = "20Mi",
                RequestsCpu = "1m",
                RequestsMemory = "1Mi",
            },
        });
        // Create a new Rancher2 Project Alert Group
        var fooProjectAlertGroup = new Rancher2.ProjectAlertGroup("fooProjectAlertGroup", new Rancher2.ProjectAlertGroupArgs
        {
            Description = "Terraform project alert group",
            ProjectId = fooProject.Id,
            GroupIntervalSeconds = 300,
            RepeatIntervalSeconds = 3600,
        });
        // Create a new Rancher2 Project Alert Rule
        var fooProjectAlertRule = new Rancher2.ProjectAlertRule("fooProjectAlertRule", new Rancher2.ProjectAlertRuleArgs
        {
            ProjectId = fooProjectAlertGroup.ProjectId,
            GroupId = fooProjectAlertGroup.Id,
            GroupIntervalSeconds = 600,
            RepeatIntervalSeconds = 6000,
        });
    }

}
package main

import (
    "github.com/pulumi/pulumi-rancher2/sdk/v2/go/rancher2"
    "github.com/pulumi/pulumi/sdk/v2/go/pulumi"
)

func main() {
    pulumi.Run(func(ctx *pulumi.Context) error {
        fooProject, err := rancher2.NewProject(ctx, "fooProject", &rancher2.ProjectArgs{
            ClusterId:   pulumi.String("<cluster_id>"),
            Description: pulumi.String("Terraform project "),
            ResourceQuota: &rancher2.ProjectResourceQuotaArgs{
                ProjectLimit: &rancher2.ProjectResourceQuotaProjectLimitArgs{
                    LimitsCpu:       pulumi.String("2000m"),
                    LimitsMemory:    pulumi.String("2000Mi"),
                    RequestsStorage: pulumi.String("2Gi"),
                },
                NamespaceDefaultLimit: &rancher2.ProjectResourceQuotaNamespaceDefaultLimitArgs{
                    LimitsCpu:       pulumi.String("500m"),
                    LimitsMemory:    pulumi.String("500Mi"),
                    RequestsStorage: pulumi.String("1Gi"),
                },
            },
            ContainerResourceLimit: &rancher2.ProjectContainerResourceLimitArgs{
                LimitsCpu:      pulumi.String("20m"),
                LimitsMemory:   pulumi.String("20Mi"),
                RequestsCpu:    pulumi.String("1m"),
                RequestsMemory: pulumi.String("1Mi"),
            },
        })
        if err != nil {
            return err
        }
        fooProjectAlertGroup, err := rancher2.NewProjectAlertGroup(ctx, "fooProjectAlertGroup", &rancher2.ProjectAlertGroupArgs{
            Description:           pulumi.String("Terraform project alert group"),
            ProjectId:             fooProject.ID(),
            GroupIntervalSeconds:  pulumi.Int(300),
            RepeatIntervalSeconds: pulumi.Int(3600),
        })
        if err != nil {
            return err
        }
        _, err = rancher2.NewProjectAlertRule(ctx, "fooProjectAlertRule", &rancher2.ProjectAlertRuleArgs{
            ProjectId:             fooProjectAlertGroup.ProjectId,
            GroupId:               fooProjectAlertGroup.ID(),
            GroupIntervalSeconds:  pulumi.Int(600),
            RepeatIntervalSeconds: pulumi.Int(6000),
        })
        if err != nil {
            return err
        }
        return nil
    })
}
import pulumi
import pulumi_rancher2 as rancher2

# Create a new Rancher2 Project
foo_project = rancher2.Project("fooProject",
    cluster_id="<cluster_id>",
    description="Terraform project ",
    resource_quota=rancher2.ProjectResourceQuotaArgs(
        project_limit=rancher2.ProjectResourceQuotaProjectLimitArgs(
            limits_cpu="2000m",
            limits_memory="2000Mi",
            requests_storage="2Gi",
        ),
        namespace_default_limit=rancher2.ProjectResourceQuotaNamespaceDefaultLimitArgs(
            limits_cpu="500m",
            limits_memory="500Mi",
            requests_storage="1Gi",
        ),
    ),
    container_resource_limit=rancher2.ProjectContainerResourceLimitArgs(
        limits_cpu="20m",
        limits_memory="20Mi",
        requests_cpu="1m",
        requests_memory="1Mi",
    ))
# Create a new Rancher2 Project Alert Group
foo_project_alert_group = rancher2.ProjectAlertGroup("fooProjectAlertGroup",
    description="Terraform project alert group",
    project_id=foo_project.id,
    group_interval_seconds=300,
    repeat_interval_seconds=3600)
# Create a new Rancher2 Project Alert Rule
foo_project_alert_rule = rancher2.ProjectAlertRule("fooProjectAlertRule",
    project_id=foo_project_alert_group.project_id,
    group_id=foo_project_alert_group.id,
    group_interval_seconds=600,
    repeat_interval_seconds=6000)
import * as pulumi from "@pulumi/pulumi";
import * as rancher2 from "@pulumi/rancher2";

// Create a new Rancher2 Project
const fooProject = new rancher2.Project("fooProject", {
    clusterId: "<cluster_id>",
    description: "Terraform project ",
    resourceQuota: {
        projectLimit: {
            limitsCpu: "2000m",
            limitsMemory: "2000Mi",
            requestsStorage: "2Gi",
        },
        namespaceDefaultLimit: {
            limitsCpu: "500m",
            limitsMemory: "500Mi",
            requestsStorage: "1Gi",
        },
    },
    containerResourceLimit: {
        limitsCpu: "20m",
        limitsMemory: "20Mi",
        requestsCpu: "1m",
        requestsMemory: "1Mi",
    },
});
// Create a new Rancher2 Project Alert Group
const fooProjectAlertGroup = new rancher2.ProjectAlertGroup("fooProjectAlertGroup", {
    description: "Terraform project alert group",
    projectId: fooProject.id,
    groupIntervalSeconds: 300,
    repeatIntervalSeconds: 3600,
});
// Create a new Rancher2 Project Alert Rule
const fooProjectAlertRule = new rancher2.ProjectAlertRule("fooProjectAlertRule", {
    projectId: fooProjectAlertGroup.projectId,
    groupId: fooProjectAlertGroup.id,
    groupIntervalSeconds: 600,
    repeatIntervalSeconds: 6000,
});

Create a ProjectAlertRule Resource

new ProjectAlertRule(name: string, args: ProjectAlertRuleArgs, opts?: CustomResourceOptions);
def ProjectAlertRule(resource_name: str, opts: Optional[ResourceOptions] = None, annotations: Optional[Mapping[str, Any]] = None, group_id: Optional[str] = None, group_interval_seconds: Optional[int] = None, group_wait_seconds: Optional[int] = None, inherited: Optional[bool] = None, labels: Optional[Mapping[str, Any]] = None, metric_rule: Optional[ProjectAlertRuleMetricRuleArgs] = None, name: Optional[str] = None, pod_rule: Optional[ProjectAlertRulePodRuleArgs] = None, project_id: Optional[str] = None, repeat_interval_seconds: Optional[int] = None, severity: Optional[str] = None, workload_rule: Optional[ProjectAlertRuleWorkloadRuleArgs] = None)
func NewProjectAlertRule(ctx *Context, name string, args ProjectAlertRuleArgs, opts ...ResourceOption) (*ProjectAlertRule, error)
public ProjectAlertRule(string name, ProjectAlertRuleArgs args, CustomResourceOptions? opts = null)
name string
The unique name of the resource.
args ProjectAlertRuleArgs
The arguments to resource properties.
opts CustomResourceOptions
Bag of options to control resource's behavior.
resource_name str
The unique name of the resource.
opts ResourceOptions
A bag of options that control this resource's behavior.
ctx Context
Context object for the current deployment.
name string
The unique name of the resource.
args ProjectAlertRuleArgs
The arguments to resource properties.
opts ResourceOption
Bag of options to control resource's behavior.
name string
The unique name of the resource.
args ProjectAlertRuleArgs
The arguments to resource properties.
opts CustomResourceOptions
Bag of options to control resource's behavior.

ProjectAlertRule Resource Properties

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

Inputs

The ProjectAlertRule resource accepts the following input properties:

GroupId string

The project alert rule alert group ID (string)

ProjectId string

The project id where create project alert rule (string)

Annotations Dictionary<string, object>

The project alert rule annotations (map)

GroupIntervalSeconds int

The project alert rule group interval seconds. Default: 180 (int)

GroupWaitSeconds int

The project alert rule group wait seconds. Default: 180 (int)

Inherited bool

The project alert rule inherited. Default: true (bool)

Labels Dictionary<string, object>

The project alert rule labels (map)

MetricRule ProjectAlertRuleMetricRuleArgs

The project alert rule metric rule. ConflictsWith: "pod_rule", "workload_rule"` (list Maxitems:1)

Name string

The project alert rule name (string)

PodRule ProjectAlertRulePodRuleArgs

The project alert rule pod rule. ConflictsWith: "metric_rule", "workload_rule"` (list Maxitems:1)

RepeatIntervalSeconds int

The project alert rule wait seconds. Default: 3600 (int)

Severity string

The project alert rule severity. Supported values : "critical" | "info" | "warning". Default: critical (string)

WorkloadRule ProjectAlertRuleWorkloadRuleArgs

The project alert rule workload rule. ConflictsWith: "metric_rule", "pod_rule"` (list Maxitems:1)

GroupId string

The project alert rule alert group ID (string)

ProjectId string

The project id where create project alert rule (string)

Annotations map[string]interface{}

The project alert rule annotations (map)

GroupIntervalSeconds int

The project alert rule group interval seconds. Default: 180 (int)

GroupWaitSeconds int

The project alert rule group wait seconds. Default: 180 (int)

Inherited bool

The project alert rule inherited. Default: true (bool)

Labels map[string]interface{}

The project alert rule labels (map)

MetricRule ProjectAlertRuleMetricRule

The project alert rule metric rule. ConflictsWith: "pod_rule", "workload_rule"` (list Maxitems:1)

Name string

The project alert rule name (string)

PodRule ProjectAlertRulePodRule

The project alert rule pod rule. ConflictsWith: "metric_rule", "workload_rule"` (list Maxitems:1)

RepeatIntervalSeconds int

The project alert rule wait seconds. Default: 3600 (int)

Severity string

The project alert rule severity. Supported values : "critical" | "info" | "warning". Default: critical (string)

WorkloadRule ProjectAlertRuleWorkloadRule

The project alert rule workload rule. ConflictsWith: "metric_rule", "pod_rule"` (list Maxitems:1)

groupId string

The project alert rule alert group ID (string)

projectId string

The project id where create project alert rule (string)

annotations {[key: string]: any}

The project alert rule annotations (map)

groupIntervalSeconds number

The project alert rule group interval seconds. Default: 180 (int)

groupWaitSeconds number

The project alert rule group wait seconds. Default: 180 (int)

inherited boolean

The project alert rule inherited. Default: true (bool)

labels {[key: string]: any}

The project alert rule labels (map)

metricRule ProjectAlertRuleMetricRule

The project alert rule metric rule. ConflictsWith: "pod_rule", "workload_rule"` (list Maxitems:1)

name string

The project alert rule name (string)

podRule ProjectAlertRulePodRule

The project alert rule pod rule. ConflictsWith: "metric_rule", "workload_rule"` (list Maxitems:1)

repeatIntervalSeconds number

The project alert rule wait seconds. Default: 3600 (int)

severity string

The project alert rule severity. Supported values : "critical" | "info" | "warning". Default: critical (string)

workloadRule ProjectAlertRuleWorkloadRule

The project alert rule workload rule. ConflictsWith: "metric_rule", "pod_rule"` (list Maxitems:1)

group_id str

The project alert rule alert group ID (string)

project_id str

The project id where create project alert rule (string)

annotations Mapping[str, Any]

The project alert rule annotations (map)

group_interval_seconds int

The project alert rule group interval seconds. Default: 180 (int)

group_wait_seconds int

The project alert rule group wait seconds. Default: 180 (int)

inherited bool

The project alert rule inherited. Default: true (bool)

labels Mapping[str, Any]

The project alert rule labels (map)

metric_rule ProjectAlertRuleMetricRuleArgs

The project alert rule metric rule. ConflictsWith: "pod_rule", "workload_rule"` (list Maxitems:1)

name str

The project alert rule name (string)

pod_rule ProjectAlertRulePodRuleArgs

The project alert rule pod rule. ConflictsWith: "metric_rule", "workload_rule"` (list Maxitems:1)

repeat_interval_seconds int

The project alert rule wait seconds. Default: 3600 (int)

severity str

The project alert rule severity. Supported values : "critical" | "info" | "warning". Default: critical (string)

workload_rule ProjectAlertRuleWorkloadRuleArgs

The project alert rule workload rule. ConflictsWith: "metric_rule", "pod_rule"` (list Maxitems:1)

Outputs

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

Id string
The provider-assigned unique ID for this managed resource.
Id string
The provider-assigned unique ID for this managed resource.
id string
The provider-assigned unique ID for this managed resource.
id str
The provider-assigned unique ID for this managed resource.

Look up an Existing ProjectAlertRule Resource

Get an existing ProjectAlertRule 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?: ProjectAlertRuleState, opts?: CustomResourceOptions): ProjectAlertRule
@staticmethod
def get(resource_name: str, id: str, opts: Optional[ResourceOptions] = None, annotations: Optional[Mapping[str, Any]] = None, group_id: Optional[str] = None, group_interval_seconds: Optional[int] = None, group_wait_seconds: Optional[int] = None, inherited: Optional[bool] = None, labels: Optional[Mapping[str, Any]] = None, metric_rule: Optional[ProjectAlertRuleMetricRuleArgs] = None, name: Optional[str] = None, pod_rule: Optional[ProjectAlertRulePodRuleArgs] = None, project_id: Optional[str] = None, repeat_interval_seconds: Optional[int] = None, severity: Optional[str] = None, workload_rule: Optional[ProjectAlertRuleWorkloadRuleArgs] = None) -> ProjectAlertRule
func GetProjectAlertRule(ctx *Context, name string, id IDInput, state *ProjectAlertRuleState, opts ...ResourceOption) (*ProjectAlertRule, error)
public static ProjectAlertRule Get(string name, Input<string> id, ProjectAlertRuleState? state, CustomResourceOptions? opts = null)
name
The unique name of the resulting resource.
id
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
The unique name of the resulting resource.
id
The unique provider ID of the resource to lookup.
name
The unique name of the resulting resource.
id
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
The unique name of the resulting resource.
id
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:

Annotations Dictionary<string, object>

The project alert rule annotations (map)

GroupId string

The project alert rule alert group ID (string)

GroupIntervalSeconds int

The project alert rule group interval seconds. Default: 180 (int)

GroupWaitSeconds int

The project alert rule group wait seconds. Default: 180 (int)

Inherited bool

The project alert rule inherited. Default: true (bool)

Labels Dictionary<string, object>

The project alert rule labels (map)

MetricRule ProjectAlertRuleMetricRuleArgs

The project alert rule metric rule. ConflictsWith: "pod_rule", "workload_rule"` (list Maxitems:1)

Name string

The project alert rule name (string)

PodRule ProjectAlertRulePodRuleArgs

The project alert rule pod rule. ConflictsWith: "metric_rule", "workload_rule"` (list Maxitems:1)

ProjectId string

The project id where create project alert rule (string)

RepeatIntervalSeconds int

The project alert rule wait seconds. Default: 3600 (int)

Severity string

The project alert rule severity. Supported values : "critical" | "info" | "warning". Default: critical (string)

WorkloadRule ProjectAlertRuleWorkloadRuleArgs

The project alert rule workload rule. ConflictsWith: "metric_rule", "pod_rule"` (list Maxitems:1)

Annotations map[string]interface{}

The project alert rule annotations (map)

GroupId string

The project alert rule alert group ID (string)

GroupIntervalSeconds int

The project alert rule group interval seconds. Default: 180 (int)

GroupWaitSeconds int

The project alert rule group wait seconds. Default: 180 (int)

Inherited bool

The project alert rule inherited. Default: true (bool)

Labels map[string]interface{}

The project alert rule labels (map)

MetricRule ProjectAlertRuleMetricRule

The project alert rule metric rule. ConflictsWith: "pod_rule", "workload_rule"` (list Maxitems:1)

Name string

The project alert rule name (string)

PodRule ProjectAlertRulePodRule

The project alert rule pod rule. ConflictsWith: "metric_rule", "workload_rule"` (list Maxitems:1)

ProjectId string

The project id where create project alert rule (string)

RepeatIntervalSeconds int

The project alert rule wait seconds. Default: 3600 (int)

Severity string

The project alert rule severity. Supported values : "critical" | "info" | "warning". Default: critical (string)

WorkloadRule ProjectAlertRuleWorkloadRule

The project alert rule workload rule. ConflictsWith: "metric_rule", "pod_rule"` (list Maxitems:1)

annotations {[key: string]: any}

The project alert rule annotations (map)

groupId string

The project alert rule alert group ID (string)

groupIntervalSeconds number

The project alert rule group interval seconds. Default: 180 (int)

groupWaitSeconds number

The project alert rule group wait seconds. Default: 180 (int)

inherited boolean

The project alert rule inherited. Default: true (bool)

labels {[key: string]: any}

The project alert rule labels (map)

metricRule ProjectAlertRuleMetricRule

The project alert rule metric rule. ConflictsWith: "pod_rule", "workload_rule"` (list Maxitems:1)

name string

The project alert rule name (string)

podRule ProjectAlertRulePodRule

The project alert rule pod rule. ConflictsWith: "metric_rule", "workload_rule"` (list Maxitems:1)

projectId string

The project id where create project alert rule (string)

repeatIntervalSeconds number

The project alert rule wait seconds. Default: 3600 (int)

severity string

The project alert rule severity. Supported values : "critical" | "info" | "warning". Default: critical (string)

workloadRule ProjectAlertRuleWorkloadRule

The project alert rule workload rule. ConflictsWith: "metric_rule", "pod_rule"` (list Maxitems:1)

annotations Mapping[str, Any]

The project alert rule annotations (map)

group_id str

The project alert rule alert group ID (string)

group_interval_seconds int

The project alert rule group interval seconds. Default: 180 (int)

group_wait_seconds int

The project alert rule group wait seconds. Default: 180 (int)

inherited bool

The project alert rule inherited. Default: true (bool)

labels Mapping[str, Any]

The project alert rule labels (map)

metric_rule ProjectAlertRuleMetricRuleArgs

The project alert rule metric rule. ConflictsWith: "pod_rule", "workload_rule"` (list Maxitems:1)

name str

The project alert rule name (string)

pod_rule ProjectAlertRulePodRuleArgs

The project alert rule pod rule. ConflictsWith: "metric_rule", "workload_rule"` (list Maxitems:1)

project_id str

The project id where create project alert rule (string)

repeat_interval_seconds int

The project alert rule wait seconds. Default: 3600 (int)

severity str

The project alert rule severity. Supported values : "critical" | "info" | "warning". Default: critical (string)

workload_rule ProjectAlertRuleWorkloadRuleArgs

The project alert rule workload rule. ConflictsWith: "metric_rule", "pod_rule"` (list Maxitems:1)

Supporting Types

ProjectAlertRuleMetricRule

Duration string

Metric rule duration (string)

Expression string

Metric rule expression (string)

ThresholdValue double

Metric rule threshold value (float64)

Comparison string

Metric rule comparison. Supported values : "equal" | "greater-or-equal" | "greater-than" | "less-or-equal" | "less-than" | "not-equal" | "has-value". Default: equal (string)

Description string

Metric rule description (string)

Duration string

Metric rule duration (string)

Expression string

Metric rule expression (string)

ThresholdValue float64

Metric rule threshold value (float64)

Comparison string

Metric rule comparison. Supported values : "equal" | "greater-or-equal" | "greater-than" | "less-or-equal" | "less-than" | "not-equal" | "has-value". Default: equal (string)

Description string

Metric rule description (string)

duration string

Metric rule duration (string)

expression string

Metric rule expression (string)

thresholdValue number

Metric rule threshold value (float64)

comparison string

Metric rule comparison. Supported values : "equal" | "greater-or-equal" | "greater-than" | "less-or-equal" | "less-than" | "not-equal" | "has-value". Default: equal (string)

description string

Metric rule description (string)

duration str

Metric rule duration (string)

expression str

Metric rule expression (string)

threshold_value float

Metric rule threshold value (float64)

comparison str

Metric rule comparison. Supported values : "equal" | "greater-or-equal" | "greater-than" | "less-or-equal" | "less-than" | "not-equal" | "has-value". Default: equal (string)

description str

Metric rule description (string)

ProjectAlertRulePodRule

PodId string

Pod ID (string)

Condition string

Pod rule condition. Supported values : "notrunning" | "notscheduled" | "restarts". Default: notrunning (string)

RestartIntervalSeconds int

Pod rule restart interval seconds. Default: 300 (int)

RestartTimes int

Pod rule restart times. Default: 3 (int)

PodId string

Pod ID (string)

Condition string

Pod rule condition. Supported values : "notrunning" | "notscheduled" | "restarts". Default: notrunning (string)

RestartIntervalSeconds int

Pod rule restart interval seconds. Default: 300 (int)

RestartTimes int

Pod rule restart times. Default: 3 (int)

podId string

Pod ID (string)

condition string

Pod rule condition. Supported values : "notrunning" | "notscheduled" | "restarts". Default: notrunning (string)

restartIntervalSeconds number

Pod rule restart interval seconds. Default: 300 (int)

restartTimes number

Pod rule restart times. Default: 3 (int)

pod_id str

Pod ID (string)

condition str

Pod rule condition. Supported values : "notrunning" | "notscheduled" | "restarts". Default: notrunning (string)

restart_interval_seconds int

Pod rule restart interval seconds. Default: 300 (int)

restart_times int

Pod rule restart times. Default: 3 (int)

ProjectAlertRuleWorkloadRule

AvailablePercentage int

Workload rule available percentage. Default: 70 (int)

Selector Dictionary<string, object>

Workload rule selector (map)

WorkloadId string

Workload ID (string)

AvailablePercentage int

Workload rule available percentage. Default: 70 (int)

Selector map[string]interface{}

Workload rule selector (map)

WorkloadId string

Workload ID (string)

availablePercentage number

Workload rule available percentage. Default: 70 (int)

selector {[key: string]: any}

Workload rule selector (map)

workloadId string

Workload ID (string)

available_percentage int

Workload rule available percentage. Default: 70 (int)

selector Mapping[str, Any]

Workload rule selector (map)

workload_id str

Workload ID (string)

Import

Project Alert Rule can be imported using the Rancher project alert rule ID

 $ pulumi import rancher2:index/projectAlertRule:ProjectAlertRule foo &lt;project_alert_rule_id&gt;

Package Details

Repository
https://github.com/pulumi/pulumi-rancher2
License
Apache-2.0
Notes
This Pulumi package is based on the rancher2 Terraform Provider.