Allow store encoders to post-process after all resources of type are imported

This commit is contained in:
Tomaž Jerman
2023-03-22 10:56:20 +01:00
parent 371bc96616
commit c0ce0f6ac5
5 changed files with 21 additions and 11 deletions
@@ -202,6 +202,10 @@ func (e StoreEncoder) encode{{.expIdent}}s(ctx context.Context, p envoyx.EncodeP
}
}
{{- if .envoy.store.postSetEncoder }}
err = e.post{{.expIdent}}sEncode(ctx, p, s, tree, nn)
{{end }}
return
}
+5
View File
@@ -203,6 +203,11 @@ import (
// enable or disable custom logic after the resource is imported
extendedEncoder: bool | *false
extendedSubResources: bool | *false
// temporary until I figure something better.
// the idea here is that after all of the modules (or resources x) are imported
// only then we should do something over them (like import records).
postSetEncoder: bool | *false
// enable or disable additional custom processing for determining
// resource references
+1 -6
View File
@@ -421,6 +421,7 @@ func (e StoreEncoder) encodeModules(ctx context.Context, p envoyx.EncodeParams,
return
}
}
err = e.postModulesEncode(ctx, p, s, tree, nn)
return
}
@@ -499,12 +500,6 @@ func (e StoreEncoder) encodeModule(ctx context.Context, p envoyx.EncodeParams, s
return
}
err = e.encodeModuleExtendSubResources(ctx, p, s, n, tree)
if err != nil {
err = errors.Wrap(err, "failed to encode extended sub resources")
return
}
return
}
+10 -4
View File
@@ -165,15 +165,21 @@ func (e StoreEncoder) encodeModuleExtend(ctx context.Context, p envoyx.EncodePar
return dl.ReplaceModel(ctx, models[0])
}
func (e StoreEncoder) encodeModuleExtendSubResources(ctx context.Context, p envoyx.EncodeParams, s store.Storer, n *envoyx.Node, tree envoyx.Traverser) (err error) {
cc := tree.ChildrenForResourceType(n, ComposeRecordDatasourceAuxType)
func (e StoreEncoder) postModulesEncode(ctx context.Context, p envoyx.EncodeParams, s store.Storer, tree envoyx.Traverser, nn envoyx.NodeSet) (err error) {
dl, err := e.grabDal(p)
if err != nil {
return
}
return e.encodeRecordDatasources(ctx, p, s, dl, cc, tree)
for _, n := range nn {
cc := tree.ChildrenForResourceType(n, ComposeRecordDatasourceAuxType)
err = e.encodeRecordDatasources(ctx, p, s, dl, cc, tree)
if err != nil {
return
}
}
return
}
func (e *StoreEncoder) grabDal(p envoyx.EncodeParams) (dl dal.FullService, err error) {
+1 -1
View File
@@ -106,8 +106,8 @@ module: {
}]
}
store: {
postSetEncoder: true
extendedEncoder: true
extendedSubResources: true
extendedFilterBuilder: true
extendedDecoder: true
}