import makeArvadosRequest from 'make-arvados-request'; import wbUuidsToCwl from 'wb-uuids-to-cwl'; function wbParseWorkflowInputs(workflowDefinition, userInputs, errors) { // first see if all inputs are parseable const inputs = {}; const main = workflowDefinition['$graph'].find(a => (a.id === '#main')); for (let k in userInputs) { try { let val = jsyaml.safeLoad(userInputs[k]); val = wbUuidsToCwl(val); k = k.split('/').slice(1).join('/'); inputs[k] = (val === undefined ? null : val); } catch (exc) { errors.push('Error parsing ' + k + ': ' + exc.message); } } return inputs; } // params: // arvHost, arvToken, inputs, // projectUuid, workflowDefinition, workflowUuid // processName, processDescription function wbSubmitContainerRequest(params) { const { workflowDefinition, workflowUuid, processName, processDescription, inputs, arvHost, arvToken, projectUuid } = params; // prepare a request const req = { name: processName, description: processDescription, owner_uuid: projectUuid, container_image: 'arvados/jobs', properties: { template_uuid: workflowUuid }, runtime_constraints: { API: true, vcpus: 1, ram: 1073741824 }, cwd: '/var/spool/cwl', command: [ 'arvados-cwl-runner', '--local', '--api=containers', '--project-uuid=' + projectUuid, '--collection-cache-size=256', '/var/lib/cwl/workflow.json#main', '/var/lib/cwl/cwl.input.json'], output_path: '/var/spool/cwl', priority: 1, state: 'Committed', mounts: { 'stdout': { kind: 'file', path: '/var/spool/cwl/cwl.output.json' }, '/var/spool/cwl': { kind: 'collection', writable: true }, '/var/lib/cwl/workflow.json': { kind: 'json', content: workflowDefinition }, '/var/lib/cwl/cwl.input.json': { kind: 'json', content: inputs } } }; const prom = makeArvadosRequest(arvHost, arvToken, '/arvados/v1/container_requests', { method: 'POST', data: JSON.stringify(req) }); return prom; } export { wbParseWorkflowInputs, wbSubmitContainerRequest };