diff --git a/azurerm/internal/services/sentinel/sentinel_alert_rule_scheduled_resource.go b/azurerm/internal/services/sentinel/sentinel_alert_rule_scheduled_resource.go index ff82a0caac90..6fac9367a731 100644 --- a/azurerm/internal/services/sentinel/sentinel_alert_rule_scheduled_resource.go +++ b/azurerm/internal/services/sentinel/sentinel_alert_rule_scheduled_resource.go @@ -60,6 +60,13 @@ func resourceSentinelAlertRuleScheduled() *schema.Resource { ValidateFunc: validation.StringIsNotEmpty, }, + "alert_rule_template_guid": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + ValidateFunc: validation.IsUUID, + }, + "description": { Type: schema.TypeString, Optional: true, @@ -224,6 +231,10 @@ func resourceSentinelAlertRuleScheduledCreateUpdate(d *schema.ResourceData, meta }, } + if v, ok := d.GetOk("alert_rule_template_guid"); ok { + param.ScheduledAlertRuleProperties.AlertRuleTemplateName = utils.String(v.(string)) + } + // Service avoid concurrent update of this resource via checking the "etag" to guarantee it is the same value as last Read. if !d.IsNewResource() { resp, err := client.Get(ctx, workspaceID.ResourceGroup, "Microsoft.OperationalInsights", workspaceID.WorkspaceName, name) @@ -307,6 +318,7 @@ func resourceSentinelAlertRuleScheduledRead(d *schema.ResourceData, meta interfa d.Set("trigger_threshold", int(threshold)) d.Set("suppression_enabled", prop.SuppressionEnabled) d.Set("suppression_duration", prop.SuppressionDuration) + d.Set("alert_rule_template_guid", prop.AlertRuleTemplateName) } return nil diff --git a/azurerm/internal/services/sentinel/sentinel_alert_rule_scheduled_resource_test.go b/azurerm/internal/services/sentinel/sentinel_alert_rule_scheduled_resource_test.go index 3cc12b5e0806..22c4f2e9b159 100644 --- a/azurerm/internal/services/sentinel/sentinel_alert_rule_scheduled_resource_test.go +++ b/azurerm/internal/services/sentinel/sentinel_alert_rule_scheduled_resource_test.go @@ -92,6 +92,21 @@ func TestAccSentinelAlertRuleScheduled_requiresImport(t *testing.T) { }) } +func TestAccSentinelAlertRuleScheduled_withAlertRuleTemplateGuid(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_sentinel_alert_rule_scheduled", "test") + r := SentinelAlertRuleScheduledResource{} + + data.ResourceTest(t, r, []resource.TestStep{ + { + Config: r.alertRuleTemplateGuid(data), + Check: resource.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + func (t SentinelAlertRuleScheduledResource) Exists(ctx context.Context, clients *clients.Client, state *terraform.InstanceState) (*bool, error) { id, err := parse.SentinelAlertRuleID(state.ID) if err != nil { @@ -172,6 +187,26 @@ resource "azurerm_sentinel_alert_rule_scheduled" "import" { `, r.basic(data)) } +func (r SentinelAlertRuleScheduledResource) alertRuleTemplateGuid(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_sentinel_alert_rule_scheduled" "test" { + name = "acctest-SentinelAlertRule-Sche-%d" + log_analytics_workspace_id = azurerm_log_analytics_workspace.test.id + display_name = "Some Rule" + severity = "Low" + alert_rule_template_guid = "65360bb0-8986-4ade-a89d-af3cf44d28aa" + query = <