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
- Correct the EtcdManifests URL in the cluster/nodeup config (valid schemes: s3://, gs://, file://, etc.)
- Run kops update/replace so nodeup receives a regenerated NodeupConfig with valid manifest paths
- Test the exact URL with the same VFS scheme kops supports; check for stray characters/spaces
- 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
- Never hand-edit manifest URLs; let kops generate NodeupConfig
- Lint cluster specs for common URL typos (s3:/ vs s3://)
- Pin kops versions and confirm the storage scheme is supported
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
- error reading etcd manifest %s: %v
- error loading channel %q: %v
- building nodeConfig for instanceGroup: %w
- cannot parse ConfigBase %q: %w
- parsing path for kops-channels manifest %s: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/fed2e092050d677f.
Report an issue: GitHub.