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

azurerm_mssql_virtual_machine - add support for assessment #18923

Merged
merged 49 commits into from
Oct 24, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
7d10f36
`dependencies`: Upgrade sqlvirtualmachine API version to 2021-11-01-p…
myc2h6o Mar 15, 2022
e838ed9
sql updates
tikicoder Mar 22, 2022
0f2da95
Merge branch 'main' into tiki_sqlvm_upgrade
tikicoder May 6, 2022
5940a09
Update internal/services/mssql/helper/sql_virtual_machine_storage_set…
tikicoder May 12, 2022
730ae2f
Update internal/services/mssql/helper/sql_virtual_machine_storage_set…
tikicoder May 12, 2022
64b24ba
Update internal/services/mssql/helper/sql_virtual_machine_storage_set…
tikicoder May 12, 2022
eca962d
Update internal/services/mssql/helper/sql_virtual_machine_storage_set…
tikicoder May 12, 2022
916fee7
Update internal/services/mssql/mssql_virtual_machine_resource.go
tikicoder May 12, 2022
e673a25
Update mssql_virtual_machine.html.markdown
tikicoder May 13, 2022
764987d
Update mssql_virtual_machine_resource.go
tikicoder May 13, 2022
5520ecb
Merge pull request #1 from tikicoder/main
tikicoder May 13, 2022
8f6b48d
Update mssql_virtual_machine_resource_test.go
tikicoder May 13, 2022
67fd530
Update mssql_virtual_machine_resource.go
tikicoder May 13, 2022
482e02d
Merge branch 'hashicorp:main' into tiki_sqlvm_upgrade
tikicoder May 18, 2022
26805c9
Update mssql_virtual_machine_resource.go
tikicoder May 21, 2022
f93d58b
Merge branch 'hashicorp:main' into tiki_sqlvm_upgrade
tikicoder May 21, 2022
94db1e0
Merge branch 'hashicorp:main' into tiki_sqlvm_upgrade
tikicoder May 26, 2022
1ff4bba
ran gofmt on code
tikicoder May 26, 2022
cac7f1e
Update mssql_virtual_machine_resource.go
tikicoder May 26, 2022
69867b5
Merge branch 'hashicorp:main' into tiki_sqlvm_upgrade
tikicoder May 26, 2022
76824cd
Merge branch 'hashicorp:main' into tiki_sqlvm_upgrade
tikicoder Jun 1, 2022
1df346f
Update mssql_virtual_machine_resource.go
tikicoder Jun 2, 2022
87b8b23
Update mssql_virtual_machine_resource.go
tikicoder Jun 2, 2022
4ace720
Update mssql_virtual_machine_resource_test.go
tikicoder Jun 2, 2022
c37f24a
Merge branch 'hashicorp:main' into tiki_sqlvm_upgrade
tikicoder Jun 7, 2022
b55d31c
Update mssql_virtual_machine_resource.go
tikicoder Jun 7, 2022
de7c092
Update mssql_virtual_machine_resource.go
tikicoder Jun 7, 2022
4e967bf
Update mssql_virtual_machine_resource_test.go
tikicoder Jun 7, 2022
4ed6162
Update mssql_virtual_machine_resource.go
tikicoder Jun 7, 2022
8bf6a2f
gofmt -s updates
tikicoder Jun 8, 2022
89d2631
updates based on feedback
tikicoder Jun 8, 2022
5d3d88e
reverted change pending feedback
tikicoder Jun 8, 2022
13c8454
Update mssql_virtual_machine_resource.go
tikicoder Jun 10, 2022
8ef3957
Update mssql_virtual_machine_resource.go
tikicoder Jun 10, 2022
42e7810
ran fmter
tikicoder Jun 10, 2022
6397155
Merge branch 'hashicorp:main' into tiki_sqlvm_upgrade
tikicoder Jun 10, 2022
9bdef9c
Merge branch 'hashicorp:main' into tiki_sqlvm_upgrade
tikicoder Jun 14, 2022
87d5c95
Merge branch 'hashicorp:main' into tiki_sqlvm_upgrade
tikicoder Jun 15, 2022
43afd2e
upstream pull
tikicoder Jun 29, 2022
a877a5f
Merge branch 'hashicorp:main' into tiki_sqlvm_upgrade
tikicoder Jun 30, 2022
c7ac9e7
Merge branch 'hashicorp:main' into tiki_sqlvm_upgrade
tikicoder Jul 23, 2022
6338b0a
Merge branch 'tiki_sqlvm_upgrade' of github.com:tikicoder/terraform-p…
mbfrahry Oct 19, 2022
75859c4
Start of refactor
mbfrahry Oct 20, 2022
fe2028f
Finalize fixes
mbfrahry Oct 22, 2022
21ac7a3
Removed system_db_on_datadisk_enabled
mbfrahry Oct 22, 2022
1a75846
Fix tests
mbfrahry Oct 24, 2022
b7cbb2a
make terrafmt
katbyte Oct 24, 2022
a4552c8
Address review
mbfrahry Oct 24, 2022
b0fdd4d
Merge branch 'tikicoder-tiki_sqlvm_upgrade' of github.com:hashicorp/t…
mbfrahry Oct 24, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,52 @@ func StorageSettingSchema() *pluginsdk.Schema {
},
}
}

func SQLTempDBStorageSettingSchema() *pluginsdk.Schema {
return &pluginsdk.Schema{
Type: pluginsdk.TypeList,
Optional: true,
MaxItems: 1,
Elem: &pluginsdk.Resource{
Schema: map[string]*pluginsdk.Schema{
"data_file_count": {
Type: pluginsdk.TypeInt,
Optional: true,
Default: 8,
},
"data_file_size_mb": {
Type: pluginsdk.TypeInt,
Optional: true,
Default: 256,
},
"data_file_growth_in_mb": {
Type: pluginsdk.TypeInt,
Optional: true,
Default: 512,
},
"default_file_path": {
Type: pluginsdk.TypeString,
Required: true,
ValidateFunc: validation.StringIsNotEmpty,
},
"log_file_size_mb": {
Type: pluginsdk.TypeInt,
Optional: true,
Default: 256,
},
"log_file_growth_mb": {
Type: pluginsdk.TypeInt,
Optional: true,
Default: 512,
},
"luns": {
Type: pluginsdk.TypeList,
Required: true,
Elem: &pluginsdk.Schema{
Type: pluginsdk.TypeInt,
},
},
},
},
}
}
189 changes: 185 additions & 4 deletions internal/services/mssql/mssql_virtual_machine_resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"fmt"
"log"
"regexp"
"strings"
"time"

Expand Down Expand Up @@ -181,6 +182,61 @@ func resourceMsSqlVirtualMachine() *pluginsdk.Resource {
},
},

"assessment": {
Type: pluginsdk.TypeList,
Optional: true,
MaxItems: 1,
Elem: &pluginsdk.Resource{
Schema: map[string]*pluginsdk.Schema{
"enabled": {
Type: pluginsdk.TypeBool,
Optional: true,
Default: true,
},
"schedule": {
Type: pluginsdk.TypeList,
Optional: true,
MaxItems: 1,
Elem: &pluginsdk.Resource{
Schema: map[string]*pluginsdk.Schema{
"weekly_interval": {
Type: pluginsdk.TypeInt,
Optional: true,
ExactlyOneOf: []string{"assessment.0.schedule.0.monthly_occurrence"},
ValidateFunc: validation.IntBetween(1, 6),
},
"monthly_occurrence": {
Type: pluginsdk.TypeInt,
Optional: true,
ExactlyOneOf: []string{"assessment.0.schedule.0.weekly_interval"},
ValidateFunc: validation.IntBetween(1, 5),
},
"day_of_week": {
Type: pluginsdk.TypeString,
Required: true,
ValidateFunc: validation.StringInSlice(sqlvirtualmachines.PossibleValuesForAssessmentDayOfWeek(), false),
},
"start_time": {
Type: pluginsdk.TypeString,
Required: true,
ValidateFunc: validation.StringMatch(
regexp.MustCompile("^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$"),
"duration must match the format HH:mm",
),
},
},
},
},

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

"key_vault_credential": {
Type: pluginsdk.TypeList,
Optional: true,
Expand Down Expand Up @@ -285,7 +341,7 @@ func resourceMsSqlVirtualMachine() *pluginsdk.Resource {
},
"data_settings": helper.StorageSettingSchema(),
"log_settings": helper.StorageSettingSchema(),
"temp_db_settings": helper.StorageSettingSchema(),
"temp_db_settings": helper.SQLTempDBStorageSettingSchema(),
},
},
},
Expand Down Expand Up @@ -360,6 +416,7 @@ func resourceMsSqlVirtualMachineCreateUpdate(d *pluginsdk.ResourceData, meta int
Properties: &sqlvirtualmachines.SqlVirtualMachineProperties{
AutoBackupSettings: expandSqlVirtualMachineAutoBackupSettings(d.Get("auto_backup").([]interface{})),
AutoPatchingSettings: expandSqlVirtualMachineAutoPatchingSettings(d.Get("auto_patching").([]interface{})),
AssessmentSettings: expandSqlVirtualMachineAssessmentSettings(d.Get("assessment").([]interface{})),
KeyVaultCredentialSettings: expandSqlVirtualMachineKeyVaultCredential(d.Get("key_vault_credential").([]interface{})),
ServerConfigurationsManagementSettings: &sqlvirtualmachines.ServerConfigurationsManagementSettings{
AdditionalFeaturesServerConfigurations: &sqlvirtualmachines.AdditionalFeaturesServerConfigurations{
Expand Down Expand Up @@ -468,6 +525,10 @@ func resourceMsSqlVirtualMachineRead(d *pluginsdk.ResourceData, meta interface{}
return fmt.Errorf("setting `auto_patching`: %+v", err)
}

if err := d.Set("assessment", flattenSqlVirtualMachineAssessmentSettings(props.AssessmentSettings)); err != nil {
return fmt.Errorf("setting `assessment`: %+v", err)
}

if err := d.Set("key_vault_credential", flattenSqlVirtualMachineKeyVaultCredential(props.KeyVaultCredentialSettings, d)); err != nil {
return fmt.Errorf("setting `key_vault_credential`: %+v", err)
}
Expand Down Expand Up @@ -798,6 +859,101 @@ func flattenSqlVirtualMachineAutoPatching(autoPatching *sqlvirtualmachines.AutoP
}
}

func expandSqlVirtualMachineAssessmentSettings(input []interface{}) *sqlvirtualmachines.AssessmentSettings {
if len(input) == 0 {
return nil
}
assessmentSetting := input[0].(map[string]interface{})

return &sqlvirtualmachines.AssessmentSettings{
Enable: utils.Bool(true),
RunImmediately: utils.Bool(assessmentSetting["run_immediately"].(bool)),
Schedule: expandSqlVirtualMachineAssessmentSettingsSchedule(assessmentSetting["schedule"].([]interface{})),
}
}

func expandSqlVirtualMachineAssessmentSettingsSchedule(input []interface{}) *sqlvirtualmachines.Schedule {
if len(input) == 0 {
return &sqlvirtualmachines.Schedule{}
}

scheduleConfig := input[0].(map[string]interface{})

dayOfWeek := sqlvirtualmachines.AssessmentDayOfWeek(scheduleConfig["day_of_week"].(string))

schedule := &sqlvirtualmachines.Schedule{
Enable: utils.Bool(true),
DayOfWeek: &dayOfWeek,
StartTime: utils.String(scheduleConfig["start_time"].(string)),
}

if weeklyInterval := scheduleConfig["weekly_interval"].(int); weeklyInterval != 0 {
schedule.WeeklyInterval = utils.Int64(int64(weeklyInterval))
}

if monthlyOccurrence := scheduleConfig["monthly_occurrence"].(int); monthlyOccurrence != 0 {
schedule.MonthlyOccurrence = utils.Int64(int64(monthlyOccurrence))
}

return schedule
}

func flattenSqlVirtualMachineAssessmentSettings(assessmentSettings *sqlvirtualmachines.AssessmentSettings) []interface{} {
if assessmentSettings == nil || assessmentSettings.Enable == nil || !*assessmentSettings.Enable {
return []interface{}{}
}

var (
runImmediately bool
enabled bool
)
if assessmentSettings.RunImmediately != nil {
runImmediately = *assessmentSettings.RunImmediately
}

if assessmentSettings.Enable != nil {
enabled = *assessmentSettings.Enable
}

var attr map[string]interface{}
if schedule := assessmentSettings.Schedule; schedule != nil {
var (
weeklyInterval int64
monthlyOccurrence int64
dayOfWeek string
startTime string
)

if schedule.WeeklyInterval != nil {
weeklyInterval = *schedule.WeeklyInterval
}
if schedule.MonthlyOccurrence != nil {
monthlyOccurrence = *schedule.MonthlyOccurrence
}
if schedule.DayOfWeek != nil {
dayOfWeek = string(*schedule.DayOfWeek)
}
if schedule.StartTime != nil {
startTime = *schedule.StartTime
}

attr = map[string]interface{}{
"weekly_interval": weeklyInterval,
"monthly_occurrence": monthlyOccurrence,
"day_of_week": dayOfWeek,
"start_time": startTime,
}
}

return []interface{}{
map[string]interface{}{
"run_immediately": runImmediately,
"enabled": enabled,
"schedule": []interface{}{attr},
},
}
}

func expandSqlVirtualMachineKeyVaultCredential(input []interface{}) *sqlvirtualmachines.KeyVaultCredentialSettings {
if len(input) == 0 {
return nil
Expand Down Expand Up @@ -949,11 +1105,16 @@ func expandSqlVirtualMachineTempDbSettings(input []interface{}) *sqlvirtualmachi
if len(input) == 0 || input[0] == nil {
return nil
}
dataStorageSettings := input[0].(map[string]interface{})
tempDbSettings := input[0].(map[string]interface{})

return &sqlvirtualmachines.SQLTempDbSettings{
Luns: expandSqlVirtualMachineStorageSettingsLuns(dataStorageSettings["luns"].([]interface{})),
DefaultFilePath: utils.String(dataStorageSettings["default_file_path"].(string)),
Luns: expandSqlVirtualMachineStorageSettingsLuns(tempDbSettings["luns"].([]interface{})),
DefaultFilePath: utils.String(tempDbSettings["default_file_path"].(string)),
DataFileCount: utils.Int64(int64(tempDbSettings["data_file_count"].(int))),
DataFileSize: utils.Int64(int64(tempDbSettings["data_file_size_mb"].(int))),
DataGrowth: utils.Int64(int64(tempDbSettings["data_file_growth_in_mb"].(int))),
LogFileSize: utils.Int64(int64(tempDbSettings["log_file_size_mb"].(int))),
LogGrowth: utils.Int64(int64(tempDbSettings["log_file_growth_mb"].(int))),
}
}

Expand All @@ -967,9 +1128,29 @@ func flattenSqlVirtualMachineTempDbSettings(input *sqlvirtualmachines.SQLTempDbS
attrs["luns"] = *input.Luns
}

if input.DataFileCount != nil {
attrs["data_file_count"] = *input.DataFileCount
}

if input.DataFileSize != nil {
attrs["data_file_size_mb"] = *input.DataFileSize
}

if input.DataGrowth != nil {
attrs["data_file_growth_in_mb"] = *input.DataGrowth
}

if input.DefaultFilePath != nil {
attrs["default_file_path"] = *input.DefaultFilePath
}

if input.LogFileSize != nil {
attrs["log_file_size_mb"] = *input.LogFileSize
}

if input.LogGrowth != nil {
attrs["log_file_growth_mb"] = *input.LogGrowth
}

return []interface{}{attrs}
}
61 changes: 61 additions & 0 deletions internal/services/mssql/mssql_virtual_machine_resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,28 @@ func TestAccMsSqlVirtualMachine_storageConfiguration(t *testing.T) {
})
}

func TestAccMsSqlVirtualMachine_assessmentSettings(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_mssql_virtual_machine", "test")
r := MsSqlVirtualMachineResource{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.assessmentSettingsWeekly(data),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
data.ImportStep(),
{
Config: r.assessmentSettingsMonthly(data),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
data.ImportStep(),
})
}

func (MsSqlVirtualMachineResource) Exists(ctx context.Context, client *clients.Client, state *pluginsdk.InstanceState) (*bool, error) {
id, err := sqlvirtualmachines.ParseSqlVirtualMachineID(state.ID)
if err != nil {
Expand Down Expand Up @@ -650,6 +672,7 @@ resource "azurerm_mssql_virtual_machine" "test" {
temp_db_settings {
luns = [0]
default_file_path = "F:\\SQLTemp"
log_file_size_mb = 512
}
}
}
Expand Down Expand Up @@ -682,3 +705,41 @@ resource "azurerm_mssql_virtual_machine" "test" {
}
`, r.template(data), data.RandomInteger)
}

func (r MsSqlVirtualMachineResource) assessmentSettingsWeekly(data acceptance.TestData) string {
return fmt.Sprintf(`
%[1]s

resource "azurerm_mssql_virtual_machine" "test" {
virtual_machine_id = azurerm_virtual_machine.test.id
sql_license_type = "PAYG"

assessment {
schedule {
day_of_week = "Monday"
weekly_interval = 1
start_time = "00:00"
}
}
}
`, r.template(data))
}

func (r MsSqlVirtualMachineResource) assessmentSettingsMonthly(data acceptance.TestData) string {
return fmt.Sprintf(`
%[1]s

resource "azurerm_mssql_virtual_machine" "test" {
virtual_machine_id = azurerm_virtual_machine.test.id
sql_license_type = "PAYG"

assessment {
schedule {
day_of_week = "Tuesday"
monthly_occurrence = 3
start_time = "01:02"
}
}
}
`, r.template(data))
}
Loading