fix: handle ANSI Terraform empty state

This commit is contained in:
eding 2026-08-23 19:56:10 +02:00
parent e8bcebf65f
commit 476259bc18
2 changed files with 5 additions and 8 deletions

View file

@ -110,13 +110,10 @@ func listTerraformStateResources(terraformDir string, environment []string) ([]s
return strings.Fields(string(state)), nil return strings.Fields(string(state)), nil
} }
var ansiEscapeSequence = regexp.MustCompile(`\x1b\[[0-?]*[ -/]*[@-~]`)
func terraformNoStateFile(stderr []byte) bool { func terraformNoStateFile(stderr []byte) bool {
for _, line := range strings.Split(string(stderr), "\n") { return strings.Contains(strings.ToLower(ansiEscapeSequence.ReplaceAllString(string(stderr), "")), "no state file")
if strings.TrimSpace(line) == "No state file was found!" {
return true
}
}
return false
} }
var destroyTalosVMs = func(terraformDir string, environment []string) error { var destroyTalosVMs = func(terraformDir string, environment []string) error {

View file

@ -911,11 +911,11 @@ func TestTerraformPlanPathIsAbsolute(t *testing.T) {
} }
} }
func TestTerraformStateResourcesAllowsNoStateFile(t *testing.T) { func TestTerraformStateResourcesAllowsANSINoStateFile(t *testing.T) {
original := runTerraformStateList original := runTerraformStateList
t.Cleanup(func() { runTerraformStateList = original }) t.Cleanup(func() { runTerraformStateList = original })
runTerraformStateList = func(string, []string) ([]byte, []byte, error) { runTerraformStateList = func(string, []string) ([]byte, []byte, error) {
return nil, []byte("No state file was found!\n"), errors.New("exit status 1") return nil, []byte("\x1b[31mError:\x1b[0m \x1b[31mNO STATE\x1b[0m FILE was found!\n"), errors.New("exit status 1")
} }
resources, err := listTerraformStateResources("terraform", nil) resources, err := listTerraformStateResources("terraform", nil)