@@ -1423,47 +1423,53 @@ public EC2RunInstancesResponse runInstances(EC2RunInstances request) {
14231423
14241424 // now actually deploy the vms
14251425 for ( int i =0 ; i < createInstances ; i ++ ) {
1426- CloudStackUserVm resp = getApi ().deployVirtualMachine (svcOffering .getId (),
1427- request .getTemplateId (), zoneId , null , null , null , null ,
1428- null , null , null , request .getKeyName (), null , (network != null ? network .getId () : null ),
1429- null , constructList (request .getGroupSet ()), request .getSize ().longValue (), request .getUserData ());
1430- EC2Instance vm = new EC2Instance ();
1431- vm .setId (resp .getId ().toString ());
1432- vm .setName (resp .getName ());
1433- vm .setZoneName (resp .getZoneName ());
1434- vm .setTemplateId (resp .getTemplateId ().toString ());
1435- if (resp .getSecurityGroupList () != null && resp .getSecurityGroupList ().size () > 0 ) {
1436- List <CloudStackSecurityGroup > securityGroupList = resp .getSecurityGroupList ();
1437- for (CloudStackSecurityGroup securityGroup : securityGroupList ) {
1438- EC2SecurityGroup param = new EC2SecurityGroup ();
1439- param .setId (securityGroup .getId ());
1440- param .setName (securityGroup .getName ());
1441- vm .addGroupName (param );
1426+ try {
1427+ CloudStackUserVm resp = getApi ().deployVirtualMachine (svcOffering .getId (),
1428+ request .getTemplateId (), zoneId , null , null , null , null ,
1429+ null , null , null , request .getKeyName (), null , (network != null ? network .getId () : null ),
1430+ null , constructList (request .getGroupSet ()), request .getSize ().longValue (), request .getUserData ());
1431+ EC2Instance vm = new EC2Instance ();
1432+ vm .setId (resp .getId ().toString ());
1433+ vm .setName (resp .getName ());
1434+ vm .setZoneName (resp .getZoneName ());
1435+ vm .setTemplateId (resp .getTemplateId ().toString ());
1436+ if (resp .getSecurityGroupList () != null && resp .getSecurityGroupList ().size () > 0 ) {
1437+ List <CloudStackSecurityGroup > securityGroupList = resp .getSecurityGroupList ();
1438+ for (CloudStackSecurityGroup securityGroup : securityGroupList ) {
1439+ EC2SecurityGroup param = new EC2SecurityGroup ();
1440+ param .setId (securityGroup .getId ());
1441+ param .setName (securityGroup .getName ());
1442+ vm .addGroupName (param );
1443+ }
14421444 }
1443- }
1444- vm .setState (resp .getState ());
1445- vm . setCreated ( resp .getCreated () );
1446- List < CloudStackNic > nicList = resp . getNics ();
1447- for ( CloudStackNic nic : nicList ) {
1448- if (nic .getIsDefault ()) {
1449- vm . setPrivateIpAddress ( nic . getIpaddress ()) ;
1450- break ;
1445+ vm . setState ( resp . getState ());
1446+ vm .setCreated (resp .getCreated ());
1447+ List < CloudStackNic > nicList = resp .getNics ( );
1448+ for ( CloudStackNic nic : nicList ) {
1449+ if ( nic . getIsDefault () ) {
1450+ vm . setPrivateIpAddress (nic .getIpaddress ());
1451+ break ;
1452+ }
14511453 }
1454+ vm .setIpAddress (resp .getIpAddress ());
1455+ vm .setAccountName (resp .getAccountName ());
1456+ vm .setDomainId (resp .getDomainId ());
1457+ vm .setHypervisor (resp .getHypervisor ());
1458+ vm .setServiceOffering ( svcOffering .getName ());
1459+ vm .setKeyPairName (resp .getKeyPairName ());
1460+ instances .addInstance (vm );
1461+ countCreated ++;
1462+ }catch (Exception e ){
1463+ logger .error ("Failed to deploy VM number: " + (i +1 ) +" due to error: " +e .getMessage ());
1464+ break ;
14521465 }
1453- vm .setIpAddress (resp .getIpAddress ());
1454- vm .setAccountName (resp .getAccountName ());
1455- vm .setDomainId (resp .getDomainId ());
1456- vm .setHypervisor (resp .getHypervisor ());
1457- vm .setServiceOffering ( svcOffering .getName ());
1458- vm .setKeyPairName (resp .getKeyPairName ());
1459- instances .addInstance (vm );
1460- countCreated ++;
14611466 }
14621467
14631468 if (0 == countCreated ) {
14641469 // TODO, we actually need to destroy left-over VMs when the exception is thrown
1465- throw new EC2ServiceException (ServerError .InsufficientInstanceCapacity , "Insufficient Instance Capacity " );
1470+ throw new EC2ServiceException (ServerError .InternalError , "Failed to deploy instances " );
14661471 }
1472+ logger .debug ("Could deploy " + countCreated + " VM's successfully" );
14671473
14681474 return instances ;
14691475 } catch ( Exception e ) {
0 commit comments