1
0
mirror of synced 2026-02-06 19:05:55 +00:00

Ensure proper FS root is set while bootstrapping

This ensures relative paths to e.g. bases can be used.

Signed-off-by: Hidde Beydals <hello@hidde.co>
This commit is contained in:
Hidde Beydals
2022-05-24 12:03:40 +02:00
parent 938f2570ef
commit 5130a154e4
4 changed files with 39 additions and 19 deletions

View File

@@ -31,16 +31,15 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/kustomize/api/konfig"
"github.com/fluxcd/flux2/pkg/manifestgen/kustomization"
runclient "github.com/fluxcd/pkg/runtime/client"
"github.com/fluxcd/pkg/ssa"
"github.com/fluxcd/flux2/pkg/manifestgen/kustomization"
)
// Apply is the equivalent of 'kubectl apply --server-side -f'.
// If the given manifest is a kustomization.yaml, then apply performs the equivalent of 'kubectl apply --server-side -k'.
func Apply(ctx context.Context, rcg genericclioptions.RESTClientGetter, opts *runclient.Options, manifestPath string) (string, error) {
objs, err := readObjects(manifestPath)
func Apply(ctx context.Context, rcg genericclioptions.RESTClientGetter, opts *runclient.Options, root, manifestPath string) (string, error) {
objs, err := readObjects(root, manifestPath)
if err != nil {
return "", err
}
@@ -92,13 +91,17 @@ func Apply(ctx context.Context, rcg genericclioptions.RESTClientGetter, opts *ru
return changeSet.String(), nil
}
func readObjects(manifestPath string) ([]*unstructured.Unstructured, error) {
if _, err := os.Stat(manifestPath); err != nil {
func readObjects(root, manifestPath string) ([]*unstructured.Unstructured, error) {
fi, err := os.Lstat(manifestPath)
if err != nil {
return nil, err
}
if fi.IsDir() || !fi.Mode().IsRegular() {
return nil, fmt.Errorf("expected %q to be a file", manifestPath)
}
if filepath.Base(manifestPath) == konfig.DefaultKustomizationFileName() {
resources, err := kustomization.Build(filepath.Dir(manifestPath))
if isRecognizedKustomizationFile(manifestPath) {
resources, err := kustomization.BuildWithRoot(root, filepath.Dir(manifestPath))
if err != nil {
return nil, err
}
@@ -152,3 +155,13 @@ func waitForSet(rcg genericclioptions.RESTClientGetter, opts *runclient.Options,
}
return man.WaitForSet(changeSet.ToObjMetadataSet(), ssa.WaitOptions{Interval: 2 * time.Second, Timeout: time.Minute})
}
func isRecognizedKustomizationFile(path string) bool {
base := filepath.Base(path)
for _, v := range konfig.RecognizedKustomizationFileNames() {
if base == v {
return true
}
}
return false
}