diff --git a/templates/create-user-add-to-vre.json.j2 b/templates/create-user-add-to-vre.json.j2 index 3e79706..eb4adac 100644 --- a/templates/create-user-add-to-vre.json.j2 +++ b/templates/create-user-add-to-vre.json.j2 @@ -150,25 +150,40 @@ }, { "name": "LAMBDA_TASK", - "taskReferenceName": "extract_group", + "taskReferenceName": "extract_groups", "type": "LAMBDA", "inputParameters": { "tree" : "${init.output.result.tree}", "groups" : "${look_up_groups.output.body}", - "scriptExpression": "function selectByPath(groups, path, level) { for (var i=0; i < groups.length; i++) {if (groups[i].name === path[level]) {if (level === path.length - 1) return groups[i];return selectByPath(groups[i].subGroups, path, level+1)}} return null; } return { 'group' : selectByPath($.groups, $.tree, 0)}" + "scriptExpression": "function selectByPath(groups, path, level, acc), { for (var i=0; i < groups.length; i++) {if (groups[i].name === path[level]) {acc.push(groups[i]); if (level === path.length - 1) return acc;return selectByPath(groups[i].subGroups, path, level+1, acc)}} return []; } return { 'groups' : selectByPath($.groups, $.tree, 0, [])}" } }, { - "name" : "pyrest", - "taskReferenceName" : "assign_user_to_group", - "type" : "SIMPLE", - "inputParameters" : { - "url" : "${init.input.keycloak_admin}/users/${select_user.output.result[0].id}/groups/${extract_group.output.result.group.id}", - "method" : "PUT", - "headers" : { - "Authorization" : "Bearer ${authorize.output.body.access_token}" - } + "name": "LAMBDA_TASK", + "taskReferenceName": "build_add_to_all_groups_tasks", + "type": "LAMBDA", + "inputParameters": { + "groups" : "${extract_groups.output.result.groups}", + "auth" : "${authorize.output.body.access_token", + "kc_user_url" : "${init.input.keycloak_admin}/users/${select_user.output.result[0].id}/groups/", + "scriptExpression": "inputs={};tasks=[];for(var i=0;i<$.groups.length;i++)group=$.groups[i],tasks.push({name:'pyrest',type:'SIMPLE',taskReferenceName:'user_to_group_'+i}),inputs['user_to_group_'+i]={ url : $.kc_user_url + group.id, method : 'PUT', headers: { Authorization : $.auth} };return {tasks:Java.to(tasks,'java.util.Map[]'),inputs:inputs};" } + }, + { + "name" : "fork_dynamic", + "type" : "FORK_JOIN_DYNAMIC", + "taskReferenceName" : "parallel_user_to_groups", + "inputParameters" : { + "tasks" : "${build_add_to_all_groups_tasks.output.result.tasks}", + "inputs" : "${build_add_to_all_groups_tasks.output.result.inputs}" + }, + "dynamicForkTasksParam": "tasks", + "dynamicForkTasksInputParamName": "inputs" + }, + { + "name" : "join", + "type" : "JOIN", + "taskReferenceName" : "join_parallel_user_to_groups" } ] }