mirror of
https://github.com/siderolabs/talos.git
synced 2025-10-26 14:01:39 +01:00
Moving the loading and validation to the machinery package, so that we can import and use that from other projects. Co-authored-by: Noel Georgi <git@frezbo.dev> Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
package extensions
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"sort"
|
|
|
|
"github.com/siderolabs/talos/pkg/machinery/extensions"
|
|
)
|
|
|
|
// List prepared unpacked extensions under rootPath.
|
|
func List(rootPath string) ([]*Extension, error) {
|
|
items, err := os.ReadDir(rootPath)
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
return nil, nil
|
|
}
|
|
|
|
return nil, err
|
|
}
|
|
|
|
if len(items) == 0 {
|
|
return nil, nil
|
|
}
|
|
|
|
sort.Slice(items, func(i, j int) bool { return items[i].Name() < items[j].Name() })
|
|
|
|
result := make([]*Extension, 0, len(items))
|
|
|
|
for _, item := range items {
|
|
if !item.IsDir() {
|
|
return nil, fmt.Errorf("unexpected non-directory entry: %q", item.Name())
|
|
}
|
|
|
|
ext, err := extensions.Load(filepath.Join(rootPath, item.Name()))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error loading extension %s: %w", item.Name(), err)
|
|
}
|
|
|
|
result = append(result, &Extension{ext})
|
|
}
|
|
|
|
return result, nil
|
|
}
|