|
- 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 };
|