kubernetes/kops · warning

error writing to output: %v

Error message

error writing to output: %v

What it means

At the end of RunCreate, the accumulated help text (next-steps instructions in sb) is written to the command's output writer; any Write failure is wrapped as 'error writing to output'. This is purely about emitting user-facing output after the resources were already created.

Source

Thrown at cmd/kops/create.go:243

		addonsClient := clientset.AddonsFor(cluster)

		if err := addonsClient.Replace(addons); err != nil {
			return fmt.Errorf("error writing additional objects: %v", err)
		}
	}

	{
		// If there is a value in this sb, this should mean that we have something to deploy
		// so let's advise the user how to engage the cloud provider and deploy
		if sb.String() != "" {
			fmt.Fprintf(&sb, "\n")
			fmt.Fprintf(&sb, "To deploy these resources, run: kops update cluster --name %s --yes\n", clusterName)
			fmt.Fprintf(&sb, "\n")
		}
		_, err := out.Write(sb.Bytes())
		if err != nil {
			return fmt.Errorf("error writing to output: %v", err)
		}
	}
	return nil
}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Re-run the command without truncating consumers (avoid piping into `head` without handling SIGPIPE)
  2. Check disk space if output is redirected to a file
  3. Ensure stdout/stderr are valid open file descriptors in the execution environment
  4. Note the resources were already created; only the help output was lost
Defensive patterns

Strategy: try-catch

Validate before calling

// ensure output destination is writable
f, err := os.OpenFile(outPath, os.O_WRONLY|os.O_CREATE, 0644)
if err != nil { return err }
if err := f.Close(); err != nil { return err }

Try / catch

if _, err := out.Write(sb.Bytes()); err != nil {
	if errors.Is(err, syscall.EPIPE) {
		// downstream consumer closed; safe to ignore or log
	}
	return fmt.Errorf("error writing to output: %w", err)
}

Prevention

When it happens

Trigger: The io.Writer passed as `out` to RunCreate fails on Write — e.g. a closed/corrupted stdout pipe, full disk when redirecting to a file, or a broken pipe.

Common situations: `kops create ... | head` closing the pipe early (EPIPE); redirecting output to a file on a full filesystem; running kops in a container with a closed stdout.

Related errors


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