-
Notifications
You must be signed in to change notification settings - Fork 66
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: implemented extension settings
- Loading branch information
Showing
6 changed files
with
389 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |
Oops, something went wrong.