kubernetes/kops · error

error writing terraform data to output file %q: %v

Error message

error writing terraform data to output file %q: %v

What it means

TerraformTarget.Finish writes each generated Terraform file with os.WriteFile (mode 0644) into the output tree. If the write fails, this error wraps the OS cause and includes the target file path. The Terraform JSON/HCL output could not be persisted, so the update target is incomplete.

Source

Thrown at upup/pkg/fi/cloudup/terraform/target.go:103

	return nil
}

func (t *TerraformTarget) Finish(taskMap map[string]fi.CloudupTask) error {
	if err := t.finishHCL2(); err != nil {
		return err
	}

	for relativePath, contents := range t.Files {
		p := path.Join(t.outDir, relativePath)

		err := os.MkdirAll(path.Dir(p), os.FileMode(0o755))
		if err != nil {
			return fmt.Errorf("error creating output directory %q: %v", path.Dir(p), err)
		}

		err = os.WriteFile(p, contents, os.FileMode(0o644))
		if err != nil {
			return fmt.Errorf("error writing terraform data to output file %q: %v", p, err)
		}
	}
	klog.Infof("Terraform output is in %s", t.outDir)

	return nil
}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Free disk space / increase quota on the volume holding --out.
  2. `sudo chown -R $(whoami) out/` or delete the out directory and re-run so kops recreates it.
  3. Choose a fresh output directory: `kops update cluster --out out-new/`.
  4. Check the wrapped OS error (after `%v`) for the precise errno (ENOSPC, EACCES, EROFS).

Example fix

// before
kops update cluster --out /mnt/ro/out
// after
kops update cluster --out /home/user/out
Defensive patterns

Strategy: validation

Validate before calling

outDir := "/home/user/out"
info, err := os.StatfsCompat(outDir) // or syscall.Statfs
if err == nil && info.Bavail*uint64(info.Bsize) < 100<<20 {
    return fmt.Errorf("less than 100MB free in %s", outDir)
}

Try / catch

if err := target.Finish(taskMap); err != nil {
    if strings.Contains(err.Error(), "error writing terraform data") {
        // fix ownership/disk, wipe outDir, re-run update
    }
}

Prevention

When it happens

Trigger: os.WriteFile fails for outDir/<relativePath> — out of disk space, permission denied on an existing file owned by another user, immutable files, or the path became unwritable between MkdirAll and WriteFile.

Common situations: Previous run of kops (or terraform) created files as root inside out/; disk quota exceeded in CI; read-only mount; antivirus/EDR blocking writes.

Understand the failure class

Background: "failed to write file", "Could not save figure", "Error saving remote file" — file write failed: causes and fixes across languages and libraries — this error's family across 38 libraries.

Related errors


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/0d65a0c8e84498b9. Report an issue: GitHub.