Skip to content

Commit

Permalink
fix: Add compatiblity mode to templateReference (argoproj#2765)
Browse files Browse the repository at this point in the history
  • Loading branch information
simster7 committed Apr 20, 2020
1 parent 7975952 commit 1c8318e
Showing 1 changed file with 19 additions and 8 deletions.
27 changes: 19 additions & 8 deletions ui/src/app/shared/template-resolution.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export function getResolvedTemplates(workflow: models.Workflow, node: models.Nod
let resolvedTemplate: models.Template = null;
const maxDepth = 10;
for (let i = 1; i < maxDepth + 1; i++) {
const templRef = resolveTemplateReference(scope.ResourceScope, scope.ResourceName, tmpTemplate);
const templRef = resolveTemplateReference(scope.ResourceScope, scope.ResourceName, tmpTemplate, scope.CompatibilityMode);
let tmpl = null;
if (templRef.StorageNeeded) {
tmpl = workflow.status.storedTemplates[templRef.StoredTemplateName];
Expand Down Expand Up @@ -46,32 +46,43 @@ export function getResolvedTemplates(workflow: models.Workflow, node: models.Nod

// resolveTemplateReference resolves the stored template name of a given template holder on the template scope and determines
// if it should be stored
function resolveTemplateReference(callerScope: ResourceScope, resourceName: string, caller: WorkflowStep): {StoredTemplateName: string; StorageNeeded: boolean} {
function resolveTemplateReference(
callerScope: ResourceScope,
resourceName: string,
caller: WorkflowStep,
compatibilityMode: boolean
): {StoredTemplateName: string; StorageNeeded: boolean} {
if (caller.templateRef) {
// We are calling an external WorkflowTemplate or ClusterWorkflowTemplate. Template storage is needed
// We need to determine if we're calling a WorkflowTemplate or a ClusterWorkflowTemplate
const referenceScope: ResourceScope = caller.templateRef.clusterScope ? 'cluster' : 'namespaced';
const name = referenceScope + '/' + caller.templateRef.name + '/' + caller.templateRef.template;
let name = caller.templateRef.name + '/' + caller.templateRef.template;
if (!compatibilityMode) {
name = referenceScope + '/' + name;
}
return {StoredTemplateName: name, StorageNeeded: true};
} else if (callerScope !== 'local') {
// Either a WorkflowTemplate or a ClusterWorkflowTemplate is calling a template inside itself. Template storage is needed
const name = callerScope + '/' + resourceName + '/' + caller.template;
let name = resourceName + '/' + caller.template;
if (!compatibilityMode) {
name = callerScope + '/' + name;
}
return {StoredTemplateName: name, StorageNeeded: true};
} else {
// A Workflow is calling a template inside itself. Template storage is not needed
return {StoredTemplateName: '', StorageNeeded: false};
}
}

function getTemplateScope(nodeStatus: models.NodeStatus): {ResourceScope: ResourceScope; ResourceName?: string} {
function getTemplateScope(nodeStatus: models.NodeStatus): {CompatibilityMode: boolean; ResourceScope: ResourceScope; ResourceName?: string} {
// For compatibility: an empty TemplateScope is a local scope
if (!nodeStatus.templateScope) {
return {ResourceScope: 'local'};
return {CompatibilityMode: true, ResourceScope: 'local'};
}
const split = nodeStatus.templateScope.split('/');
// For compatibility: an unspecified ResourceScope in a TemplateScope is a namespaced scope
if (split.length === 1) {
return {ResourceScope: 'namespaced', ResourceName: split[0]};
return {CompatibilityMode: true, ResourceScope: 'namespaced', ResourceName: split[0]};
}
return {ResourceScope: split[0] as ResourceScope, ResourceName: split[1]};
return {CompatibilityMode: false, ResourceScope: split[0] as ResourceScope, ResourceName: split[1]};
}

0 comments on commit 1c8318e

Please sign in to comment.