mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-06 16:06:56 +00:00
63 lines
1.5 KiB
Go
63 lines
1.5 KiB
Go
|
package loaders
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/go-logr/logr"
|
||
|
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
||
|
engineapi "github.com/kyverno/kyverno/pkg/engine/api"
|
||
|
"github.com/kyverno/kyverno/pkg/engine/apicall"
|
||
|
enginecontext "github.com/kyverno/kyverno/pkg/engine/context"
|
||
|
"github.com/kyverno/kyverno/pkg/engine/jmespath"
|
||
|
)
|
||
|
|
||
|
type apiLoader struct {
|
||
|
ctx context.Context //nolint:containedctx
|
||
|
logger logr.Logger
|
||
|
entry kyvernov1.ContextEntry
|
||
|
enginectx enginecontext.Interface
|
||
|
jp jmespath.Interface
|
||
|
client engineapi.RawClient
|
||
|
data []byte
|
||
|
}
|
||
|
|
||
|
func NewAPILoader(
|
||
|
ctx context.Context,
|
||
|
logger logr.Logger,
|
||
|
entry kyvernov1.ContextEntry,
|
||
|
enginectx enginecontext.Interface,
|
||
|
jp jmespath.Interface,
|
||
|
client engineapi.RawClient,
|
||
|
) enginecontext.Loader {
|
||
|
return &apiLoader{
|
||
|
ctx: ctx,
|
||
|
logger: logger,
|
||
|
entry: entry,
|
||
|
enginectx: enginectx,
|
||
|
jp: jp,
|
||
|
client: client,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (a *apiLoader) HasLoaded() bool {
|
||
|
return a.data != nil
|
||
|
}
|
||
|
|
||
|
func (a *apiLoader) LoadData() error {
|
||
|
executor, err := apicall.New(a.logger, a.jp, a.entry, a.enginectx, a.client)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("failed to initiaize APICal: %w", err)
|
||
|
}
|
||
|
if a.data == nil {
|
||
|
var err error
|
||
|
if a.data, err = executor.Fetch(a.ctx); err != nil {
|
||
|
return fmt.Errorf("failed to fetch data for APICall: %w", err)
|
||
|
}
|
||
|
}
|
||
|
if _, err := executor.Store(a.data); err != nil {
|
||
|
return fmt.Errorf("failed to store data for APICall: %w", err)
|
||
|
}
|
||
|
return nil
|
||
|
}
|