Skip to content

Commit

Permalink
feat: implemented extension settings
Browse files Browse the repository at this point in the history
  • Loading branch information
jbristowe committed Dec 2, 2022
1 parent 7a6397b commit b317372
Show file tree
Hide file tree
Showing 6 changed files with 389 additions and 48 deletions.
128 changes: 128 additions & 0 deletions internal/environments/extension_settings.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
package environments

import (
"fmt"

"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/environments"
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/extensions"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
)

func ExpandJiraExtensionSettings(extensionSettings interface{}) extensions.ExtensionSettings {
values := extensionSettings.([]interface{})
valuesMap := values[0].(map[string]interface{})
return environments.NewJiraExtensionSettings(
valuesMap["environment_type"].(string),
)
}

func ExpandJiraServiceManagementExtensionSettings(extensionSettings interface{}) extensions.ExtensionSettings {
values := extensionSettings.([]interface{})
valuesMap := values[0].(map[string]interface{})
return environments.NewJiraServiceManagementExtensionSettings(
valuesMap["is_enabled"].(bool),
)
}

func ExpandServiceNowExtensionSettings(extensionSettings interface{}) extensions.ExtensionSettings {
values := extensionSettings.([]interface{})
valuesMap := values[0].(map[string]interface{})
return environments.NewServiceNowExtensionSettings(
valuesMap["is_enabled"].(bool),
)
}

func GetJiraExtensionSettingsSchema() map[string]*schema.Schema {
return map[string]*schema.Schema{
"environment_type": {
Description: "The Jira environment type of this Octopus deployment environment.",
Required: true,
Type: schema.TypeString,
ValidateDiagFunc: validation.ToDiagFunc(validation.StringInSlice([]string{
"development",
"production",
"staging",
"testing",
"unmapped",
}, false)),
},
}
}

func GetJiraServiceManagementExtensionSettingsSchema() map[string]*schema.Schema {
return map[string]*schema.Schema{
"is_enabled": {
Description: "Specifies whether or not this extension is enabled for this project.",
Required: true,
Type: schema.TypeBool,
},
}
}

func GetServiceNowExtensionSettingsSchema() map[string]*schema.Schema {
return map[string]*schema.Schema{
"is_enabled": {
Description: "Specifies whether or not this extension is enabled for this project.",
Required: true,
Type: schema.TypeBool,
},
}
}

func SetExtensionSettings(d *schema.ResourceData, extensionSettingsCollection []extensions.ExtensionSettings) error {
for _, extensionSettings := range extensionSettingsCollection {
switch extensionSettings.ExtensionID() {
case extensions.ExtensionIDJira:
if jiraExtensionSettings, ok := extensionSettings.(*environments.JiraExtensionSettings); ok {
if err := d.Set("jira_extension_settings", FlattenJiraExtensionSettings(jiraExtensionSettings)); err != nil {
return fmt.Errorf("error setting extension settings for Jira: %s", err)
}
}
case extensions.ExtensionIDJiraServiceManagement:
if jiraServiceManagementExtensionSettings, ok := extensionSettings.(*environments.JiraServiceManagementExtensionSettings); ok {
if err := d.Set("jira_service_management_extension_settings", FlattenJiraServiceManagementExtensionSettings(jiraServiceManagementExtensionSettings)); err != nil {
return fmt.Errorf("error setting extension settings for Jira Service Management (JSM): %s", err)
}
}
case extensions.ExtensionIDServiceNow:
if serviceNowExtensionSettings, ok := extensionSettings.(*environments.ServiceNowExtensionSettings); ok {
if err := d.Set("servicenow_extension_settings", FlattenServiceNowExtensionSettings(serviceNowExtensionSettings)); err != nil {
return fmt.Errorf("error setting extension settings for ServiceNow: %s", err)
}
}
}
}

return nil
}

func FlattenJiraExtensionSettings(jiraExtensionSettings *environments.JiraExtensionSettings) []interface{} {
if jiraExtensionSettings == nil {
return nil
}

flattenedJiraExtensionSettings := make(map[string]interface{})
flattenedJiraExtensionSettings["environment_type"] = jiraExtensionSettings.JiraEnvironmentType
return []interface{}{flattenedJiraExtensionSettings}
}

func FlattenJiraServiceManagementExtensionSettings(jiraServiceManagementExtensionSettings *environments.JiraServiceManagementExtensionSettings) []interface{} {
if jiraServiceManagementExtensionSettings == nil {
return nil
}

flattenedJiraServiceManagementExtensionSettings := make(map[string]interface{})
flattenedJiraServiceManagementExtensionSettings["is_enabled"] = jiraServiceManagementExtensionSettings.IsChangeControlled()
return []interface{}{flattenedJiraServiceManagementExtensionSettings}
}

func FlattenServiceNowExtensionSettings(serviceNowExtensionSettings *environments.ServiceNowExtensionSettings) []interface{} {
if serviceNowExtensionSettings == nil {
return nil
}

flattenedServiceNowExtensionSettings := make(map[string]interface{})
flattenedServiceNowExtensionSettings["is_enabled"] = serviceNowExtensionSettings.IsChangeControlled()
return []interface{}{flattenedServiceNowExtensionSettings}
}
126 changes: 126 additions & 0 deletions internal/projects/extension_settings.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
package projects

import (
"fmt"

"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/extensions"
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/projects"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
)

func ExpandJiraServiceManagementExtensionSettings(extensionSettings interface{}) extensions.ExtensionSettings {
values := extensionSettings.([]interface{})
valuesMap := values[0].(map[string]interface{})
return projects.NewJiraServiceManagementExtensionSettings(
valuesMap["connection_id"].(string),
valuesMap["is_enabled"].(bool),
valuesMap["service_desk_project_name"].(string),
)
}

func ExpandServiceNowExtensionSettings(extensionSettings interface{}) extensions.ExtensionSettings {
values := extensionSettings.([]interface{})
valuesMap := values[0].(map[string]interface{})
return projects.NewServiceNowExtensionSettings(
valuesMap["connection_id"].(string),
valuesMap["is_enabled"].(bool),
valuesMap["standard_change_template_name"].(string),
valuesMap["is_state_automatically_transitioned"].(bool),
)
}

func FlattenJiraServiceManagementExtensionSettings(jiraServiceManagementExtensionSettings *projects.JiraServiceManagementExtensionSettings) []interface{} {
if jiraServiceManagementExtensionSettings == nil {
return nil
}

flattenedJiraServiceManagementExtensionSettings := make(map[string]interface{})
flattenedJiraServiceManagementExtensionSettings["connection_id"] = jiraServiceManagementExtensionSettings.ConnectionID()
flattenedJiraServiceManagementExtensionSettings["is_enabled"] = jiraServiceManagementExtensionSettings.IsChangeControlled()
flattenedJiraServiceManagementExtensionSettings["service_desk_project_name"] = jiraServiceManagementExtensionSettings.ServiceDeskProjectName
return []interface{}{flattenedJiraServiceManagementExtensionSettings}
}

func FlattenServiceNowExtensionSettings(serviceNowExtensionSettings *projects.ServiceNowExtensionSettings) []interface{} {
if serviceNowExtensionSettings == nil {
return nil
}

flattenedServiceNowExtensionSettings := make(map[string]interface{})
flattenedServiceNowExtensionSettings["connection_id"] = serviceNowExtensionSettings.ConnectionID()
flattenedServiceNowExtensionSettings["is_enabled"] = serviceNowExtensionSettings.IsChangeControlled()
flattenedServiceNowExtensionSettings["is_state_automatically_transitioned"] = serviceNowExtensionSettings.IsStateAutomaticallyTransitioned
flattenedServiceNowExtensionSettings["standard_change_template_name"] = serviceNowExtensionSettings.StandardChangeTemplateName
return []interface{}{flattenedServiceNowExtensionSettings}
}

func GetJiraServiceManagementExtensionSettingsSchema() map[string]*schema.Schema {
return map[string]*schema.Schema{
"connection_id": {
Description: "The connection identifier associated with the extension settings.",
Required: true,
Type: schema.TypeString,
ValidateDiagFunc: validation.ToDiagFunc(validation.StringIsNotWhiteSpace),
},
"is_enabled": {
Description: "Specifies whether or not this extension is enabled for this project.",
Required: true,
Type: schema.TypeBool,
},
"service_desk_project_name": {
Description: "The project name associated with this extension.",
Required: true,
Type: schema.TypeString,
ValidateDiagFunc: validation.ToDiagFunc(validation.StringIsNotWhiteSpace),
},
}
}

func GetServiceNowExtensionSettingsSchema() map[string]*schema.Schema {
return map[string]*schema.Schema{
"connection_id": {
Description: "The connection identifier associated with the extension settings.",
Required: true,
Type: schema.TypeString,
ValidateDiagFunc: validation.ToDiagFunc(validation.StringIsNotWhiteSpace),
},
"is_enabled": {
Description: "Specifies whether or not this extension is enabled for this project.",
Required: true,
Type: schema.TypeBool,
},
"is_state_automatically_transitioned": {
Description: "Specifies whether or not this extension will automatically transition the state of a deployment for this project.",
Required: true,
Type: schema.TypeBool,
},
"standard_change_template_name": {
Description: "The name of the standard change template associated with this extension.",
Required: true,
Type: schema.TypeString,
ValidateDiagFunc: validation.ToDiagFunc(validation.StringIsNotWhiteSpace),
},
}
}

func SetExtensionSettings(d *schema.ResourceData, extensionSettingsCollection []extensions.ExtensionSettings) error {
for _, extensionSettings := range extensionSettingsCollection {
switch extensionSettings.ExtensionID() {
case extensions.ExtensionIDJiraServiceManagement:
if jiraServiceManagementExtensionSettings, ok := extensionSettings.(*projects.JiraServiceManagementExtensionSettings); ok {
if err := d.Set("jira_service_management_extension_settings", FlattenJiraServiceManagementExtensionSettings(jiraServiceManagementExtensionSettings)); err != nil {
return fmt.Errorf("error setting extension settings for Jira Service Management (JSM): %s", err)
}
}
case extensions.ExtensionIDServiceNow:
if serviceNowExtensionSettings, ok := extensionSettings.(*projects.ServiceNowExtensionSettings); ok {
if err := d.Set("servicenow_extension_settings", FlattenServiceNowExtensionSettings(serviceNowExtensionSettings)); err != nil {
return fmt.Errorf("error setting extension settings for ServiceNow: %s", err)
}
}
}
}

return nil
}

0 comments on commit b317372

Please sign in to comment.