kubernetes/kops · error

error parsing path for etcd manifest %s: %v

Error message

error parsing path for etcd manifest %s: %v

What it means

manifests.go's Build writes etcd manifests on masters; each entry in NodeupConfig.EtcdManifests is turned into a VFS path via vfs.Context.BuildVfsPath. If the manifest string is not a valid VFS path/URL, the error is wrapped with the manifest name. This is a configuration/URL parsing problem, not a network read problem.

Source

Thrown at nodeup/pkg/model/manifests.go:45

)

// ManifestsBuilder copies manifests from the store (e.g. etcdmanager)
type ManifestsBuilder struct {
	*NodeupModelContext
}

var _ fi.NodeupModelBuilder = &ManifestsBuilder{}

// Build creates tasks for copying the manifests
func (b *ManifestsBuilder) Build(c *fi.NodeupModelBuilderContext) error {
	ctx := c.Context()

	// Write etcd manifests (currently etcd <=> master)
	if b.IsMaster {
		for _, manifest := range b.NodeupConfig.EtcdManifests {
			p, err := vfs.Context.BuildVfsPath(manifest)
			if err != nil {
				return fmt.Errorf("error parsing path for etcd manifest %s: %v", manifest, err)
			}
			data, err := p.ReadFile(ctx)
			if err != nil {
				return fmt.Errorf("error reading etcd manifest %s: %v", manifest, err)
			}

			name := p.Base()
			name = strings.TrimSuffix(name, filepath.Ext(name))

			key := "etcd-" + name

			manifestPath := "/etc/kubernetes/manifests/" + key + ".manifest"

			c.AddTask(&nodetasks.File{
				Contents: fi.NewBytesResource(data),
				Mode:     s("0440"),
				Path:     manifestPath,
				Type:     nodetasks.FileType_File,

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Correct the EtcdManifests URL in the cluster/nodeup config (valid schemes: s3://, gs://, file://, etc.)
  2. Run kops update/replace so nodeup receives a regenerated NodeupConfig with valid manifest paths
  3. Test the exact URL with the same VFS scheme kops supports; check for stray characters/spaces
  4. Verify the kops version supports the manifest's storage scheme

Example fix

// before
etcdManifests:
- s3:/my-bucket/etcd.yaml   # malformed: single slash
// after
etcdManifests:
- s3://my-bucket/etcd.yaml
Defensive patterns

Strategy: validation

Validate before calling

func validVfsPath(u string) error {
    parsed, err := url.Parse(u)
    if err != nil {
        return err
    }
    switch parsed.Scheme {
    case "s3", "gs", "file", "memfs", "":
        return nil
    default:
        return fmt.Errorf("unsupported VFS scheme %q in %q", parsed.Scheme, u)
    }
}
// run over every EtcdManifests entry before kops update cluster --yes

Try / catch

p, err := vfs.Context.BuildVfsPath(manifest)
if err != nil {
    klog.Errorf("etcd manifest path %q invalid: %v", manifest, err)
    return fmt.Errorf("error parsing path for etcd manifest %s: %v", manifest, err)
}

Prevention

When it happens

Trigger: An entry in EtcdManifests uses an unsupported or malformed scheme (e.g. typo in s3://, unknown scheme, malformed URL) so vfs.Context.BuildVfsPath(manifest) fails during nodeup Build on a master.

Common situations: Typos in the etcd manifest URL in the cluster spec; unsupported storage backends; hand-edited kops cluster config or nodeup config with a bad manifest path.

Related errors


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