IF YOU WOULD LIKE TO GET AN ACCOUNT, please write an email to s dot adaszewski at gmail dot com. User accounts are meant only to report issues and/or generate pull requests. This is a purpose-specific Git hosting for ADARED projects. Thank you for your understanding!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.3KB

  1. import makeArvadosRequest from 'make-arvados-request';
  2. import wbUuidsToCwl from 'wb-uuids-to-cwl';
  3. function wbParseWorkflowInputs(workflowDefinition, userInputs, errors) {
  4. // first see if all inputs are parseable
  5. const inputs = {};
  6. const main = workflowDefinition['$graph'].find(a => (a.id === '#main'));
  7. for (let k in userInputs) {
  8. try {
  9. let val = jsyaml.safeLoad(userInputs[k]);
  10. val = wbUuidsToCwl(val);
  11. k = k.split('/').slice(1).join('/');
  12. inputs[k] = (val === undefined ? null : val);
  13. } catch (exc) {
  14. errors.push('Error parsing ' + k + ': ' + exc.message);
  15. }
  16. }
  17. return inputs;
  18. }
  19. // params:
  20. // arvHost, arvToken, inputs,
  21. // projectUuid, workflowDefinition, workflowUuid
  22. // processName, processDescription
  23. function wbSubmitContainerRequest(params) {
  24. const { workflowDefinition, workflowUuid,
  25. processName, processDescription, inputs,
  26. arvHost, arvToken, projectUuid } = params;
  27. // prepare a request
  28. const req = {
  29. name: processName,
  30. description: processDescription,
  31. owner_uuid: projectUuid,
  32. container_image: 'arvados/jobs',
  33. properties: {
  34. template_uuid: workflowUuid
  35. },
  36. runtime_constraints: {
  37. API: true,
  38. vcpus: 1,
  39. ram: 1073741824
  40. },
  41. cwd: '/var/spool/cwl',
  42. command: [
  43. 'arvados-cwl-runner',
  44. '--local',
  45. '--api=containers',
  46. '--project-uuid=' + projectUuid,
  47. '--collection-cache-size=256',
  48. '/var/lib/cwl/workflow.json#main',
  49. '/var/lib/cwl/cwl.input.json'],
  50. output_path: '/var/spool/cwl',
  51. priority: 1,
  52. state: 'Committed',
  53. mounts: {
  54. 'stdout': {
  55. kind: 'file',
  56. path: '/var/spool/cwl/cwl.output.json'
  57. },
  58. '/var/spool/cwl': {
  59. kind: 'collection',
  60. writable: true
  61. },
  62. '/var/lib/cwl/workflow.json': {
  63. kind: 'json',
  64. content: workflowDefinition
  65. },
  66. '/var/lib/cwl/cwl.input.json': {
  67. kind: 'json',
  68. content: inputs
  69. }
  70. }
  71. };
  72. const prom = makeArvadosRequest(arvHost, arvToken,
  73. '/arvados/v1/container_requests',
  74. { method: 'POST', data: JSON.stringify(req) });
  75. return prom;
  76. }
  77. export { wbParseWorkflowInputs, wbSubmitContainerRequest };