3
0

Post testing tweaks

* Defer resource ID dereferencing to store encoder layer
* Allow pageID when exporting to YAML for correct relations
This commit is contained in:
Tomaž Jerman
2021-09-23 10:35:49 +02:00
parent f7922d9736
commit c4984c44f4
28 changed files with 116 additions and 162 deletions

View File

@@ -191,7 +191,13 @@ func (m ModuleField) setOptionKey(v interface{}, kk ...string) {
if !ok {
opt = map[string]interface{}{k: make(map[string]interface{})}
}
aux := opt[k].(map[string]interface{})
var aux ModuleFieldOptions
switch c := opt[k].(type) {
case map[string]interface{}:
aux = ModuleFieldOptions(c)
case ModuleFieldOptions:
aux = c
}
opt = aux
}
@@ -208,7 +214,14 @@ func (m ModuleField) getOptionKey(kk ...string) interface{} {
if !ok {
opt = map[string]interface{}{k: make(map[string]interface{})}
}
aux := opt[k].(map[string]interface{})
var aux ModuleFieldOptions
switch c := opt[k].(type) {
case map[string]interface{}:
aux = ModuleFieldOptions(c)
case ModuleFieldOptions:
aux = c
}
opt = aux
}

View File

@@ -31,8 +31,6 @@ func NewApplication(res *types.Application) *Application {
})
}
res.ID = 0
return r
}

View File

@@ -51,8 +51,6 @@ func NewAutomationWorkflow(res *types.Workflow) *AutomationWorkflow {
us.RunAs = MakeUserstampFromID(res.RunAs)
r.SetUserstamps(us)
res.ID = 0
return r
}

View File

@@ -37,9 +37,6 @@ func NewComposeChart(res *types.Chart, nsRef string, mmRef []string) *ComposeCha
// Initial timestamps
r.SetTimestamps(MakeTimestampsCUDA(&res.CreatedAt, res.UpdatedAt, res.DeletedAt, nil))
res.ID = 0
res.NamespaceID = 0
return r
}

View File

@@ -68,18 +68,11 @@ func NewComposeModule(res *types.Module, nsRef string) *ComposeModule {
r.RefRoles = append(r.RefRoles, r.AddRef(systemTypes.RoleResourceType, refRole))
}
}
f.ID = 0
f.NamespaceID = 0
f.ModuleID = 0
}
// Initial timestamps
r.SetTimestamps(MakeTimestampsCUDA(&res.CreatedAt, res.UpdatedAt, res.DeletedAt, nil))
res.ID = 0
res.NamespaceID = 0
return r
}
@@ -231,10 +224,6 @@ func NewComposeModuleField(res *types.ModuleField, nsRef, modRef string) *Compos
// Initial timestamps
r.SetTimestamps(MakeTimestampsCUDA(&res.CreatedAt, res.UpdatedAt, res.DeletedAt, nil))
res.ID = 0
res.NamespaceID = 0
res.ModuleID = 0
return r
}

View File

@@ -24,8 +24,6 @@ func NewComposeNamespace(ns *types.Namespace) *ComposeNamespace {
// Initial timestamps
r.SetTimestamps(MakeTimestampsCUDA(&ns.CreatedAt, ns.UpdatedAt, ns.DeletedAt, nil))
ns.ID = 0
return r
}

View File

@@ -126,11 +126,6 @@ func NewComposePage(pg *types.Page, nsRef, modRef, parentRef string) *ComposePag
// Initial timestamps
r.SetTimestamps(MakeTimestampsCUDA(&pg.CreatedAt, pg.UpdatedAt, pg.DeletedAt, nil))
pg.ID = 0
pg.SelfID = 0
pg.NamespaceID = 0
pg.ModuleID = 0
return r
}

View File

@@ -221,10 +221,6 @@ func (t *base) Placeholder() bool {
return t.ph
}
func MakeRef(rt string, ii Identifiers) *Ref {
return &Ref{ResourceType: rt, Identifiers: ii}
}
func IgnoreDepResolution(ref *Ref) bool {
return ref.ResourceType == composeTypes.ModuleFieldResourceType
}

View File

@@ -40,6 +40,23 @@ func NewResourceTranslation(res types.ResourceTranslationSet, refResource string
return r
}
func (r *ResourceTranslation) ReRef(old RefSet, new RefSet) {
r.base.ReRef(old, new)
for i, o := range old {
if o.equals(r.RefRes) {
r.RefRes = new[i]
break
}
}
for i, o := range old {
if RefSet(r.RefPath).findRef(o) > -1 {
r.RefPath = RefSet(r.RefPath).replaceRef(o, new[i])
}
}
}
func (l *ResourceTranslation) MarkDefault() {
l.Priority = 1
}

View File

@@ -25,8 +25,6 @@ func NewRole(rl *types.Role) *Role {
// Initial timestamps
r.SetTimestamps(MakeTimestampsCUDA(&rl.CreatedAt, rl.UpdatedAt, rl.DeletedAt, rl.ArchivedAt))
rl.ID = 0
return r
}

View File

@@ -25,8 +25,6 @@ func NewTemplate(t *types.Template) *Template {
// Initial timestamps
r.SetTimestamps(MakeTimestampsCUDAS(&t.CreatedAt, t.UpdatedAt, t.DeletedAt, nil, nil))
t.ID = 0
return r
}

View File

@@ -25,8 +25,6 @@ func NewUser(u *types.User) *User {
// Initial timestamps
r.SetTimestamps(MakeTimestampsCUDAS(&u.CreatedAt, u.UpdatedAt, u.DeletedAt, nil, u.SuspendedAt))
u.ID = 0
return r
}

View File

@@ -26,6 +26,8 @@ func (n *apiGateway) Prepare(ctx context.Context, pl *payload) (err error) {
}
func (n *apiGateway) prepareRoute(ctx context.Context, pl *payload) (err error) {
// Reset old identifiers
n.res.Res.ID = 0
// Try to get the original workflow
n.gwr, err = findAPIGatewayStore(ctx, pl.s, makeGenericFilter(n.res.Identifiers()))
@@ -44,6 +46,11 @@ func (n *apiGateway) prepareFilters(ctx context.Context, pl *payload) (err error
return nil
}
// Reset old identifiers
for _, rf := range n.res.Filters {
rf.Res.ID = 0
}
// Try to find any related filters for this route
tt, _, err := store.SearchApigwFilters(ctx, pl.s, types.ApigwFilterFilter{
RouteID: n.gwr.ID,

View File

@@ -16,11 +16,6 @@ func NewApplicationFromResource(res *resource.Application, cfg *EncoderConfig) r
}
func (n *application) Prepare(ctx context.Context, pl *payload) (err error) {
if n.cfg.IgnoreStore {
n.res.Res.ID = 0
return nil
}
// Get the existing app
n.app, err = findApplicationStore(ctx, pl.s, makeGenericFilter(n.res.Identifiers()))
if err != nil {
@@ -30,6 +25,7 @@ func (n *application) Prepare(ctx context.Context, pl *payload) (err error) {
if n.app != nil {
n.res.Res.ID = n.app.ID
}
return nil
}

View File

@@ -27,10 +27,8 @@ func (n *automationWorkflow) Prepare(ctx context.Context, pl *payload) (err erro
}
func (n *automationWorkflow) prepareWorkflows(ctx context.Context, pl *payload) (err error) {
if n.cfg.IgnoreStore {
n.res.Res.ID = 0
return nil
}
// Reset old identifiers
n.res.Res.ID = 0
// Try to get the original workflow
n.wf, err = findAutomationWorkflowStore(ctx, pl.s, makeGenericFilter(n.res.Identifiers()))
@@ -49,11 +47,10 @@ func (n *automationWorkflow) prepareTriggers(ctx context.Context, pl *payload) (
return nil
}
if n.cfg.IgnoreStore {
for _, t := range n.tt {
t.ID = 0
}
return nil
// Reset old identifiers
for _, t := range n.res.Triggers {
t.Res.ID = 0
t.Res.WorkflowID = 0
}
// Try to find any related triggers for this workflow

View File

@@ -17,15 +17,14 @@ func newComposeChartFromResource(res *resource.ComposeChart, cfg *EncoderConfig)
}
func (n *composeChart) Prepare(ctx context.Context, pl *payload) (err error) {
// Reset old identifiers
n.res.Res.ID = 0
n.res.Res.NamespaceID = 0
// Get related namespace
if !n.cfg.IgnoreStore {
n.relNS, err = findComposeNamespace(ctx, pl.s, pl.state.ParentResources, n.res.RefNs.Identifiers)
if err != nil {
return err
}
} else {
n.res.Res.ID = 0
n.relNS = resource.FindComposeNamespace(pl.state.ParentResources, n.res.RefNs.Identifiers)
n.relNS, err = findComposeNamespace(ctx, pl.s, pl.state.ParentResources, n.res.RefNs.Identifiers)
if err != nil {
return err
}
if n.relNS == nil {
return resource.ComposeNamespaceErrUnresolved(n.res.RefNs.Identifiers)
@@ -34,23 +33,15 @@ func (n *composeChart) Prepare(ctx context.Context, pl *payload) (err error) {
// Get related modules
n.relMods = make(types.ModuleSet, len(n.res.RefMods))
for i, rMod := range n.res.RefMods {
if !n.cfg.IgnoreStore {
n.relMods[i], err = findComposeModule(ctx, pl.s, n.relNS.ID, pl.state.ParentResources, rMod.Identifiers)
if err != nil {
return err
}
} else {
n.relMods[i] = resource.FindComposeModule(pl.state.ParentResources, rMod.Identifiers)
n.relMods[i], err = findComposeModule(ctx, pl.s, n.relNS.ID, pl.state.ParentResources, rMod.Identifiers)
if err != nil {
return err
}
if n.relMods[i] == nil {
return resource.ComposeModuleErrUnresolved(rMod.Identifiers)
}
}
if n.cfg.IgnoreStore {
return nil
}
// Try to get the original chart
n.chr, err = findComposeChartStore(ctx, pl.s, n.relNS.ID, makeGenericFilter(n.res.Identifiers()))
if err != nil {

View File

@@ -22,15 +22,19 @@ func NewComposeModuleFromResource(res *resource.ComposeModule, cfg *EncoderConfi
}
func (n *composeModule) Prepare(ctx context.Context, pl *payload) (err error) {
// Reset old identifiers
n.res.Res.ID = 0
n.res.Res.NamespaceID = 0
for _, rf := range n.res.ResFields {
rf.Res.ID = 0
rf.Res.ModuleID = 0
rf.Res.NamespaceID = 0
}
// Get related namespace
if !n.cfg.IgnoreStore {
n.relNS, err = findComposeNamespace(ctx, pl.s, pl.state.ParentResources, n.res.RefNs.Identifiers)
if err != nil {
return err
}
} else {
n.res.Res.ID = 0
n.relNS = resource.FindComposeNamespace(pl.state.ParentResources, n.res.RefNs.Identifiers)
n.relNS, err = findComposeNamespace(ctx, pl.s, pl.state.ParentResources, n.res.RefNs.Identifiers)
if err != nil {
return err
}
if n.relNS == nil {
return resource.ComposeNamespaceErrUnresolved(n.res.RefNs.Identifiers)
@@ -41,7 +45,7 @@ func (n *composeModule) Prepare(ctx context.Context, pl *payload) (err error) {
// Get related record field modules
for _, refMod := range n.res.RefMods {
var mod *types.Module
if !n.cfg.IgnoreStore && n.relNS.ID > 0 {
if n.relNS.ID > 0 {
mod, err = findComposeModuleStore(ctx, pl.s, n.relNS.ID, makeGenericFilter(refMod.Identifiers))
if err != nil {
return err
@@ -79,7 +83,7 @@ func (n *composeModule) Prepare(ctx context.Context, pl *payload) (err error) {
}
// Can't do anything else, since the NS doesn't yet exist
if n.cfg.IgnoreStore || n.relNS.ID <= 0 {
if n.relNS.ID <= 0 {
return nil
}

View File

@@ -16,14 +16,13 @@ func newComposeNamespaceFromResource(res *resource.ComposeNamespace, cfg *Encode
}
func (n *composeNamespace) Prepare(ctx context.Context, pl *payload) (err error) {
if !n.cfg.IgnoreStore {
// Try to get the original namespace
n.ns, err = findComposeNamespaceStore(ctx, pl.s, makeGenericFilter(n.res.Identifiers()))
if err != nil {
return err
}
} else {
n.res.Res.ID = 0
// Reset old identifiers
n.res.Res.ID = 0
// Try to get the original namespace
n.ns, err = findComposeNamespaceStore(ctx, pl.s, makeGenericFilter(n.res.Identifiers()))
if err != nil {
return err
}
if n.ns != nil {

View File

@@ -23,15 +23,16 @@ func newComposePageFromResource(res *resource.ComposePage, cfg *EncoderConfig) r
}
func (n *composePage) Prepare(ctx context.Context, pl *payload) (err error) {
// Reset old identifiers
n.res.Res.ID = 0
n.res.Res.SelfID = 0
n.res.Res.NamespaceID = 0
n.res.Res.ModuleID = 0
// Get related namespace
if !n.cfg.IgnoreStore {
n.relNS, err = findComposeNamespace(ctx, pl.s, pl.state.ParentResources, n.res.RefNs.Identifiers)
if err != nil {
return err
}
} else {
n.res.Res.ID = 0
n.relNS = resource.FindComposeNamespace(pl.state.ParentResources, n.res.RefNs.Identifiers)
n.relNS, err = findComposeNamespace(ctx, pl.s, pl.state.ParentResources, n.res.RefNs.Identifiers)
if err != nil {
return err
}
if n.relNS == nil {
return resource.ComposeNamespaceErrUnresolved(n.res.RefNs.Identifiers)
@@ -40,13 +41,9 @@ func (n *composePage) Prepare(ctx context.Context, pl *payload) (err error) {
// Get related module
// If this isn't a record page, there is no related module
if n.res.RefMod != nil {
if !n.cfg.IgnoreStore {
n.relMod, err = findComposeModule(ctx, pl.s, n.relNS.ID, pl.state.ParentResources, n.res.RefMod.Identifiers)
if err != nil {
return err
}
} else {
n.relMod = resource.FindComposeModule(pl.state.ParentResources, n.res.RefMod.Identifiers)
n.relMod, err = findComposeModule(ctx, pl.s, n.relNS.ID, pl.state.ParentResources, n.res.RefMod.Identifiers)
if err != nil {
return err
}
if n.relMod == nil {
return resource.ComposeModuleErrUnresolved(n.res.RefMod.Identifiers)
@@ -55,13 +52,9 @@ func (n *composePage) Prepare(ctx context.Context, pl *payload) (err error) {
// Get parent page
if n.res.RefParent != nil {
if !n.cfg.IgnoreStore {
n.relParent, err = findComposePage(ctx, pl.s, n.relNS.ID, pl.state.ParentResources, n.res.RefParent.Identifiers)
if err != nil {
return err
}
} else {
n.relParent = resource.FindComposePage(pl.state.ParentResources, n.res.RefParent.Identifiers)
n.relParent, err = findComposePage(ctx, pl.s, n.relNS.ID, pl.state.ParentResources, n.res.RefParent.Identifiers)
if err != nil {
return err
}
if n.relParent == nil {
return resource.ComposePageErrUnresolved(n.res.RefParent.Identifiers)
@@ -69,15 +62,10 @@ func (n *composePage) Prepare(ctx context.Context, pl *payload) (err error) {
}
// Get related workflows
var wf *atypes.Workflow
for _, wfr := range n.res.WfRefs {
if !n.cfg.IgnoreStore {
wf, err = findAutomationWorkflow(ctx, pl.s, pl.state.ParentResources, wfr.Identifiers)
if err != nil {
return err
}
} else {
wf = resource.FindAutomationWorkflow(pl.state.ParentResources, wfr.Identifiers)
wf, err := findAutomationWorkflow(ctx, pl.s, pl.state.ParentResources, wfr.Identifiers)
if err != nil {
return err
}
if wf == nil {
return resource.AutomationWorkflowErrUnresolved(wfr.Identifiers)
@@ -88,15 +76,10 @@ func (n *composePage) Prepare(ctx context.Context, pl *payload) (err error) {
}
// Get other related modules
var mod *types.Module
for _, mr := range n.res.ModRefs {
if !n.cfg.IgnoreStore {
mod, err = findComposeModule(ctx, pl.s, n.relNS.ID, pl.state.ParentResources, mr.Identifiers)
if err != nil {
return err
}
} else {
mod = resource.FindComposeModule(pl.state.ParentResources, mr.Identifiers)
mod, err := findComposeModule(ctx, pl.s, n.relNS.ID, pl.state.ParentResources, mr.Identifiers)
if err != nil {
return err
}
if mod == nil {
return resource.ComposeModuleErrUnresolved(mr.Identifiers)
@@ -107,15 +90,10 @@ func (n *composePage) Prepare(ctx context.Context, pl *payload) (err error) {
}
// Get related charts
var chr *types.Chart
for _, refChart := range n.res.RefCharts {
if !n.cfg.IgnoreStore {
chr, err = findComposeChart(ctx, pl.s, n.relNS.ID, pl.state.ParentResources, refChart.Identifiers)
if err != nil {
return err
}
} else {
chr = resource.FindComposeChart(pl.state.ParentResources, refChart.Identifiers)
chr, err := findComposeChart(ctx, pl.s, n.relNS.ID, pl.state.ParentResources, refChart.Identifiers)
if err != nil {
return err
}
if chr == nil {
return resource.ComposeChartErrUnresolved(refChart.Identifiers)
@@ -125,10 +103,6 @@ func (n *composePage) Prepare(ctx context.Context, pl *payload) (err error) {
}
}
if n.cfg.IgnoreStore {
return nil
}
// Try to get the original page
n.pg, err = findComposePageStore(ctx, pl.s, n.relNS.ID, makeGenericFilter(n.res.Identifiers()))
if err != nil {

View File

@@ -33,11 +33,6 @@ func NewComposeRecordFromResource(res *resource.ComposeRecord, cfg *EncoderConfi
}
func (n *composeRecord) Prepare(ctx context.Context, pl *payload) (err error) {
// @todo add this
if n.cfg.IgnoreStore {
return fmt.Errorf("IgnoreStore not supported for compose records")
}
// Get related namespace
n.relNS, err = findComposeNamespace(ctx, pl.s, pl.state.ParentResources, n.res.RefNs.Identifiers)
if err != nil {

View File

@@ -38,9 +38,6 @@ type (
// If you return an error, the encoding will terminate.
// If you return nil (ignore the error), the encoding will continue.
DeferNok func(error) error
// IgnoreStore prevents encoders from accessing the store for initial resources
IgnoreStore bool
}
accessControlRBACServicer interface {

View File

@@ -17,6 +17,9 @@ func newReportFromResource(res *resource.Report, cfg *EncoderConfig) resourceSta
}
func (n *report) Prepare(ctx context.Context, pl *payload) (err error) {
// Reset old identifiers
n.res.Res.ID = 0
// Try to get the original report
n.rp, err = findReportStore(ctx, pl.s, makeGenericFilter(n.res.Identifiers()))
if err != nil {

View File

@@ -16,10 +16,8 @@ func NewRoleFromResource(res *resource.Role, cfg *EncoderConfig) resourceState {
}
func (n *role) Prepare(ctx context.Context, pl *payload) (err error) {
if n.cfg.IgnoreStore {
n.res.Res.ID = 0
return nil
}
// Reset old identifiers
n.res.Res.ID = 0
n.rl, err = findRoleStore(ctx, pl.s, makeGenericFilter(n.res.Identifiers()))
if err != nil {

View File

@@ -16,10 +16,8 @@ func NewTemplateFromResource(res *resource.Template, cfg *EncoderConfig) resourc
}
func (n *template) Prepare(ctx context.Context, pl *payload) (err error) {
if n.cfg.IgnoreStore {
n.res.Res.ID = 0
return nil
}
// Reset old identifiers
n.res.Res.ID = 0
// Try to get the original template
n.t, err = findTemplateStore(ctx, pl.s, makeGenericFilter(n.res.Identifiers()))

View File

@@ -16,10 +16,8 @@ func NewUserFromResource(res *resource.User, cfg *EncoderConfig) resourceState {
}
func (n *user) Prepare(ctx context.Context, pl *payload) (err error) {
if n.cfg.IgnoreStore {
n.res.Res.ID = 0
return nil
}
// Reset old identifiers
n.res.Res.ID = 0
// Try to get the original user
n.u, err = findUserStore(ctx, pl.s, makeGenericFilter(n.res.Identifiers()))

View File

@@ -141,9 +141,6 @@ func mergeConfig(ec *EncoderConfig, rs *resource.EnvoyConfig) *EncoderConfig {
rr := &EncoderConfig{
OnExisting: rs.OnExisting,
SkipIf: rs.SkipIf,
// IgnoreStore is an encoder thing and should not be controlled from a resource
IgnoreStore: ec.IgnoreStore,
}
// Default to store config

View File

@@ -142,6 +142,7 @@ func (p *composePage) MarshalYAML() (interface{}, error) {
}
nn, err = addMap(nn,
"pageID", p.res.ID,
"handle", p.res.Handle,
"title", p.res.Title,
"description", p.res.Description,

View File

@@ -2,6 +2,7 @@ package yaml
import (
"fmt"
"strings"
"github.com/cortezaproject/corteza-server/compose/types"
"github.com/cortezaproject/corteza-server/pkg/envoy"
@@ -71,7 +72,10 @@ func (wrap *composePage) UnmarshalYAML(n *yaml.Node) (err error) {
}
return y7s.EachMap(n, func(k, v *yaml.Node) (err error) {
switch k.Value {
switch strings.ToLower(k.Value) {
case "id", "pageid":
return y7s.DecodeScalar(v, "page ID", &wrap.res.ID)
case "title":
return y7s.DecodeScalar(v, "page title", &wrap.res.Title)