let create
    ?(max_processors = 1)
    ?gatk_jar_location
    ?mutect_jar_location
    ?run_program ?toolkit ?b37 uri =
  let open KEDSL in
  let host = Host.parse (uri // "ketrew_playground"in
  let meta_playground = Uri.of_string uri |> Uri.path in
  let run_program =
    match run_program with
    | None -> default_run_program ~host
    | Some r -> r
  in
  let toolkit =
    Option.value toolkit
      ~default:(Tool_providers.default_toolkit ()
                  ~run_program
                  ~host ~install_tools_path:(meta_playground // "install-tools")
                  ?gatk_jar_location ?mutect_jar_location)
  in
  Machine.create (sprintf "ssh-box-%s" uri)
    ~max_processors
    ~get_reference_genome:(fun name ->
        match name, b37 with
        | name, Some some37 when name = Reference_genome.name some37 -> some37
        | name, _ ->        
          Download_reference_genomes.get_reference_genome name
            ~toolkit ~host ~run_program
            ~destination_path:(meta_playground // "reference-genome"))
    ~host
    ~toolkit
    ~run_program
    ~work_dir:(meta_playground // "work")