mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-06 16:06:56 +00:00
* feat: add globalcontext controller Signed-off-by: Khaled Emara <khaled.emara@nirmata.com> * rework controller Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * rbac Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * cmd Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * fix rbac Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * engine Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * k8s resources Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * k8s resource Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * resync zero Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * api call Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * api call Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * clean Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * fix linter Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> --------- Signed-off-by: Khaled Emara <khaled.emara@nirmata.com> Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
package externalapi
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/go-logr/logr"
|
|
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
|
"github.com/kyverno/kyverno/pkg/engine/apicall"
|
|
"k8s.io/apimachinery/pkg/util/wait"
|
|
)
|
|
|
|
type entry struct {
|
|
sync.Mutex
|
|
data any
|
|
stop func()
|
|
}
|
|
|
|
func New(ctx context.Context, logger logr.Logger, client apicall.ClientInterface, call kyvernov1.APICall, period time.Duration) (*entry, error) {
|
|
var group wait.Group
|
|
ctx, cancel := context.WithCancel(ctx)
|
|
stop := func() {
|
|
// Send stop signal to informer's goroutine
|
|
cancel()
|
|
// Wait for the group to terminate
|
|
group.Wait()
|
|
}
|
|
e := &entry{
|
|
stop: stop,
|
|
}
|
|
group.StartWithContext(ctx, func(ctx context.Context) {
|
|
// TODO: make sure we have called it at least once before returning
|
|
// TODO: config
|
|
config := apicall.NewAPICallConfiguration(10000)
|
|
caller := apicall.NewCaller(logger, "TODO", client, config)
|
|
wait.UntilWithContext(ctx, func(ctx context.Context) {
|
|
// TODO
|
|
if data, err := doCall(ctx, caller, call); err != nil {
|
|
logger.Error(err, "failed to get data from api caller")
|
|
} else {
|
|
e.setData(data)
|
|
}
|
|
}, period)
|
|
})
|
|
return e, nil
|
|
}
|
|
|
|
func (e *entry) Get() (any, error) {
|
|
e.Lock()
|
|
defer e.Unlock()
|
|
return e.data, nil
|
|
}
|
|
|
|
func (e *entry) Stop() {
|
|
e.Lock()
|
|
defer e.Unlock()
|
|
e.stop()
|
|
}
|
|
|
|
func (e *entry) setData(data any) {
|
|
e.Lock()
|
|
defer e.Unlock()
|
|
e.data = data
|
|
}
|
|
|
|
func doCall(ctx context.Context, caller apicall.Caller, call kyvernov1.APICall) (any, error) {
|
|
// TODO: unmarshall json ?
|
|
return caller.Execute(ctx, &call)
|
|
}
|