summaryrefslogtreecommitdiff
path: root/azuredevops
diff options
context:
space:
mode:
authorxuzhang3 <57888764+xuzhang3@users.noreply.github.com>2022-10-13 16:22:34 +0800
committerGitHub <noreply@github.com>2022-10-13 16:22:34 +0800
commitaf8a17a0331a65eefb318c29e41cd78eaf6e0dbc (patch)
tree37cf1f2cd5737b1ff9ac1af7b6b5ba6b45e4af47 /azuredevops
parent9700b38be4588d2f3c2a301e69bc44c38b18d4f4 (diff)
parentfa9f072896f07224af431347d4f5d44465f1de7b (diff)
Merge pull request #626 from wwmoraes/main
fix: flatten project falls back to organization default template ID
Diffstat (limited to 'azuredevops')
-rw-r--r--azuredevops/internal/service/core/resource_project.go65
1 files changed, 56 insertions, 9 deletions
diff --git a/azuredevops/internal/service/core/resource_project.go b/azuredevops/internal/service/core/resource_project.go
index 97b8cc3e..4d796034 100644
--- a/azuredevops/internal/service/core/resource_project.go
+++ b/azuredevops/internal/service/core/resource_project.go
@@ -78,7 +78,6 @@ func ResourceProject() *schema.Resource {
Type: schema.TypeString,
ForceNew: true,
Optional: true,
- ValidateFunc: validation.StringIsNotWhiteSpace,
DiffSuppressFunc: suppress.CaseDifference,
Default: "Agile",
},
@@ -416,10 +415,20 @@ func deleteProject(clients *client.AggregatedClient, id string, timeoutSeconds t
// Convert internal Terraform data structure to an AzDO data structure
func expandProject(clients *client.AggregatedClient, d *schema.ResourceData, forCreate bool) (*core.TeamProject, error) {
- workItemTemplate := d.Get("work_item_template").(string)
- processTemplateID, err := lookupProcessTemplateID(clients, workItemTemplate)
- if err != nil {
- return nil, err
+ var processTemplateID string
+ var err error
+ workItemTemplate := strings.TrimSpace(d.Get("work_item_template").(string))
+ if len(workItemTemplate) > 0 {
+ processTemplateID, err = lookupProcessTemplateID(clients, workItemTemplate)
+ if err != nil {
+ return nil, err
+ }
+ } else { // use the organization default template if an empty string is set
+ processTemplateUUID, err := getDefaultProcessTemplateID(clients)
+ if err != nil {
+ return nil, err
+ }
+ processTemplateID = processTemplateUUID.String()
}
// an "error" is OK here as it is expected in the case that the ID is not set in the resource data
@@ -455,11 +464,19 @@ func expandProject(clients *client.AggregatedClient, d *schema.ResourceData, for
}
func flattenProject(clients *client.AggregatedClient, d *schema.ResourceData, project *core.TeamProject) error {
+ var err error
+ processTemplateName := ""
processTemplateID := (*project.Capabilities)["processTemplate"]["templateTypeId"]
- processTemplateName, err := lookupProcessTemplateName(clients, processTemplateID)
-
- if err != nil {
- return err
+ if len(processTemplateID) > 0 {
+ processTemplateName, err = lookupProcessTemplateName(clients, processTemplateID)
+ if err != nil {
+ return err
+ }
+ } else { // fallback to the organization default process
+ processTemplateName, err = getDefaultProcessTemplateName(clients)
+ if err != nil {
+ return err
+ }
}
var currentFeatureStates *map[ProjectFeatureType]featuremanagement.ContributedFeatureEnabledValue
@@ -485,6 +502,36 @@ func flattenProject(clients *client.AggregatedClient, d *schema.ResourceData, pr
return nil
}
+func getDefaultProcessTemplateID(clients *client.AggregatedClient) (*uuid.UUID, error) {
+ processes, err := clients.CoreClient.GetProcesses(clients.Ctx, core.GetProcessesArgs{})
+ if err != nil {
+ return nil, err
+ }
+
+ for _, p := range *processes {
+ if *p.IsDefault == true {
+ return p.Id, nil
+ }
+ }
+
+ return nil, fmt.Errorf("No default process template found")
+}
+
+func getDefaultProcessTemplateName(clients *client.AggregatedClient) (string, error) {
+ processes, err := clients.CoreClient.GetProcesses(clients.Ctx, core.GetProcessesArgs{})
+ if err != nil {
+ return "", err
+ }
+
+ for _, p := range *processes {
+ if *p.IsDefault == true {
+ return *p.Name, nil
+ }
+ }
+
+ return "", fmt.Errorf("No default process template found")
+}
+
// given a process template name, get the process template ID
func lookupProcessTemplateID(clients *client.AggregatedClient, templateName string) (string, error) {
processes, err := clients.CoreClient.GetProcesses(clients.Ctx, core.GetProcessesArgs{})