from autotest_lib.server import crashcollect


def crashdumps(machine):
    hostname, user, passwd, port = parse_machine(machine, ssh_user,
                                                 ssh_port, ssh_pass)
    host = hosts.create_host(hostname, user=user, port=port, initialize=False,
                             password=passwd, auto_monitor=False)
    crashcollect.get_crashdumps(host, test_start_time)


job.parallel_simple(crashdumps, machines, log=False)
