Revision c2e8d493

b/kamaki/cli/commands/cyclades.py
392 392
            personality=self['personality']) for i in range(size)]
393 393
        if size == 1:
394 394
            return [self.client.create_server(**servers[0])]
395
        return self.client.async_run(self.client.create_server, servers)
395
        try:
396
            return self.client.async_run(self.client.create_server, servers)
397
        except Exception as e:
398
            if size == 1:
399
                raise e
400
            try:
401
                requested_names = [s['name'] for s in servers]
402
                spawned_servers = [dict(
403
                    name=s['name'],
404
                    id=s['id']) for s in self.client.list_servers() if (
405
                        s['name'] in requested_names)]
406
                self.error('Failed to build %s servers' % size)
407
                self.error('Found %s servers with a "%s" prefix:' % (
408
                    len(spawned_servers), prefix))
409
                self._print(spawned_servers, out=self._err)
410
                self.error('Check if any of these servers should be removed\n')
411
            except Exception as ne:
412
                self.error('Error (%s) while notifying about errors' % ne)
413
            finally:
414
                raise e
396 415

  
397 416
    @errors.generic.all
398 417
    @errors.cyclades.connection
......
401 420
    def _run(self, name, flavor_id, image_id):
402 421
        for r in self._create_cluster(
403 422
                name, flavor_id, image_id, size=self['cluster_size'] or 1):
404
            print 'HEY I GOT A', r
405
            print 'MKEY?????????????????'
406
            usernames = self._uuids2usernames([r['user_id'], r['tenant_id']])
423
            if not r:
424
                self.error('Create %s: server response was %s' % (name, r))
425
                continue
426
            usernames = self._uuids2usernames(
427
                [r['user_id'], r['tenant_id']])
407 428
            r['user_id'] += ' (%s)' % usernames[r['user_id']]
408 429
            r['tenant_id'] += ' (%s)' % usernames[r['tenant_id']]
409 430
            self._print(r, self.print_dict)
410 431
            if self['wait']:
411 432
                self._wait(r['id'], r['status'])
412
            self.error('')
433
            self.writeln('')
413 434

  
414 435
    def main(self, name, flavor_id, image_id):
415 436
        super(self.__class__, self)._run()
b/kamaki/clients/__init__.py
391 391
                if thread.isAlive():
392 392
                    unfinished[key] = thread
393 393
                elif thread.exception:
394
                    print 'HERE IS AN EXCEPTION MK?'
395 394
                    raise thread.exception
396 395
                else:
397 396
                    results[key] = thread.value
398
                print 'NO EXCEPTION', thread.value
399 397
            flying = unfinished
400 398
        sendlog.info('- - - wait for threads to finish')
401 399
        for key, thread in flying.items():
402 400
            if thread.isAlive():
403 401
                thread.join()
404
            elif thread.exception:
405
                print 'HERE IS AN EXCEPTION MK-2?'
402
            if thread.exception:
406 403
                raise thread.exception
407
            results[key] = thread.value
408
            print 'NO EXCEPTION-2', thread.value
409 404
        return results.values()
410 405

  
411 406
    def _raise_for_status(self, r):

Also available in: Unified diff