pkg/template/files/directory.go (49 lines of code) (raw):

// Licensed to Elasticsearch B.V. under one or more contributor // license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright // ownership. Elasticsearch B.V. licenses this file to you under // the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package files import ( "fmt" "io/fs" "path/filepath" ) // DirLoader loads a chart from a directory type DirLoader struct { filesystem fs.FS name string } // Load loads the chart func (l DirLoader) Load() ([]*BufferedFile, error) { return LoadDir(l.filesystem, l.name) } // LoadDir loads from a directory. // // This loads charts only from directories. func LoadDir(filesystem fs.FS, dir string) ([]*BufferedFile, error) { // Check if path is valid if !fs.ValidPath(dir) { return nil, fmt.Errorf("'%s' is not a valid path", dir) } result := []*BufferedFile{} topdir := dir walk := func(name string, d fs.DirEntry, errWalk error) error { // Check walk error if errWalk != nil { return errWalk } // Compute relative path n, err := filepath.Rel(topdir, name) if err != nil { return fmt.Errorf("unable to compute relative path: %w", err) } if n == "" { return nil } // Normalize filepath n = filepath.ToSlash(n) // Ignore if it is a directory if d.IsDir() { return nil } // Irregular files include devices, sockets, and other uses of files that // are not regular files. if !d.Type().IsRegular() { return fmt.Errorf("cannot load irregular file %s as it has file mode type bits set", name) } // Read file content data, err := fs.ReadFile(filesystem, name) if err != nil { return fmt.Errorf("error reading %s: %w", name, err) } // Append to result result = append(result, &BufferedFile{Name: n, Data: data}) // No error return nil } if err := fs.WalkDir(filesystem, topdir, walk); err != nil { return nil, fmt.Errorf("unable to walk directory '%s' : %w", topdir, err) } // No error return result, nil }