@pulumi/datadog 4.47.0-alpha.1742276236 → 4.47.0-alpha.1742441368

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/types/output.d.ts CHANGED
@@ -98,6 +98,107 @@ export interface ApmRetentionFilterFilter {
98
98
  */
99
99
  query: string;
100
100
  }
101
+ export interface AppsecWafCustomRuleAction {
102
+ /**
103
+ * Override the default action to take when the WAF custom rule would block.
104
+ */
105
+ action?: string;
106
+ parameters?: outputs.AppsecWafCustomRuleActionParameters;
107
+ }
108
+ export interface AppsecWafCustomRuleActionParameters {
109
+ /**
110
+ * The location to redirect to when the WAF custom rule triggers.
111
+ */
112
+ location?: string;
113
+ /**
114
+ * The status code to return when the WAF custom rule triggers.
115
+ */
116
+ statusCode?: number;
117
+ }
118
+ export interface AppsecWafCustomRuleCondition {
119
+ /**
120
+ * Operator to use for the WAF Condition.
121
+ */
122
+ operator?: string;
123
+ parameters?: outputs.AppsecWafCustomRuleConditionParameters;
124
+ }
125
+ export interface AppsecWafCustomRuleConditionParameters {
126
+ /**
127
+ * Identifier of a list of data from the denylist. Can only be used as substitution from the list parameter.
128
+ */
129
+ data?: string;
130
+ inputs?: outputs.AppsecWafCustomRuleConditionParametersInput[];
131
+ /**
132
+ * List of value to use with the condition. Only used with the phrase*match, !phrase*match, exact*match and !exact*match operator.
133
+ */
134
+ lists?: string[];
135
+ options?: outputs.AppsecWafCustomRuleConditionParametersOptions;
136
+ /**
137
+ * Regex to use with the condition. Only used with match*regex and !match*regex operator.
138
+ */
139
+ regex?: string;
140
+ /**
141
+ * Store the captured value in the specified tag name. Only used with the captureData operator.
142
+ */
143
+ value?: string;
144
+ }
145
+ export interface AppsecWafCustomRuleConditionParametersInput {
146
+ /**
147
+ * Input from the request on which the condition should apply.
148
+ */
149
+ address?: string;
150
+ /**
151
+ * Specific path for the input.
152
+ */
153
+ keyPaths?: string[];
154
+ }
155
+ export interface AppsecWafCustomRuleConditionParametersOptions {
156
+ /**
157
+ * Evaluate the value as case sensitive.
158
+ */
159
+ caseSensitive?: boolean;
160
+ /**
161
+ * Only evaluate this condition if the value has a minimum amount of characters.
162
+ */
163
+ minLength?: number;
164
+ }
165
+ export interface AppsecWafCustomRuleScope {
166
+ /**
167
+ * The environment scope for the WAF custom rule.
168
+ */
169
+ env?: string;
170
+ /**
171
+ * The service scope for the WAF custom rule.
172
+ */
173
+ service?: string;
174
+ }
175
+ export interface AppsecWafExclusionFilterRulesTarget {
176
+ /**
177
+ * Target a single WAF rule based on its identifier.
178
+ */
179
+ ruleId?: string;
180
+ tags?: outputs.AppsecWafExclusionFilterRulesTargetTags;
181
+ }
182
+ export interface AppsecWafExclusionFilterRulesTargetTags {
183
+ /**
184
+ * The category of the targeted WAF rules.
185
+ */
186
+ category?: string;
187
+ /**
188
+ * The type of the targeted WAF rules.
189
+ */
190
+ type?: string;
191
+ }
192
+ export interface AppsecWafExclusionFilterScope {
193
+ /**
194
+ * Deploy on this environment.
195
+ */
196
+ env?: string;
197
+ /**
198
+ * Deploy on this service.
199
+ */
200
+ service?: string;
201
+ }
101
202
  export interface ChildOrganizationApiKey {
102
203
  /**
103
204
  * API key.
@@ -3378,7 +3479,7 @@ export interface DashboardWidgetQueryTableDefinitionRequest {
3378
3479
  apmQuery?: outputs.DashboardWidgetApmQuery;
3379
3480
  apmStatsQuery?: outputs.DashboardWidgetQueryTableDefinitionRequestApmStatsQuery;
3380
3481
  /**
3381
- * A list of display modes for each table cell. List items one of `number`, `bar`. Valid values are `number`, `bar`, `trend`.
3482
+ * A list of display modes for each table cell. Valid values are `number`, `bar`, `trend`.
3382
3483
  */
3383
3484
  cellDisplayModes?: string[];
3384
3485
  /**
@@ -9169,6 +9270,10 @@ export interface GetSecurityMonitoringRulesRule {
9169
9270
  * Additional queries to filter matched events before they are processed. **Note**: This field is deprecated for log detection, signal correlation, and workload security rules.
9170
9271
  */
9171
9272
  filters?: outputs.GetSecurityMonitoringRulesRuleFilter[];
9273
+ /**
9274
+ * Additional grouping to perform on top of the query grouping.
9275
+ */
9276
+ groupSignalsBies?: string[];
9172
9277
  /**
9173
9278
  * Whether the notifications include the triggering group-by values in their title.
9174
9279
  */
@@ -9211,6 +9316,10 @@ export interface GetSecurityMonitoringRulesRule {
9211
9316
  type?: string;
9212
9317
  }
9213
9318
  export interface GetSecurityMonitoringRulesRuleCase {
9319
+ /**
9320
+ * Action to perform when the case trigger
9321
+ */
9322
+ actions?: outputs.GetSecurityMonitoringRulesRuleCaseAction[];
9214
9323
  /**
9215
9324
  * A rule case contains logical operations (`>`,`>=`, `&&`, `||`) to determine if a signal should be generated based on the event counts in the previously defined queries.
9216
9325
  */
@@ -9228,6 +9337,22 @@ export interface GetSecurityMonitoringRulesRuleCase {
9228
9337
  */
9229
9338
  status: string;
9230
9339
  }
9340
+ export interface GetSecurityMonitoringRulesRuleCaseAction {
9341
+ /**
9342
+ * Options for the action.
9343
+ */
9344
+ options?: outputs.GetSecurityMonitoringRulesRuleCaseActionOptions;
9345
+ /**
9346
+ * Type of action to perform when the case triggers.
9347
+ */
9348
+ type: string;
9349
+ }
9350
+ export interface GetSecurityMonitoringRulesRuleCaseActionOptions {
9351
+ /**
9352
+ * Duration of the action in seconds.
9353
+ */
9354
+ duration?: number;
9355
+ }
9231
9356
  export interface GetSecurityMonitoringRulesRuleFilter {
9232
9357
  /**
9233
9358
  * The type of filtering action.
@@ -15270,7 +15395,7 @@ export interface PowerpackWidgetQueryTableDefinitionRequest {
15270
15395
  apmQuery?: outputs.PowerpackWidgetQueryTableDefinitionRequestApmQuery;
15271
15396
  apmStatsQuery?: outputs.PowerpackWidgetQueryTableDefinitionRequestApmStatsQuery;
15272
15397
  /**
15273
- * A list of display modes for each table cell. List items one of `number`, `bar`. Valid values are `number`, `bar`, `trend`.
15398
+ * A list of display modes for each table cell. Valid values are `number`, `bar`, `trend`.
15274
15399
  */
15275
15400
  cellDisplayModes?: string[];
15276
15401
  /**
@@ -22565,6 +22690,10 @@ export interface SecurityMonitoringFilterExclusionFilter {
22565
22690
  query: string;
22566
22691
  }
22567
22692
  export interface SecurityMonitoringRuleCase {
22693
+ /**
22694
+ * Action to perform when the case trigger
22695
+ */
22696
+ actions?: outputs.SecurityMonitoringRuleCaseAction[];
22568
22697
  /**
22569
22698
  * A rule case contains logical operations (`>`,`>=`, `&&`, `||`) to determine if a signal should be generated based on the event counts in the previously defined queries.
22570
22699
  */
@@ -22582,6 +22711,22 @@ export interface SecurityMonitoringRuleCase {
22582
22711
  */
22583
22712
  status: string;
22584
22713
  }
22714
+ export interface SecurityMonitoringRuleCaseAction {
22715
+ /**
22716
+ * Options for the action.
22717
+ */
22718
+ options?: outputs.SecurityMonitoringRuleCaseActionOptions;
22719
+ /**
22720
+ * Type of action to perform when the case triggers. Valid values are `blockIp`, `blockUser`.
22721
+ */
22722
+ type: string;
22723
+ }
22724
+ export interface SecurityMonitoringRuleCaseActionOptions {
22725
+ /**
22726
+ * Duration of the action in seconds.
22727
+ */
22728
+ duration?: number;
22729
+ }
22585
22730
  export interface SecurityMonitoringRuleFilter {
22586
22731
  /**
22587
22732
  * The type of filtering action. Valid values are `require`, `suppress`.
@@ -23005,7 +23150,7 @@ export interface SyntheticsGlobalVariableParseTestOptionsParser {
23005
23150
  }
23006
23151
  export interface SyntheticsPrivateLocationMetadata {
23007
23152
  /**
23008
- * A list of role identifiers pulled from the Roles API to restrict read and write access. **Deprecated.** This field is no longer supported by the Datadog API. Please use `datadog.RestrictionPolicy` instead.
23153
+ * A set of role identifiers pulled from the Roles API to restrict read and write access. **Deprecated.** This field is no longer supported by the Datadog API. Please use `datadog.RestrictionPolicy` instead.
23009
23154
  *
23010
23155
  * @deprecated This field is no longer supported by the Datadog API. Please use `datadog.RestrictionPolicy` instead.
23011
23156
  */
@@ -23028,6 +23173,10 @@ export interface SyntheticsTestApiStep {
23028
23173
  * Values to parse and save as variables from the response.
23029
23174
  */
23030
23175
  extractedValues?: outputs.SyntheticsTestApiStepExtractedValue[];
23176
+ /**
23177
+ * Generate variables using JavaScript.
23178
+ */
23179
+ extractedValuesFromScript?: string;
23031
23180
  /**
23032
23181
  * Determines whether or not to consider the entire test as failed if this step fails. Can be used only if `allowFailure` is `true`.
23033
23182
  */
@@ -23596,7 +23745,7 @@ export interface SyntheticsTestBrowserStepParams {
23596
23745
  */
23597
23746
  file?: string;
23598
23747
  /**
23599
- * Details of the files for an "upload files" step, JSON encoded string.
23748
+ * Details of the files for an "upload files" step, JSON encoded string. Refer to the examples for a usage example showing the schema.
23600
23749
  */
23601
23750
  files?: string;
23602
23751
  /**
@@ -0,0 +1,166 @@
1
+ import * as pulumi from "@pulumi/pulumi";
2
+ /**
3
+ * ## Example Usage
4
+ *
5
+ * ```typescript
6
+ * import * as pulumi from "@pulumi/pulumi";
7
+ * import * as datadog from "@pulumi/datadog";
8
+ *
9
+ * const workflow = new datadog.WorkflowAutomation("workflow", {
10
+ * name: "Send Email when Monitor Alerts",
11
+ * description: "This workflow alerts me by email when my monitor goes off. ",
12
+ * tags: [
13
+ * "service:foo",
14
+ * "source:alert",
15
+ * "team:bar",
16
+ * ],
17
+ * published: true,
18
+ * specJson: JSON.stringify({
19
+ * triggers: [{
20
+ * startStepNames: ["Send_Email"],
21
+ * monitorTrigger: {},
22
+ * }],
23
+ * steps: [{
24
+ * name: "Send_Email",
25
+ * actionId: "com.datadoghq.email.send",
26
+ * parameters: [
27
+ * {
28
+ * name: "to",
29
+ * value: "REPLACE_ME",
30
+ * },
31
+ * {
32
+ * name: "subject",
33
+ * value: "Monitor \"{{ Source.monitor.name }}\" alerted",
34
+ * },
35
+ * {
36
+ * name: "message",
37
+ * value: `This message is from {{ WorkflowName }}.
38
+ *
39
+ * You can find a link to the monitor here: {{ Source.url }}.`,
40
+ * },
41
+ * ],
42
+ * display: {
43
+ * bounds: {
44
+ * x: 0,
45
+ * y: 216,
46
+ * },
47
+ * },
48
+ * }],
49
+ * handle: "my-handle",
50
+ * }),
51
+ * });
52
+ * ```
53
+ *
54
+ * ## Import
55
+ *
56
+ * ```sh
57
+ * $ pulumi import datadog:index/workflowAutomation:WorkflowAutomation my_workflow 11111111-2222-3333-4444-555555555555
58
+ * ```
59
+ */
60
+ export declare class WorkflowAutomation extends pulumi.CustomResource {
61
+ /**
62
+ * Get an existing WorkflowAutomation resource's state with the given name, ID, and optional extra
63
+ * properties used to qualify the lookup.
64
+ *
65
+ * @param name The _unique_ name of the resulting resource.
66
+ * @param id The _unique_ provider ID of the resource to lookup.
67
+ * @param state Any extra arguments used during the lookup.
68
+ * @param opts Optional settings to control the behavior of the CustomResource.
69
+ */
70
+ static get(name: string, id: pulumi.Input<pulumi.ID>, state?: WorkflowAutomationState, opts?: pulumi.CustomResourceOptions): WorkflowAutomation;
71
+ /**
72
+ * Returns true if the given object is an instance of WorkflowAutomation. This is designed to work even
73
+ * when multiple copies of the Pulumi SDK have been loaded into the same process.
74
+ */
75
+ static isInstance(obj: any): obj is WorkflowAutomation;
76
+ /**
77
+ * Description of the workflow.
78
+ */
79
+ readonly description: pulumi.Output<string>;
80
+ /**
81
+ * Name of the workflow.
82
+ */
83
+ readonly name: pulumi.Output<string>;
84
+ /**
85
+ * Set the workflow to published or unpublished. Workflows in an unpublished state are only executable through manual runs. Automatic triggers such as Schedule do not execute the workflow until it is published.
86
+ */
87
+ readonly published: pulumi.Output<boolean>;
88
+ /**
89
+ * The spec defines what the workflow does.
90
+ */
91
+ readonly specJson: pulumi.Output<string>;
92
+ /**
93
+ * Tags of the workflow.
94
+ */
95
+ readonly tags: pulumi.Output<string[]>;
96
+ /**
97
+ * If a webhook trigger is defined on this workflow, a webhookSecret is required and should be provided here.
98
+ */
99
+ readonly webhookSecret: pulumi.Output<string | undefined>;
100
+ /**
101
+ * Create a WorkflowAutomation resource with the given unique name, arguments, and options.
102
+ *
103
+ * @param name The _unique_ name of the resource.
104
+ * @param args The arguments to use to populate this resource's properties.
105
+ * @param opts A bag of options that control this resource's behavior.
106
+ */
107
+ constructor(name: string, args: WorkflowAutomationArgs, opts?: pulumi.CustomResourceOptions);
108
+ }
109
+ /**
110
+ * Input properties used for looking up and filtering WorkflowAutomation resources.
111
+ */
112
+ export interface WorkflowAutomationState {
113
+ /**
114
+ * Description of the workflow.
115
+ */
116
+ description?: pulumi.Input<string>;
117
+ /**
118
+ * Name of the workflow.
119
+ */
120
+ name?: pulumi.Input<string>;
121
+ /**
122
+ * Set the workflow to published or unpublished. Workflows in an unpublished state are only executable through manual runs. Automatic triggers such as Schedule do not execute the workflow until it is published.
123
+ */
124
+ published?: pulumi.Input<boolean>;
125
+ /**
126
+ * The spec defines what the workflow does.
127
+ */
128
+ specJson?: pulumi.Input<string>;
129
+ /**
130
+ * Tags of the workflow.
131
+ */
132
+ tags?: pulumi.Input<pulumi.Input<string>[]>;
133
+ /**
134
+ * If a webhook trigger is defined on this workflow, a webhookSecret is required and should be provided here.
135
+ */
136
+ webhookSecret?: pulumi.Input<string>;
137
+ }
138
+ /**
139
+ * The set of arguments for constructing a WorkflowAutomation resource.
140
+ */
141
+ export interface WorkflowAutomationArgs {
142
+ /**
143
+ * Description of the workflow.
144
+ */
145
+ description: pulumi.Input<string>;
146
+ /**
147
+ * Name of the workflow.
148
+ */
149
+ name: pulumi.Input<string>;
150
+ /**
151
+ * Set the workflow to published or unpublished. Workflows in an unpublished state are only executable through manual runs. Automatic triggers such as Schedule do not execute the workflow until it is published.
152
+ */
153
+ published: pulumi.Input<boolean>;
154
+ /**
155
+ * The spec defines what the workflow does.
156
+ */
157
+ specJson: pulumi.Input<string>;
158
+ /**
159
+ * Tags of the workflow.
160
+ */
161
+ tags: pulumi.Input<pulumi.Input<string>[]>;
162
+ /**
163
+ * If a webhook trigger is defined on this workflow, a webhookSecret is required and should be provided here.
164
+ */
165
+ webhookSecret?: pulumi.Input<string>;
166
+ }
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ // *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
3
+ // *** Do not edit by hand unless you're certain you know what you are doing! ***
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.WorkflowAutomation = void 0;
6
+ const pulumi = require("@pulumi/pulumi");
7
+ const utilities = require("./utilities");
8
+ /**
9
+ * ## Example Usage
10
+ *
11
+ * ```typescript
12
+ * import * as pulumi from "@pulumi/pulumi";
13
+ * import * as datadog from "@pulumi/datadog";
14
+ *
15
+ * const workflow = new datadog.WorkflowAutomation("workflow", {
16
+ * name: "Send Email when Monitor Alerts",
17
+ * description: "This workflow alerts me by email when my monitor goes off. ",
18
+ * tags: [
19
+ * "service:foo",
20
+ * "source:alert",
21
+ * "team:bar",
22
+ * ],
23
+ * published: true,
24
+ * specJson: JSON.stringify({
25
+ * triggers: [{
26
+ * startStepNames: ["Send_Email"],
27
+ * monitorTrigger: {},
28
+ * }],
29
+ * steps: [{
30
+ * name: "Send_Email",
31
+ * actionId: "com.datadoghq.email.send",
32
+ * parameters: [
33
+ * {
34
+ * name: "to",
35
+ * value: "REPLACE_ME",
36
+ * },
37
+ * {
38
+ * name: "subject",
39
+ * value: "Monitor \"{{ Source.monitor.name }}\" alerted",
40
+ * },
41
+ * {
42
+ * name: "message",
43
+ * value: `This message is from {{ WorkflowName }}.
44
+ *
45
+ * You can find a link to the monitor here: {{ Source.url }}.`,
46
+ * },
47
+ * ],
48
+ * display: {
49
+ * bounds: {
50
+ * x: 0,
51
+ * y: 216,
52
+ * },
53
+ * },
54
+ * }],
55
+ * handle: "my-handle",
56
+ * }),
57
+ * });
58
+ * ```
59
+ *
60
+ * ## Import
61
+ *
62
+ * ```sh
63
+ * $ pulumi import datadog:index/workflowAutomation:WorkflowAutomation my_workflow 11111111-2222-3333-4444-555555555555
64
+ * ```
65
+ */
66
+ class WorkflowAutomation extends pulumi.CustomResource {
67
+ /**
68
+ * Get an existing WorkflowAutomation resource's state with the given name, ID, and optional extra
69
+ * properties used to qualify the lookup.
70
+ *
71
+ * @param name The _unique_ name of the resulting resource.
72
+ * @param id The _unique_ provider ID of the resource to lookup.
73
+ * @param state Any extra arguments used during the lookup.
74
+ * @param opts Optional settings to control the behavior of the CustomResource.
75
+ */
76
+ static get(name, id, state, opts) {
77
+ return new WorkflowAutomation(name, state, Object.assign(Object.assign({}, opts), { id: id }));
78
+ }
79
+ /**
80
+ * Returns true if the given object is an instance of WorkflowAutomation. This is designed to work even
81
+ * when multiple copies of the Pulumi SDK have been loaded into the same process.
82
+ */
83
+ static isInstance(obj) {
84
+ if (obj === undefined || obj === null) {
85
+ return false;
86
+ }
87
+ return obj['__pulumiType'] === WorkflowAutomation.__pulumiType;
88
+ }
89
+ constructor(name, argsOrState, opts) {
90
+ let resourceInputs = {};
91
+ opts = opts || {};
92
+ if (opts.id) {
93
+ const state = argsOrState;
94
+ resourceInputs["description"] = state ? state.description : undefined;
95
+ resourceInputs["name"] = state ? state.name : undefined;
96
+ resourceInputs["published"] = state ? state.published : undefined;
97
+ resourceInputs["specJson"] = state ? state.specJson : undefined;
98
+ resourceInputs["tags"] = state ? state.tags : undefined;
99
+ resourceInputs["webhookSecret"] = state ? state.webhookSecret : undefined;
100
+ }
101
+ else {
102
+ const args = argsOrState;
103
+ if ((!args || args.description === undefined) && !opts.urn) {
104
+ throw new Error("Missing required property 'description'");
105
+ }
106
+ if ((!args || args.name === undefined) && !opts.urn) {
107
+ throw new Error("Missing required property 'name'");
108
+ }
109
+ if ((!args || args.published === undefined) && !opts.urn) {
110
+ throw new Error("Missing required property 'published'");
111
+ }
112
+ if ((!args || args.specJson === undefined) && !opts.urn) {
113
+ throw new Error("Missing required property 'specJson'");
114
+ }
115
+ if ((!args || args.tags === undefined) && !opts.urn) {
116
+ throw new Error("Missing required property 'tags'");
117
+ }
118
+ resourceInputs["description"] = args ? args.description : undefined;
119
+ resourceInputs["name"] = args ? args.name : undefined;
120
+ resourceInputs["published"] = args ? args.published : undefined;
121
+ resourceInputs["specJson"] = args ? args.specJson : undefined;
122
+ resourceInputs["tags"] = args ? args.tags : undefined;
123
+ resourceInputs["webhookSecret"] = (args === null || args === void 0 ? void 0 : args.webhookSecret) ? pulumi.secret(args.webhookSecret) : undefined;
124
+ }
125
+ opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts);
126
+ const secretOpts = { additionalSecretOutputs: ["webhookSecret"] };
127
+ opts = pulumi.mergeOptions(opts, secretOpts);
128
+ super(WorkflowAutomation.__pulumiType, name, resourceInputs, opts);
129
+ }
130
+ }
131
+ exports.WorkflowAutomation = WorkflowAutomation;
132
+ /** @internal */
133
+ WorkflowAutomation.__pulumiType = 'datadog:index/workflowAutomation:WorkflowAutomation';
134
+ //# sourceMappingURL=workflowAutomation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflowAutomation.js","sourceRoot":"","sources":["../workflowAutomation.ts"],"names":[],"mappings":"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"}