1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 16:06:56 +00:00
kyverno/pkg/engine/context/context.go
shivkumar dudhani 12edc56613 initial commit
2019-12-11 09:45:22 -08:00

68 lines
1.3 KiB
Go

package context
import (
"encoding/json"
"fmt"
"sync"
"github.com/golang/glog"
)
//Interface ... normal functions
type Interface interface {
Add(key string, data []byte, force bool) error
Remove(key string) error
EvalInterface
}
//EvalInterface ... to evaluate
type EvalInterface interface {
Query(query string) (interface{}, error)
}
//Context stores the data resources as JSON
type Context struct {
mu sync.RWMutex
data map[string]interface{}
}
//NewContext returns a new context
func NewContext() *Context {
ctx := Context{
data: map[string]interface{}{},
}
return &ctx
}
//Add adds resource with the key
// we always overwrite the resoruce if already present
func (ctx *Context) Add(key string, resource []byte) error {
ctx.mu.Lock()
defer ctx.mu.Unlock()
// insert/update
// umarshall before adding
var data interface{}
if err := json.Unmarshal(resource, &data); err != nil {
glog.V(4).Infof("failed to unmarshall resource in context: %v", err)
fmt.Println(err)
return err
}
ctx.data[key] = data
return nil
}
//Remove removes resource with given key
func (ctx *Context) Remove(key string) error {
ctx.mu.Lock()
defer ctx.mu.Unlock()
_, ok := ctx.data[key]
if ok {
delete(ctx.data, key)
return nil
}
return fmt.Errorf("no resource with key %s", key)
}
func (ctx *Context) getData() interface{} {
return ctx.data
}