diff options
| author | xuzhang3 <57888764+xuzhang3@users.noreply.github.com> | 2022-10-13 16:22:34 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-13 16:22:34 +0800 |
| commit | af8a17a0331a65eefb318c29e41cd78eaf6e0dbc (patch) | |
| tree | 37cf1f2cd5737b1ff9ac1af7b6b5ba6b45e4af47 /azuredevops | |
| parent | 9700b38be4588d2f3c2a301e69bc44c38b18d4f4 (diff) | |
| parent | fa9f072896f07224af431347d4f5d44465f1de7b (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.go | 65 |
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{}) |
