diff --git a/.changelog/999.txt b/.changelog/999.txt new file mode 100644 index 000000000..52a37e4fc --- /dev/null +++ b/.changelog/999.txt @@ -0,0 +1,3 @@ +```release-note:new-resource +harness_platform_pipeline: Added the branch context when imported the pipeline from non main branch +``` \ No newline at end of file diff --git a/examples/resources/harness_platform_pipeline/import.sh b/examples/resources/harness_platform_pipeline/import.sh index 8f27b5b7c..720c8cb8b 100644 --- a/examples/resources/harness_platform_pipeline/import.sh +++ b/examples/resources/harness_platform_pipeline/import.sh @@ -1,2 +1,5 @@ -# Import pipeline +# Import pipeline from default branch terraform import harness_platform_pipeline.example // + +# Import pipeline from non default branch +terraform import harness_platform_pipeline.example /// diff --git a/helpers/schema.go b/helpers/schema.go index 19f9f0c14..26c9b72df 100644 --- a/helpers/schema.go +++ b/helpers/schema.go @@ -359,6 +359,7 @@ var UserResourceImporter = &schema.ResourceImporter{ // ProjectResourceImporter defines the importer configuration for all project level resources. // The id used for the import should be in the format // +// The id used for the import should be in the format /// var ProjectResourceImporter = &schema.ResourceImporter{ State: func(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") @@ -367,6 +368,10 @@ var ProjectResourceImporter = &schema.ResourceImporter{ d.Set("identifier", parts[2]) d.SetId(parts[2]) + if len(parts) == 4 { + d.Set("git_details", []interface{}{map[string]interface{}{"branch_name": parts[3]}}) + } + return []*schema.ResourceData{d}, nil }, } diff --git a/internal/acctest/acctest.go b/internal/acctest/acctest.go index 35a54f0ed..f1c4cbdae 100644 --- a/internal/acctest/acctest.go +++ b/internal/acctest/acctest.go @@ -179,6 +179,17 @@ func ProjectResourceImportStateIdFunc(resourceName string) resource.ImportStateI } } +func ProjectResourceImportStateIdGitFunc(resourceName string) resource.ImportStateIdFunc { + return func(s *terraform.State) (string, error) { + primary := s.RootModule().Resources[resourceName].Primary + id := primary.ID + orgId := primary.Attributes["org_id"] + projId := primary.Attributes["project_id"] + branch_name := primary.Attributes["git_details.0.branch_name"] + return fmt.Sprintf("%s/%s/%s/%s", orgId, projId, id, branch_name), nil + } +} + func UserResourceImportStateIdFunc(resourceName string) resource.ImportStateIdFunc { return func(s *terraform.State) (string, error) { primary := s.RootModule().Resources[resourceName].Primary diff --git a/internal/service/platform/pipeline/resource_pipeline.go b/internal/service/platform/pipeline/resource_pipeline.go index e129439ad..9753ccca5 100644 --- a/internal/service/platform/pipeline/resource_pipeline.go +++ b/internal/service/platform/pipeline/resource_pipeline.go @@ -226,8 +226,8 @@ func resourcePipelineCreateOrUpdate(ctx context.Context, d *schema.ResourceData, if id == "" { if d.Get("import_from_git").(bool) { pipeline_id = d.Get("identifier").(string) - pipeline_import_request_body := createImportFromGitRequest(d) + branch_name = pipeline_import_request_body.GitImportInfo.BranchName _, httpResp, err = c.PipelinesApi.ImportPipelineFromGit(ctx, org_id, project_id, pipeline_id, &nextgen.PipelinesApiImportPipelineFromGitOpts{ diff --git a/internal/service/platform/pipeline/resource_pipeline_test.go b/internal/service/platform/pipeline/resource_pipeline_test.go index 6f2576ffc..e2804d0be 100644 --- a/internal/service/platform/pipeline/resource_pipeline_test.go +++ b/internal/service/platform/pipeline/resource_pipeline_test.go @@ -21,7 +21,7 @@ func TestAccResourcePipeline(t *testing.T) { resourceName := "harness_platform_pipeline.test" - resource.UnitTest(t, resource.TestCase{ + resource.UnitTest(t, resource.TestCase{ PreCheck: func() { acctest.TestAccPreCheck(t) }, ProviderFactories: acctest.ProviderFactories, CheckDestroy: testAccPipelineDestroy(resourceName), @@ -109,7 +109,7 @@ func TestAccResourcePipelineImportFromGit(t *testing.T) { ResourceName: resourceName, ImportState: true, ImportStateVerify: true, - ImportStateIdFunc: acctest.ProjectResourceImportStateIdFunc(resourceName), + ImportStateIdFunc: acctest.ProjectResourceImportStateIdGitFunc(resourceName), ImportStateVerifyIgnore: []string{"git_import_info.0.branch_name", "git_import_info.0.connector_ref", "git_import_info.0.file_path", "git_import_info.0.repo_name", "import_from_git", "pipeline_import_request.0.pipeline_description", "pipeline_import_request.0.pipeline_name", "git_import_info.#", "git_import_info.0.%", "pipeline_import_request.#", "pipeline_import_request.0.%"}, }, }, @@ -155,8 +155,9 @@ func testAccGetPipeline(resourceName string, state *terraform.State) (*openapi_c id := r.Primary.ID orgId := r.Primary.Attributes["org_id"] projId := r.Primary.Attributes["project_id"] + branch_name := r.Primary.Attributes["git_details.0.branch_name"] - resp, _, err := c.PipelinesApi.GetPipeline(ctx, orgId, projId, id, &openapi_client_nextgen.PipelinesApiGetPipelineOpts{HarnessAccount: optional.NewString(c.AccountId)}) + resp, _, err := c.PipelinesApi.GetPipeline(ctx, orgId, projId, id, &openapi_client_nextgen.PipelinesApiGetPipelineOpts{HarnessAccount: optional.NewString(c.AccountId), BranchName: optional.NewString(branch_name)}) if err != nil { return nil, err }