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
- Free disk space / increase quota on the volume holding --out.
- `sudo chown -R $(whoami) out/` or delete the out directory and re-run so kops recreates it.
- Choose a fresh output directory: `kops update cluster --out out-new/`.
- 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
- Use a fresh output directory per run: `rm -rf out && kops update ...`.
- Fix ownership of previous outputs before re-running as a non-root user.
- Monitor disk space in CI runners.
- Don't target read-only or immutable mounts.
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
- error creating output directory %q: %v
- error reading user provided private key %q: %v
- reading encryption config %v: %v
- error reading SSH public key %v: %v
- reading file %q: %v
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/0d65a0c8e84498b9.
Report an issue: GitHub.