From 2adecb7daf4ba2414dfbbc5771a6475e9800ae7f Mon Sep 17 00:00:00 2001 From: Zhenya Tikhonov Date: Wed, 19 Mar 2025 18:13:11 +0400 Subject: [PATCH 1/5] fix(resource/pipeline): fix `permit_restart_from_failed_steps` to JSON `permit_restart_from_failed_steps` property of pipeline spec behaves differently when omit vs set to `false`. This means we should not omit `false` value while sending requests to API. Fixes #CR-26963 --- codefresh/cfclient/pipeline.go | 2 +- codefresh/data_current_account_user.go | 1 - codefresh/resource_pipeline.go | 6 +++++- codefresh/resource_pipeline_test.go | 8 ++++---- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/codefresh/cfclient/pipeline.go b/codefresh/cfclient/pipeline.go index dba6f11e..f4f71a70 100644 --- a/codefresh/cfclient/pipeline.go +++ b/codefresh/cfclient/pipeline.go @@ -133,7 +133,7 @@ type Spec struct { RequiredAvailableStorage string `json:"requiredAvailableStorage,omitempty"` Hooks *Hooks `json:"hooks,omitempty"` Options map[string]bool `json:"options,omitempty"` - PermitRestartFromFailedSteps bool `json:"permitRestartFromFailedSteps,omitempty"` + PermitRestartFromFailedSteps *bool `json:"permitRestartFromFailedSteps,omitempty"` ExternalResources []ExternalResource `json:"externalResources,omitempty"` } diff --git a/codefresh/data_current_account_user.go b/codefresh/data_current_account_user.go index 93b516ef..ba8b3b6f 100644 --- a/codefresh/data_current_account_user.go +++ b/codefresh/data_current_account_user.go @@ -68,7 +68,6 @@ func mapDataCurrentAccountUserToResource(currentAccount *cfclient.CurrentAccount isFound := false - for _, user := range currentAccount.Users { if (userAttributeName == "name" && user.UserName == userAttributeValue) || (userAttributeName == "email" && user.Email == userAttributeValue) { isFound = true diff --git a/codefresh/resource_pipeline.go b/codefresh/resource_pipeline.go index eadcb582..06398317 100644 --- a/codefresh/resource_pipeline.go +++ b/codefresh/resource_pipeline.go @@ -17,6 +17,10 @@ import ( var terminationPolicyOnCreateBranchAttributes = []string{"branchName", "ignoreTrigger", "ignoreBranch"} +func ptrBool(b bool) *bool { + return &b +} + func resourcePipeline() *schema.Resource { return &schema.Resource{ Description: "The central component of the Codefresh Platform. Pipelines are workflows that contain individual steps. Each step is responsible for a specific action in the process.", @@ -1090,7 +1094,7 @@ func mapResourceToPipeline(d *schema.ResourceData) (*cfclient.Pipeline, error) { Concurrency: d.Get("spec.0.concurrency").(int), BranchConcurrency: d.Get("spec.0.branch_concurrency").(int), TriggerConcurrency: d.Get("spec.0.trigger_concurrency").(int), - PermitRestartFromFailedSteps: d.Get("spec.0.permit_restart_from_failed_steps").(bool), + PermitRestartFromFailedSteps: ptrBool(d.Get("spec.0.permit_restart_from_failed_steps").(bool)), }, } diff --git a/codefresh/resource_pipeline_test.go b/codefresh/resource_pipeline_test.go index d3f50493..488dc923 100644 --- a/codefresh/resource_pipeline_test.go +++ b/codefresh/resource_pipeline_test.go @@ -90,7 +90,7 @@ func TestAccCodefreshPipeline_PremitRestartFromFailedSteps(t *testing.T) { CheckDestroy: testAccCheckCodefreshPipelineDestroy, Steps: []resource.TestStep{ { - Config: testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(name, "codefresh-contrib/react-sample-app", "./codefresh.yml", "master", "git", true), + Config: testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(name, "codefresh-contrib/react-sample-app", "./codefresh.yml", "master", "git", ptrBool(true)), Check: resource.ComposeTestCheckFunc( testAccCheckCodefreshPipelineExists(resourceName, &pipeline), resource.TestCheckResourceAttr(resourceName, "spec.0.permit_restart_from_failed_steps", "true"), @@ -102,7 +102,7 @@ func TestAccCodefreshPipeline_PremitRestartFromFailedSteps(t *testing.T) { ImportStateVerify: true, }, { - Config: testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(name, "codefresh-contrib/react-sample-app", "./codefresh.yml", "master", "git", false), + Config: testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(name, "codefresh-contrib/react-sample-app", "./codefresh.yml", "master", "git", ptrBool(false)), Check: resource.ComposeTestCheckFunc( testAccCheckCodefreshPipelineExists(resourceName, &pipeline), resource.TestCheckResourceAttr(resourceName, "spec.0.permit_restart_from_failed_steps", "false"), @@ -1070,7 +1070,7 @@ resource "codefresh_pipeline" "test" { `, rName, repo, path, revision, context, concurrency, concurrencyBranch, concurrencyTrigger) } -func testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(rName string, repo string, path string, revision string, context string, permitRestartFromFailedSteps bool) string { +func testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(rName string, repo string, path string, revision string, context string, permitRestartFromFailedSteps *bool) string { return fmt.Sprintf(` resource "codefresh_pipeline" "test" { @@ -1094,7 +1094,7 @@ resource "codefresh_pipeline" "test" { } } -`, rName, repo, path, revision, context, permitRestartFromFailedSteps) +`, rName, repo, path, revision, context, *permitRestartFromFailedSteps) } func testAccCodefreshPipelineBasicConfigTriggers( From 9ff56b209e4c1f6af81850b5bbbe7f41ed8e5874 Mon Sep 17 00:00:00 2001 From: Zhenya Tikhonov Date: Thu, 3 Apr 2025 18:16:11 +0400 Subject: [PATCH 2/5] fix: use ENUM for `permit_restart_from_failed_steps` --- codefresh/resource_pipeline.go | 49 ++++++++++++++++++++++------- codefresh/resource_pipeline_test.go | 26 ++++++++++----- 2 files changed, 56 insertions(+), 19 deletions(-) diff --git a/codefresh/resource_pipeline.go b/codefresh/resource_pipeline.go index 06398317..d0d042e1 100644 --- a/codefresh/resource_pipeline.go +++ b/codefresh/resource_pipeline.go @@ -17,6 +17,12 @@ import ( var terminationPolicyOnCreateBranchAttributes = []string{"branchName", "ignoreTrigger", "ignoreBranch"} +const ( + PermitRestartPermit = "permit" + PermitRestartForbid = "forbid" + PermitRestartUseAccountSettings = "use-account-settings" +) + func ptrBool(b bool) *bool { return &b } @@ -106,10 +112,11 @@ Or: original_yaml_string = file("/path/to/my/codefresh.yml") Default: 0, }, "permit_restart_from_failed_steps": { - Description: "Defines whether it is permitted to restart builds in this pipeline from failed step. Defaults to true", - Type: schema.TypeBool, - Optional: true, - Default: true, + Description: "Defines whether it is permitted to restart builds in this pipeline from failed step. Allowed values: 'permit'|'forbid'|'use-account-settings' (default: `use-account-settings`).", + Type: schema.TypeString, + Optional: true, + ValidateFunc: validation.StringInSlice([]string{PermitRestartPermit, PermitRestartForbid, PermitRestartUseAccountSettings}, false), + Default: PermitRestartUseAccountSettings, }, "spec_template": { Description: "The pipeline's spec template.", @@ -919,7 +926,14 @@ func flattenSpec(spec cfclient.Spec) []map[string]interface{} { m["concurrency"] = spec.Concurrency m["branch_concurrency"] = spec.BranchConcurrency m["trigger_concurrency"] = spec.TriggerConcurrency - m["permit_restart_from_failed_steps"] = spec.PermitRestartFromFailedSteps + + if spec.PermitRestartFromFailedSteps == nil { + m["permit_restart_from_failed_steps"] = PermitRestartUseAccountSettings + } else if *spec.PermitRestartFromFailedSteps { + m["permit_restart_from_failed_steps"] = PermitRestartPermit + } else { + m["permit_restart_from_failed_steps"] = PermitRestartForbid + } m["priority"] = spec.Priority @@ -1088,16 +1102,27 @@ func mapResourceToPipeline(d *schema.ResourceData) (*cfclient.Pipeline, error) { OriginalYamlString: originalYamlString, }, Spec: cfclient.Spec{ - PackId: d.Get("spec.0.pack_id").(string), - RequiredAvailableStorage: d.Get("spec.0.required_available_storage").(string), - Priority: d.Get("spec.0.priority").(int), - Concurrency: d.Get("spec.0.concurrency").(int), - BranchConcurrency: d.Get("spec.0.branch_concurrency").(int), - TriggerConcurrency: d.Get("spec.0.trigger_concurrency").(int), - PermitRestartFromFailedSteps: ptrBool(d.Get("spec.0.permit_restart_from_failed_steps").(bool)), + PackId: d.Get("spec.0.pack_id").(string), + RequiredAvailableStorage: d.Get("spec.0.required_available_storage").(string), + Priority: d.Get("spec.0.priority").(int), + Concurrency: d.Get("spec.0.concurrency").(int), + BranchConcurrency: d.Get("spec.0.branch_concurrency").(int), + TriggerConcurrency: d.Get("spec.0.trigger_concurrency").(int), }, } + if hasPermitRestartChanged := d.HasChange("spec.0.permit_restart_from_failed_steps"); hasPermitRestartChanged { + permitRestart := d.Get("spec.0.permit_restart_from_failed_steps").(string) + switch permitRestart { + case PermitRestartPermit: + pipeline.Spec.PermitRestartFromFailedSteps = ptrBool(true) + case PermitRestartForbid: + pipeline.Spec.PermitRestartFromFailedSteps = ptrBool(false) + default: + pipeline.Spec.PermitRestartFromFailedSteps = nil + } + } + if _, ok := d.GetOk("spec.0.spec_template"); ok { pipeline.Spec.SpecTemplate = &cfclient.SpecTemplate{ Location: d.Get("spec.0.spec_template.0.location").(string), diff --git a/codefresh/resource_pipeline_test.go b/codefresh/resource_pipeline_test.go index 488dc923..7cd9819b 100644 --- a/codefresh/resource_pipeline_test.go +++ b/codefresh/resource_pipeline_test.go @@ -90,10 +90,10 @@ func TestAccCodefreshPipeline_PremitRestartFromFailedSteps(t *testing.T) { CheckDestroy: testAccCheckCodefreshPipelineDestroy, Steps: []resource.TestStep{ { - Config: testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(name, "codefresh-contrib/react-sample-app", "./codefresh.yml", "master", "git", ptrBool(true)), + Config: testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(name, "codefresh-contrib/react-sample-app", "./codefresh.yml", "master", "git", PermitRestartPermit), Check: resource.ComposeTestCheckFunc( testAccCheckCodefreshPipelineExists(resourceName, &pipeline), - resource.TestCheckResourceAttr(resourceName, "spec.0.permit_restart_from_failed_steps", "true"), + resource.TestCheckResourceAttr(resourceName, "spec.0.permit_restart_from_failed_steps", PermitRestartPermit), ), }, { @@ -102,10 +102,22 @@ func TestAccCodefreshPipeline_PremitRestartFromFailedSteps(t *testing.T) { ImportStateVerify: true, }, { - Config: testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(name, "codefresh-contrib/react-sample-app", "./codefresh.yml", "master", "git", ptrBool(false)), + Config: testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(name, "codefresh-contrib/react-sample-app", "./codefresh.yml", "master", "git", PermitRestartForbid), Check: resource.ComposeTestCheckFunc( testAccCheckCodefreshPipelineExists(resourceName, &pipeline), - resource.TestCheckResourceAttr(resourceName, "spec.0.permit_restart_from_failed_steps", "false"), + resource.TestCheckResourceAttr(resourceName, "spec.0.permit_restart_from_failed_steps", PermitRestartForbid), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + { + Config: testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(name, "codefresh-contrib/react-sample-app", "./codefresh.yml", "master", "git", PermitRestartUseAccountSettings), + Check: resource.ComposeTestCheckFunc( + testAccCheckCodefreshPipelineExists(resourceName, &pipeline), + resource.TestCheckResourceAttr(resourceName, "spec.0.permit_restart_from_failed_steps", PermitRestartUseAccountSettings), ), }, }, @@ -1070,7 +1082,7 @@ resource "codefresh_pipeline" "test" { `, rName, repo, path, revision, context, concurrency, concurrencyBranch, concurrencyTrigger) } -func testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(rName string, repo string, path string, revision string, context string, permitRestartFromFailedSteps *bool) string { +func testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(rName string, repo string, path string, revision string, context string, permitRestartFromFailedSteps string) string { return fmt.Sprintf(` resource "codefresh_pipeline" "test" { @@ -1090,11 +1102,11 @@ resource "codefresh_pipeline" "test" { context = %q } - permit_restart_from_failed_steps = %t + permit_restart_from_failed_steps = %s } } -`, rName, repo, path, revision, context, *permitRestartFromFailedSteps) +`, rName, repo, path, revision, context, permitRestartFromFailedSteps) } func testAccCodefreshPipelineBasicConfigTriggers( From 4f10ee5522ba7de95e8b13028a8c3a078a04f137 Mon Sep 17 00:00:00 2001 From: Zhenya Tikhonov Date: Tue, 8 Apr 2025 19:55:11 +0400 Subject: [PATCH 3/5] fix: add `permit_restart_from_failed_steps_use_account_settings` --- codefresh/resource_pipeline.go | 58 ++++++++++++++++++----------- codefresh/resource_pipeline_test.go | 24 +++--------- 2 files changed, 42 insertions(+), 40 deletions(-) diff --git a/codefresh/resource_pipeline.go b/codefresh/resource_pipeline.go index d0d042e1..c9ccc716 100644 --- a/codefresh/resource_pipeline.go +++ b/codefresh/resource_pipeline.go @@ -17,12 +17,6 @@ import ( var terminationPolicyOnCreateBranchAttributes = []string{"branchName", "ignoreTrigger", "ignoreBranch"} -const ( - PermitRestartPermit = "permit" - PermitRestartForbid = "forbid" - PermitRestartUseAccountSettings = "use-account-settings" -) - func ptrBool(b bool) *bool { return &b } @@ -112,11 +106,20 @@ Or: original_yaml_string = file("/path/to/my/codefresh.yml") Default: 0, }, "permit_restart_from_failed_steps": { - Description: "Defines whether it is permitted to restart builds in this pipeline from failed step. Allowed values: 'permit'|'forbid'|'use-account-settings' (default: `use-account-settings`).", - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringInSlice([]string{PermitRestartPermit, PermitRestartForbid, PermitRestartUseAccountSettings}, false), - Default: PermitRestartUseAccountSettings, + Description: "Defines whether it is permitted to restart builds in this pipeline from failed step (default: `true`).", + Type: schema.TypeBool, + Optional: true, + Default: true, + DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool { + // If the user set the pipeline to use account settings, ignore the diff + return d.Get("spec.0.permit_restart_from_failed_steps_use_account_settings").(bool) + }, + }, + "permit_restart_from_failed_steps_use_account_settings": { + Description: "Defines whether `permit_restart_from_failed_steps` should be set to “Use account settings” (default: `false`). If set, `permit_restart_from_failed_steps` will be ignored.", + Type: schema.TypeBool, + Optional: true, + Default: false, }, "spec_template": { Description: "The pipeline's spec template.", @@ -928,11 +931,14 @@ func flattenSpec(spec cfclient.Spec) []map[string]interface{} { m["trigger_concurrency"] = spec.TriggerConcurrency if spec.PermitRestartFromFailedSteps == nil { - m["permit_restart_from_failed_steps"] = PermitRestartUseAccountSettings + m["permit_restart_from_failed_steps"] = true // default value + m["permit_restart_from_failed_steps_use_account_settings"] = true } else if *spec.PermitRestartFromFailedSteps { - m["permit_restart_from_failed_steps"] = PermitRestartPermit + m["permit_restart_from_failed_steps"] = true + m["permit_restart_from_failed_steps_use_account_settings"] = false } else { - m["permit_restart_from_failed_steps"] = PermitRestartForbid + m["permit_restart_from_failed_steps"] = false + m["permit_restart_from_failed_steps_use_account_settings"] = false } m["priority"] = spec.Priority @@ -1111,15 +1117,23 @@ func mapResourceToPipeline(d *schema.ResourceData) (*cfclient.Pipeline, error) { }, } - if hasPermitRestartChanged := d.HasChange("spec.0.permit_restart_from_failed_steps"); hasPermitRestartChanged { - permitRestart := d.Get("spec.0.permit_restart_from_failed_steps").(string) - switch permitRestart { - case PermitRestartPermit: - pipeline.Spec.PermitRestartFromFailedSteps = ptrBool(true) - case PermitRestartForbid: - pipeline.Spec.PermitRestartFromFailedSteps = ptrBool(false) - default: + hasPermitRestartChanged := d.HasChange("spec.0.permit_restart_from_failed_steps") + hasPermitRestartUseAccountChanged := d.HasChange("spec.0.permit_restart_from_failed_steps_use_account_settings") + if hasPermitRestartChanged || hasPermitRestartUseAccountChanged { + shouldPermitRestart := d.Get("spec.0.permit_restart_from_failed_steps").(bool) + shouldUseAccountSettings := d.Get("spec.0.permit_restart_from_failed_steps_use_account_settings").(bool) + switch shouldUseAccountSettings { + case true: pipeline.Spec.PermitRestartFromFailedSteps = nil + default: + switch shouldPermitRestart { + case true: + pipeline.Spec.PermitRestartFromFailedSteps = ptrBool(true) + case false: + pipeline.Spec.PermitRestartFromFailedSteps = ptrBool(false) + default: + pipeline.Spec.PermitRestartFromFailedSteps = nil + } } } diff --git a/codefresh/resource_pipeline_test.go b/codefresh/resource_pipeline_test.go index 7cd9819b..d3f50493 100644 --- a/codefresh/resource_pipeline_test.go +++ b/codefresh/resource_pipeline_test.go @@ -90,10 +90,10 @@ func TestAccCodefreshPipeline_PremitRestartFromFailedSteps(t *testing.T) { CheckDestroy: testAccCheckCodefreshPipelineDestroy, Steps: []resource.TestStep{ { - Config: testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(name, "codefresh-contrib/react-sample-app", "./codefresh.yml", "master", "git", PermitRestartPermit), + Config: testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(name, "codefresh-contrib/react-sample-app", "./codefresh.yml", "master", "git", true), Check: resource.ComposeTestCheckFunc( testAccCheckCodefreshPipelineExists(resourceName, &pipeline), - resource.TestCheckResourceAttr(resourceName, "spec.0.permit_restart_from_failed_steps", PermitRestartPermit), + resource.TestCheckResourceAttr(resourceName, "spec.0.permit_restart_from_failed_steps", "true"), ), }, { @@ -102,22 +102,10 @@ func TestAccCodefreshPipeline_PremitRestartFromFailedSteps(t *testing.T) { ImportStateVerify: true, }, { - Config: testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(name, "codefresh-contrib/react-sample-app", "./codefresh.yml", "master", "git", PermitRestartForbid), + Config: testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(name, "codefresh-contrib/react-sample-app", "./codefresh.yml", "master", "git", false), Check: resource.ComposeTestCheckFunc( testAccCheckCodefreshPipelineExists(resourceName, &pipeline), - resource.TestCheckResourceAttr(resourceName, "spec.0.permit_restart_from_failed_steps", PermitRestartForbid), - ), - }, - { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - }, - { - Config: testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(name, "codefresh-contrib/react-sample-app", "./codefresh.yml", "master", "git", PermitRestartUseAccountSettings), - Check: resource.ComposeTestCheckFunc( - testAccCheckCodefreshPipelineExists(resourceName, &pipeline), - resource.TestCheckResourceAttr(resourceName, "spec.0.permit_restart_from_failed_steps", PermitRestartUseAccountSettings), + resource.TestCheckResourceAttr(resourceName, "spec.0.permit_restart_from_failed_steps", "false"), ), }, }, @@ -1082,7 +1070,7 @@ resource "codefresh_pipeline" "test" { `, rName, repo, path, revision, context, concurrency, concurrencyBranch, concurrencyTrigger) } -func testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(rName string, repo string, path string, revision string, context string, permitRestartFromFailedSteps string) string { +func testAccCodefreshPipelineBasicConfigPermitRestartFromFailedSteps(rName string, repo string, path string, revision string, context string, permitRestartFromFailedSteps bool) string { return fmt.Sprintf(` resource "codefresh_pipeline" "test" { @@ -1102,7 +1090,7 @@ resource "codefresh_pipeline" "test" { context = %q } - permit_restart_from_failed_steps = %s + permit_restart_from_failed_steps = %t } } From c5c3c09d7e8c24d2faafa642163b4ec34d01b228 Mon Sep 17 00:00:00 2001 From: Zhenya Tikhonov Date: Tue, 8 Apr 2025 20:05:51 +0400 Subject: [PATCH 4/5] docs: document `permit_restart_from_failed_steps_use_account_settings` --- docs/resources/pipeline.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/resources/pipeline.md b/docs/resources/pipeline.md index bbc02e58..8264c268 100644 --- a/docs/resources/pipeline.md +++ b/docs/resources/pipeline.md @@ -132,7 +132,8 @@ Optional: - `external_resource` (Block List) (see [below for nested schema](#nestedblock--spec--external_resource)) - `options` (Block List, Max: 1) The options for the pipeline. (see [below for nested schema](#nestedblock--spec--options)) - `pack_id` (String) SAAS pack (`5cd1746617313f468d669013` for Small; `5cd1746717313f468d669014` for Medium; `5cd1746817313f468d669015` for Large; `5cd1746817313f468d669017` for XL; `5cd1746817313f468d669018` for XXL); `5cd1746817313f468d669020` for 4XL). -- `permit_restart_from_failed_steps` (Boolean) Defines whether it is permitted to restart builds in this pipeline from failed step. Defaults to true +- `permit_restart_from_failed_steps` (Boolean) Defines whether it is permitted to restart builds in this pipeline from failed step (default: `true`). +- `permit_restart_from_failed_steps_use_account_settings` (Boolean) Defines whether `permit_restart_from_failed_steps` should be set to “Use account settings” (default: `false`). If set, `permit_restart_from_failed_steps` will be ignored. - `priority` (Number) Helps to organize the order of builds execution in case of reaching the concurrency limit (default: `0`). - `required_available_storage` (String) Minimum disk space required for build filesystem ( unit Gi is required). - `runtime_environment` (Block List) The runtime environment for the pipeline. (see [below for nested schema](#nestedblock--spec--runtime_environment)) From c106f00f637893b29b40f694e891b536b3880fac Mon Sep 17 00:00:00 2001 From: Zhenya Tikhonov Date: Mon, 14 Apr 2025 19:34:40 +0400 Subject: [PATCH 5/5] refactor: fix PR comments --- codefresh/resource_pipeline.go | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/codefresh/resource_pipeline.go b/codefresh/resource_pipeline.go index c9ccc716..11ad6d96 100644 --- a/codefresh/resource_pipeline.go +++ b/codefresh/resource_pipeline.go @@ -1117,23 +1117,19 @@ func mapResourceToPipeline(d *schema.ResourceData) (*cfclient.Pipeline, error) { }, } - hasPermitRestartChanged := d.HasChange("spec.0.permit_restart_from_failed_steps") - hasPermitRestartUseAccountChanged := d.HasChange("spec.0.permit_restart_from_failed_steps_use_account_settings") - if hasPermitRestartChanged || hasPermitRestartUseAccountChanged { - shouldPermitRestart := d.Get("spec.0.permit_restart_from_failed_steps").(bool) - shouldUseAccountSettings := d.Get("spec.0.permit_restart_from_failed_steps_use_account_settings").(bool) - switch shouldUseAccountSettings { + shouldPermitRestart := d.Get("spec.0.permit_restart_from_failed_steps").(bool) + shouldUseAccountSettings := d.Get("spec.0.permit_restart_from_failed_steps_use_account_settings").(bool) + switch shouldUseAccountSettings { + case true: + pipeline.Spec.PermitRestartFromFailedSteps = nil + default: + switch shouldPermitRestart { case true: - pipeline.Spec.PermitRestartFromFailedSteps = nil + pipeline.Spec.PermitRestartFromFailedSteps = ptrBool(true) + case false: + pipeline.Spec.PermitRestartFromFailedSteps = ptrBool(false) default: - switch shouldPermitRestart { - case true: - pipeline.Spec.PermitRestartFromFailedSteps = ptrBool(true) - case false: - pipeline.Spec.PermitRestartFromFailedSteps = ptrBool(false) - default: - pipeline.Spec.PermitRestartFromFailedSteps = nil - } + pipeline.Spec.PermitRestartFromFailedSteps = nil } }