kubernetes/kops · error
error creating output directory %q: %v
Error message
error creating output directory %q: %v
What it means
During TerraformTarget.Finish, kOps writes all accumulated file payloads into the Terraform output directory, creating parent directories first. If os.MkdirAll cannot create the directory for a file, this error wraps the OS cause. It means the output tree cannot be materialized on disk.
Source
Thrown at upup/pkg/fi/cloudup/terraform/target.go:98
func tfGetFilesProviderExtraConfig(c *kops.TargetSpec) map[string]string {
if c != nil &&
c.Terraform != nil {
return c.Terraform.FilesProviderExtraConfig
}
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
- Fix permissions on the --out directory (e.g. `sudo chown -R $(whoami) out/`) or pick a writable directory.
- Check whether a regular file exists at the path where a directory must be created and remove it.
- Check disk space (`df -h`) on the target filesystem.
- Avoid reserved/invalid characters or overly long paths in the out path (especially on limited filesystems).
Example fix
// before (permissions) drwxr-xr-x root out/ // after sudo chown -R $(whoami) out/ && kops update cluster --out out/
Defensive patterns
Strategy: validation
Validate before calling
outDir := "/home/user/out"
if fi, err := os.Stat(outDir); err == nil && !fi.IsDir() {
return fmt.Errorf("%s exists and is not a directory", outDir)
}
if err := os.MkdirAll(outDir, 0o755); err != nil {
return fmt.Errorf("cannot prepare out dir %s: %w", outDir, err)
} Try / catch
err := target.Finish(taskMap) // kops internal
if err != nil && strings.Contains(err.Error(), "error creating output directory") {
// check permissions/disk and retry after fixing out dir
} Prevention
- Run kops as a user with write access to --out.
- Ensure no file exists at a path where kops needs a directory.
- Check disk space/quota before large updates.
- Avoid network mounts with restrictive permissions as output dirs.
When it happens
Trigger: os.MkdirAll fails on path.Dir(outDir/relativePath) — e.g. outDir points inside a read-only path, a file already exists where a directory is needed, disk full, or permission denied on the parent directory.
Common situations: Running kops with --out to a directory without write permissions; a stale file named like a required directory inside the out dir; NFS/CI volumes with permission restrictions; SELinux denying writes.
Related errors
- unable to read snippet: %s, error: %s
- unable to read template: %s, error: %s
- creating directory %q: %w
- creating file %q: %w
- error writing terraform data to output file %q: %v
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/76e35b1c5b766cab.
Report an issue: GitHub.