Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

4.0- removes several instances of ConfigModeAttr from automation, batch, containerinstance #25732

Merged
merged 10 commits into from
Apr 29, 2024
1 change: 1 addition & 0 deletions internal/provider/provider_schema_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,7 @@ func TestDataSourcesWithAnEncryptionBlockBehaveConsistently(t *testing.T) {
// TODO: 4.0 - work through this list
dataSourcesWhichNeedToBeAddressed := map[string]struct{}{
"azurerm_app_configuration": {},
"azurerm_batch_account": {},
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added here until we know more about what this schema check is trying to prevent

"azurerm_batch_pool": {},
"azurerm_managed_disk": {},
"azurerm_snapshot": {},
Expand Down
50 changes: 49 additions & 1 deletion internal/services/automation/automation_runbook_resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"github.com/hashicorp/terraform-provider-azurerm/internal/acceptance"
"github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check"
"github.com/hashicorp/terraform-provider-azurerm/internal/clients"
"github.com/hashicorp/terraform-provider-azurerm/internal/features"
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk"
"github.com/hashicorp/terraform-provider-azurerm/utils"
)
Expand Down Expand Up @@ -493,7 +494,8 @@ CONTENT
}

func (AutomationRunbookResource) withoutJobSchedule(data acceptance.TestData) string {
return fmt.Sprintf(`
if !features.FourPointOhBeta() {
return fmt.Sprintf(`
provider "azurerm" {
features {}
}
Expand Down Expand Up @@ -538,6 +540,52 @@ CONTENT

job_schedule = []
}
`, data.RandomInteger, data.Locations.Primary)
}

return fmt.Sprintf(`
provider "azurerm" {
features {}
}

resource "azurerm_resource_group" "test" {
name = "acctestRG-%[1]d"
location = "%[2]s"
}

resource "azurerm_automation_account" "test" {
name = "acctest-%[1]d"
location = azurerm_resource_group.test.location
resource_group_name = azurerm_resource_group.test.name
sku_name = "Basic"
}

resource "azurerm_automation_schedule" "test" {
name = "acctestAS-%[1]d"
resource_group_name = azurerm_resource_group.test.name
automation_account_name = azurerm_automation_account.test.name
frequency = "Week"
timezone = "Etc/UTC"
}

resource "azurerm_automation_runbook" "test" {
name = "Get-AzureVMTutorial"
location = azurerm_resource_group.test.location
resource_group_name = azurerm_resource_group.test.name
automation_account_name = azurerm_automation_account.test.name

log_verbose = "true"
log_progress = "true"
description = "This is a test runbook for terraform acceptance test"
runbook_type = "PowerShell"

content = <<CONTENT
param(
[string]$Output = "World",
)
"Hello, " + $Output + "!"
CONTENT
}
`, data.RandomInteger, data.Locations.Primary)
}

Expand Down
13 changes: 6 additions & 7 deletions internal/services/automation/automation_webhook_resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (
"github.com/hashicorp/go-azure-helpers/lang/response"
"github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema"
"github.com/hashicorp/go-azure-sdk/resource-manager/automation/2015-10-31/webhook"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-provider-azurerm/helpers/tf"
"github.com/hashicorp/terraform-provider-azurerm/internal/clients"
"github.com/hashicorp/terraform-provider-azurerm/internal/services/automation/migration"
Expand Down Expand Up @@ -72,17 +71,18 @@ func resourceAutomationWebhook() *pluginsdk.Resource {
ValidateFunc: validation.IsRFC3339Time,
},

"runbook_name": {
Type: pluginsdk.TypeString,
Required: true,
ValidateFunc: validate.RunbookName(),
},

"enabled": {
Type: pluginsdk.TypeBool,
Optional: true,
Default: true,
},

"runbook_name": {
Type: pluginsdk.TypeString,
Required: true,
ValidateFunc: validate.RunbookName(),
},
"run_on_worker_group": {
Type: pluginsdk.TypeString,
Optional: true,
Expand All @@ -96,7 +96,6 @@ func resourceAutomationWebhook() *pluginsdk.Resource {
},
"uri": {
Type: pluginsdk.TypeString,
ConfigMode: schema.SchemaConfigModeAttr,
Optional: true,
ForceNew: true,
Computed: true,
Expand Down
103 changes: 49 additions & 54 deletions internal/services/automation/automation_webhook_resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ package automation_test
import (
"context"
"fmt"
"regexp"
"testing"
"time"

Expand All @@ -26,66 +25,66 @@ func TestAccAutomationWebhook_basic(t *testing.T) {

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.SimpleWebhook(data),
Config: r.basic(data),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("name").Exists(),
check.That(data.ResourceName).Key("resource_group_name").Exists(),
check.That(data.ResourceName).Key("automation_account_name").Exists(),
check.That(data.ResourceName).Key("expiry_time").Exists(),
check.That(data.ResourceName).Key("enabled").HasValue("true"),
check.That(data.ResourceName).Key("runbook_name").HasValue("Get-AzureVMTutorial"),
check.That(data.ResourceName).Key("parameters").DoesNotExist(),
check.That(data.ResourceName).Key("uri").Exists(),
),
},
data.ImportStep("uri"),
})
}

func TestAccAutomationWebhook_requiresImport(t *testing.T) {
func TestAccAutomationWebhook_complete(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_automation_webhook", "test")
r := AutomationWebhookResource{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.SimpleWebhook(data),
Config: r.complete(data),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
{
Config: r.requiresImport(data),
ExpectError: acceptance.RequiresImportError("azurerm_automation_webhook"),
},
data.ImportStep("uri"),
})
}

func TestAccAutomationWebhook_WithParameters(t *testing.T) {
func TestAccAutomationWebhook_update(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_automation_webhook", "test")
r := AutomationWebhookResource{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.WebhookWithParameters(data),
Config: r.basic(data),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
data.ImportStep("uri"),
{
Config: r.complete(data),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("parameters.input").HasValue("parameter"),
check.That(data.ResourceName).Key("uri").Exists(),
),
},
data.ImportStep("uri"),
})
}

func TestAccAutomationWebhook_WithWorkerGroup(t *testing.T) {
func TestAccAutomationWebhook_requiresImport(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_automation_webhook", "test")
r := AutomationWebhookResource{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.WebhookOnWorkerGroup(data),
ExpectError: regexp.MustCompile("The Hybrid Runbook Worker Group given in RunOn parameter does not exist"),
Config: r.basic(data),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
{
Config: r.requiresImport(data),
ExpectError: acceptance.RequiresImportError("azurerm_automation_webhook"),
},
})
}
Expand Down Expand Up @@ -141,7 +140,7 @@ CONTENT
`, data.RandomInteger, data.Locations.Primary, data.RandomInteger)
}

func (AutomationWebhookResource) SimpleWebhook(data acceptance.TestData) string {
func (AutomationWebhookResource) basic(data acceptance.TestData) string {
template := AutomationWebhookResource{}.ParentResources(data)
return fmt.Sprintf(`
%s
Expand All @@ -151,61 +150,57 @@ resource "azurerm_automation_webhook" "test" {
resource_group_name = azurerm_resource_group.test.name
automation_account_name = azurerm_automation_account.test.name
expiry_time = "%s"
enabled = true
runbook_name = azurerm_automation_runbook.test.name
}
`, template, time.Now().UTC().Add(time.Hour).Format(time.RFC3339))
}

func (AutomationWebhookResource) requiresImport(data acceptance.TestData) string {
template := AutomationWebhookResource{}.SimpleWebhook(data)
func (AutomationWebhookResource) complete(data acceptance.TestData) string {
template := AutomationWebhookResource{}.ParentResources(data)
return fmt.Sprintf(`
%s

resource "azurerm_automation_webhook" "import" {
name = azurerm_automation_webhook.test.name
resource_group_name = azurerm_automation_webhook.test.resource_group_name
automation_account_name = azurerm_automation_webhook.test.automation_account_name
expiry_time = azurerm_automation_webhook.test.expiry_time
enabled = azurerm_automation_webhook.test.enabled
runbook_name = azurerm_automation_webhook.test.runbook_name
}
`, template)
resource "azurerm_automation_credential" "test" {
name = "acctest-%[2]d"
resource_group_name = azurerm_resource_group.test.name
automation_account_name = azurerm_automation_account.test.name
username = "test_user"
password = "test_pwd"
}

func (AutomationWebhookResource) WebhookWithParameters(data acceptance.TestData) string {
template := AutomationWebhookResource{}.ParentResources(data)
return fmt.Sprintf(`
%s
resource "azurerm_automation_hybrid_runbook_worker_group" "test" {
resource_group_name = azurerm_resource_group.test.name
automation_account_name = azurerm_automation_account.test.name
name = "acctest-%[2]d"
credential_name = azurerm_automation_credential.test.name
}

resource "azurerm_automation_webhook" "test" {
name = "TestRunbook_webhook"
resource_group_name = azurerm_resource_group.test.name
automation_account_name = azurerm_automation_account.test.name
expiry_time = "%s"
enabled = true
expiry_time = "%[3]s"
enabled = false
runbook_name = azurerm_automation_runbook.test.name
run_on_worker_group = azurerm_automation_hybrid_runbook_worker_group.test.name
parameters = {
input = "parameter"
}
}
`, template, time.Now().UTC().Add(time.Hour).Format(time.RFC3339))
`, template, data.RandomInteger, time.Now().UTC().Add(time.Hour).Format(time.RFC3339))
}

// requires creation of worker group
func (AutomationWebhookResource) WebhookOnWorkerGroup(data acceptance.TestData) string {
template := AutomationWebhookResource{}.ParentResources(data)
func (AutomationWebhookResource) requiresImport(data acceptance.TestData) string {
template := AutomationWebhookResource{}.basic(data)
return fmt.Sprintf(`
%s

resource "azurerm_automation_webhook" "test" {
name = "TestRunbook_webhook"
resource_group_name = azurerm_resource_group.test.name
automation_account_name = azurerm_automation_account.test.name
expiry_time = timeadd(timestamp(), "10h")
enabled = true
runbook_name = azurerm_automation_runbook.test.name
run_on_worker_group = "workergroup"
resource "azurerm_automation_webhook" "import" {
name = azurerm_automation_webhook.test.name
resource_group_name = azurerm_automation_webhook.test.resource_group_name
automation_account_name = azurerm_automation_webhook.test.automation_account_name
expiry_time = azurerm_automation_webhook.test.expiry_time
runbook_name = azurerm_automation_webhook.test.runbook_name
}
`, template)
}
45 changes: 41 additions & 4 deletions internal/services/automation/helper/automation_job_schedule.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,54 @@ import (

"github.com/gofrs/uuid"
"github.com/hashicorp/go-azure-sdk/resource-manager/automation/2023-11-01/jobschedule"
"github.com/hashicorp/terraform-provider-azurerm/internal/features"
"github.com/hashicorp/terraform-provider-azurerm/internal/services/automation/validate"
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk"
"github.com/hashicorp/terraform-provider-azurerm/utils"
)

func JobScheduleSchema() *pluginsdk.Schema {
if !features.FourPointOhBeta() {
return &pluginsdk.Schema{
Type: pluginsdk.TypeSet,
Optional: true,
Computed: true,
ConfigMode: pluginsdk.SchemaConfigModeAttr,
Elem: &pluginsdk.Resource{
Schema: map[string]*pluginsdk.Schema{
"schedule_name": {
Type: pluginsdk.TypeString,
Required: true,
ValidateFunc: validate.ScheduleName(),
},

"parameters": {
Type: pluginsdk.TypeMap,
Optional: true,
Elem: &pluginsdk.Schema{
Type: pluginsdk.TypeString,
},
ValidateFunc: validate.ParameterNames,
},

"run_on": {
Type: pluginsdk.TypeString,
Optional: true,
},

"job_schedule_id": {
Type: pluginsdk.TypeString,
Computed: true,
},
},
},
Set: resourceAutomationJobScheduleHash,
}
}

return &pluginsdk.Schema{
Type: pluginsdk.TypeSet,
Optional: true,
Computed: true,
ConfigMode: pluginsdk.SchemaConfigModeAttr,
Type: pluginsdk.TypeSet,
Optional: true,
Elem: &pluginsdk.Resource{
Schema: map[string]*pluginsdk.Schema{
"schedule_name": {
Expand Down