-------------------------------------------------------------------------------
Test set: TestSuite
-------------------------------------------------------------------------------
Tests run: 126, Failures: 6, Errors: 0, Skipped: 9, Time elapsed: 1,894.587 sec <<< FAILURE!
testFindCatalogIsWriteableIfNotVersion1_5(org.jclouds.bluelock.vcloud.zone01.features.BluelockVCloudZone01CatalogClientLiveTest)  Time elapsed: 1.214 sec  <<< FAILURE!
java.lang.AssertionError: expected [true] but found [false]
	at org.testng.Assert.fail(Assert.java:94)
	at org.testng.Assert.failNotEquals(Assert.java:494)
	at org.testng.Assert.assertTrue(Assert.java:42)
	at org.testng.Assert.assertTrue(Assert.java:52)
	at org.jclouds.vcloud.features.CatalogClientLiveTest.testFindCatalogIsWriteableIfNotVersion1_5(CatalogClientLiveTest.java:53)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)

testCaptureVApp(org.jclouds.bluelock.vcloud.zone01.features.BluelockVCloudZone01VAppTemplateClientLiveTest)  Time elapsed: 511.337 sec  <<< FAILURE!
org.jclouds.compute.RunNodesException: error running 1 node group(vcdcap) location(https://zone01.bluelock.com/api/v1.0/vdc/9db4ee77-33e7-4b83-96be-eee9925eaa9b) image(https://zone01.bluelock.com/api/v1.0/vAppTemplate/vappTemplate-9aa0cb96-9c66-44f9-9a7b-565e419575ca) size(https://zone01.bluelock.com/api/v1.0/vAppTemplate/vappTemplate-9aa0cb96-9c66-44f9-9a7b-565e419575ca) options({})
Execution failures:
1) ExecutionException on vcdcap-788:
java.util.concurrent.ExecutionException: org.jclouds.vcloud.TaskInErrorStateException: error on task: {href=https://zone01.bluelock.com/api/v1.0/task/2cda362b-d7a7-4235-8112-dadb3c58f89f, owner={href=https://zone01.bluelock.com/api/v1.0/vApp/vm-b7212061-2946-4992-8bde-e65d45c0382a, name=Ubuntu1004, type=application/vnd.vmware.vcloud.vm+xml}, operation=Updated Virtual Machine Ubuntu1004(b7212061-2946-4992-8bde-e65d45c0382a), startTime=Sat Apr 27 14:14:48 PDT 2013, endTime=Sat Apr 27 14:15:07 PDT 2013, expiryTime=Tue Jun 11 14:14:48 PDT 2013, error=[majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]} error: [majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]
	at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:306)
	at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:293)
	at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116)
	at org.jclouds.concurrent.FutureIterables$1.run(FutureIterables.java:127)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.vcloud.TaskInErrorStateException: error on task: {href=https://zone01.bluelock.com/api/v1.0/task/2cda362b-d7a7-4235-8112-dadb3c58f89f, owner={href=https://zone01.bluelock.com/api/v1.0/vApp/vm-b7212061-2946-4992-8bde-e65d45c0382a, name=Ubuntu1004, type=application/vnd.vmware.vcloud.vm+xml}, operation=Updated Virtual Machine Ubuntu1004(b7212061-2946-4992-8bde-e65d45c0382a), startTime=Sat Apr 27 14:14:48 PDT 2013, endTime=Sat Apr 27 14:15:07 PDT 2013, expiryTime=Tue Jun 11 14:14:48 PDT 2013, error=[majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]} error: [majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]
	at org.jclouds.vcloud.predicates.TaskSuccess.apply(TaskSuccess.java:63)
	at org.jclouds.vcloud.predicates.TaskSuccess.apply(TaskSuccess.java:41)
	at org.jclouds.util.Predicates2$RetryablePredicate.apply(Predicates2.java:113)
	at org.jclouds.vcloud.compute.strategy.InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.waitForTask(InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java:226)
	at org.jclouds.vcloud.compute.strategy.InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.createNodeWithGroupEncodedIntoName(InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java:136)
	at org.jclouds.vcloud.compute.strategy.VCloudComputeServiceAdapter.createNodeWithGroupEncodedIntoName(VCloudComputeServiceAdapter.java:96)
	at org.jclouds.compute.strategy.impl.AdaptingComputeServiceStrategies.createNodeWithGroupEncodedIntoName(AdaptingComputeServiceStrategies.java:197)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:82)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:66)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
	at java.lang.Thread.getStackTrace(Thread.java:1503)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.createNodeInGroupWithNameAndTemplate(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:170)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.execute(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:125)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:214)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:234)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:239)
	at org.jclouds.vcloud.features.VAppTemplateClientLiveTest.testCaptureVApp(VAppTemplateClientLiveTest.java:122)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
1 error[s]
Node failures:
0 error[s]
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:226)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:234)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:239)
	at org.jclouds.vcloud.features.VAppTemplateClientLiveTest.testCaptureVApp(VAppTemplateClientLiveTest.java:122)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.vcloud.TaskInErrorStateException: error on task: {href=https://zone01.bluelock.com/api/v1.0/task/2cda362b-d7a7-4235-8112-dadb3c58f89f, owner={href=https://zone01.bluelock.com/api/v1.0/vApp/vm-b7212061-2946-4992-8bde-e65d45c0382a, name=Ubuntu1004, type=application/vnd.vmware.vcloud.vm+xml}, operation=Updated Virtual Machine Ubuntu1004(b7212061-2946-4992-8bde-e65d45c0382a), startTime=Sat Apr 27 14:14:48 PDT 2013, endTime=Sat Apr 27 14:15:07 PDT 2013, expiryTime=Tue Jun 11 14:14:48 PDT 2013, error=[majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]} error: [majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]
	at org.jclouds.vcloud.predicates.TaskSuccess.apply(TaskSuccess.java:63)
	at org.jclouds.vcloud.predicates.TaskSuccess.apply(TaskSuccess.java:41)
	at org.jclouds.util.Predicates2$RetryablePredicate.apply(Predicates2.java:113)
	at org.jclouds.vcloud.compute.strategy.InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.waitForTask(InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java:226)
	at org.jclouds.vcloud.compute.strategy.InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.createNodeWithGroupEncodedIntoName(InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java:136)
	at org.jclouds.vcloud.compute.strategy.VCloudComputeServiceAdapter.createNodeWithGroupEncodedIntoName(VCloudComputeServiceAdapter.java:96)
	at org.jclouds.compute.strategy.impl.AdaptingComputeServiceStrategies.createNodeWithGroupEncodedIntoName(AdaptingComputeServiceStrategies.java:197)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:82)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:66)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
	at java.lang.Thread.getStackTrace(Thread.java:1503)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.createNodeInGroupWithNameAndTemplate(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:170)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.execute(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:125)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:214)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:234)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:239)
	at org.jclouds.vcloud.features.VAppTemplateClientLiveTest.testCaptureVApp(VAppTemplateClientLiveTest.java:122)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
1 error[s]
Node failures:
0 error[s]
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:226)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:234)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:239)
	at org.jclouds.vcloud.features.VAppTemplateClientLiveTest.testCaptureVApp(VAppTemplateClientLiveTest.java:122)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)

testCreateAndRunAService(org.jclouds.bluelock.vcloud.zone01.compute.BluelockVCloudZone01ComputeServiceLiveTest)  Time elapsed: 10.987 sec  <<< FAILURE!
org.jclouds.compute.RunNodesException: error running 1 node group(vcds) location(https://zone01.bluelock.com/api/v1.0/vdc/9db4ee77-33e7-4b83-96be-eee9925eaa9b) image(https://zone01.bluelock.com/api/v1.0/vAppTemplate/vappTemplate-9aa0cb96-9c66-44f9-9a7b-565e419575ca) size(https://zone01.bluelock.com/api/v1.0/vAppTemplate/vappTemplate-9aa0cb96-9c66-44f9-9a7b-565e419575ca) options({blockOnPort:seconds=22:300, inboundPorts=[22, 8080], tags=[vcds], userMetadata={test=vcds}})
Execution failures:
1) ExecutionException on vcds-8aa:
java.util.concurrent.ExecutionException: org.jclouds.vcloud.TaskInErrorStateException: error on task: {href=https://zone01.bluelock.com/api/v1.0/task/56c9391c-eb39-42b8-b5d8-b57fc96db336, owner={href=https://zone01.bluelock.com/api/v1.0/vApp/vm-604b6da6-925d-4cb9-ad03-2b7fa6fc8df9, name=Ubuntu1004, type=application/vnd.vmware.vcloud.vm+xml}, operation=Updated Virtual Machine Ubuntu1004(604b6da6-925d-4cb9-ad03-2b7fa6fc8df9), startTime=Sat Apr 27 14:14:48 PDT 2013, endTime=Sat Apr 27 14:15:07 PDT 2013, expiryTime=Tue Jun 11 14:14:48 PDT 2013, error=[majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]} error: [majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]
	at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:306)
	at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:293)
	at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116)
	at org.jclouds.concurrent.FutureIterables$1.run(FutureIterables.java:127)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.vcloud.TaskInErrorStateException: error on task: {href=https://zone01.bluelock.com/api/v1.0/task/56c9391c-eb39-42b8-b5d8-b57fc96db336, owner={href=https://zone01.bluelock.com/api/v1.0/vApp/vm-604b6da6-925d-4cb9-ad03-2b7fa6fc8df9, name=Ubuntu1004, type=application/vnd.vmware.vcloud.vm+xml}, operation=Updated Virtual Machine Ubuntu1004(604b6da6-925d-4cb9-ad03-2b7fa6fc8df9), startTime=Sat Apr 27 14:14:48 PDT 2013, endTime=Sat Apr 27 14:15:07 PDT 2013, expiryTime=Tue Jun 11 14:14:48 PDT 2013, error=[majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]} error: [majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]
	at org.jclouds.vcloud.predicates.TaskSuccess.apply(TaskSuccess.java:63)
	at org.jclouds.vcloud.predicates.TaskSuccess.apply(TaskSuccess.java:41)
	at org.jclouds.util.Predicates2$RetryablePredicate.apply(Predicates2.java:113)
	at org.jclouds.vcloud.compute.strategy.InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.waitForTask(InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java:226)
	at org.jclouds.vcloud.compute.strategy.InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.createNodeWithGroupEncodedIntoName(InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java:136)
	at org.jclouds.vcloud.compute.strategy.VCloudComputeServiceAdapter.createNodeWithGroupEncodedIntoName(VCloudComputeServiceAdapter.java:96)
	at org.jclouds.compute.strategy.impl.AdaptingComputeServiceStrategies.createNodeWithGroupEncodedIntoName(AdaptingComputeServiceStrategies.java:197)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:82)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:66)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
	at java.lang.Thread.getStackTrace(Thread.java:1503)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.createNodeInGroupWithNameAndTemplate(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:170)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.execute(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:125)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:214)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:234)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.createAndRunAServiceInGroup(BaseComputeServiceLiveTest.java:673)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.testCreateAndRunAService(BaseComputeServiceLiveTest.java:660)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
1 error[s]
Node failures:
0 error[s]
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:226)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:234)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.createAndRunAServiceInGroup(BaseComputeServiceLiveTest.java:673)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.testCreateAndRunAService(BaseComputeServiceLiveTest.java:660)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.vcloud.TaskInErrorStateException: error on task: {href=https://zone01.bluelock.com/api/v1.0/task/56c9391c-eb39-42b8-b5d8-b57fc96db336, owner={href=https://zone01.bluelock.com/api/v1.0/vApp/vm-604b6da6-925d-4cb9-ad03-2b7fa6fc8df9, name=Ubuntu1004, type=application/vnd.vmware.vcloud.vm+xml}, operation=Updated Virtual Machine Ubuntu1004(604b6da6-925d-4cb9-ad03-2b7fa6fc8df9), startTime=Sat Apr 27 14:14:48 PDT 2013, endTime=Sat Apr 27 14:15:07 PDT 2013, expiryTime=Tue Jun 11 14:14:48 PDT 2013, error=[majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]} error: [majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]
	at org.jclouds.vcloud.predicates.TaskSuccess.apply(TaskSuccess.java:63)
	at org.jclouds.vcloud.predicates.TaskSuccess.apply(TaskSuccess.java:41)
	at org.jclouds.util.Predicates2$RetryablePredicate.apply(Predicates2.java:113)
	at org.jclouds.vcloud.compute.strategy.InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.waitForTask(InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java:226)
	at org.jclouds.vcloud.compute.strategy.InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.createNodeWithGroupEncodedIntoName(InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java:136)
	at org.jclouds.vcloud.compute.strategy.VCloudComputeServiceAdapter.createNodeWithGroupEncodedIntoName(VCloudComputeServiceAdapter.java:96)
	at org.jclouds.compute.strategy.impl.AdaptingComputeServiceStrategies.createNodeWithGroupEncodedIntoName(AdaptingComputeServiceStrategies.java:197)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:82)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:66)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
	at java.lang.Thread.getStackTrace(Thread.java:1503)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.createNodeInGroupWithNameAndTemplate(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:170)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.execute(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:125)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:214)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:234)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.createAndRunAServiceInGroup(BaseComputeServiceLiveTest.java:673)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.testCreateAndRunAService(BaseComputeServiceLiveTest.java:660)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
1 error[s]
Node failures:
0 error[s]
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:226)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:234)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.createAndRunAServiceInGroup(BaseComputeServiceLiveTest.java:673)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.testCreateAndRunAService(BaseComputeServiceLiveTest.java:660)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)

testAScriptExecutionAfterBootWithBasicTemplate(org.jclouds.bluelock.vcloud.zone01.compute.BluelockVCloudZone01ComputeServiceLiveTest)  Time elapsed: 62.079 sec  <<< FAILURE!
org.jclouds.compute.RunNodesException: error running 1 node group(vcdr) location(https://zone01.bluelock.com/api/v1.0/vdc/9db4ee77-33e7-4b83-96be-eee9925eaa9b) image(https://zone01.bluelock.com/api/v1.0/vAppTemplate/vappTemplate-9aa0cb96-9c66-44f9-9a7b-565e419575ca) size(https://zone01.bluelock.com/api/v1.0/vAppTemplate/vappTemplate-9aa0cb96-9c66-44f9-9a7b-565e419575ca) options({blockOnPort:seconds=22:120})
Execution failures:
1) ExecutionException on vcdr-4a9:
java.util.concurrent.ExecutionException: org.jclouds.vcloud.TaskInErrorStateException: error on task: {href=https://zone01.bluelock.com/api/v1.0/task/5130ed38-b290-4c82-8e73-d08540d6fe3d, owner={href=https://zone01.bluelock.com/api/v1.0/vApp/vm-082cb106-5174-48a3-8d52-11c6930829f4, name=Ubuntu1004, type=application/vnd.vmware.vcloud.vm+xml}, operation=Updated Virtual Machine Ubuntu1004(082cb106-5174-48a3-8d52-11c6930829f4), startTime=Sat Apr 27 14:17:46 PDT 2013, endTime=Sat Apr 27 14:17:51 PDT 2013, expiryTime=Tue Jun 11 14:17:46 PDT 2013, error=[majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]} error: [majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]
	at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:306)
	at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:293)
	at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116)
	at org.jclouds.concurrent.FutureIterables$1.run(FutureIterables.java:127)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.vcloud.TaskInErrorStateException: error on task: {href=https://zone01.bluelock.com/api/v1.0/task/5130ed38-b290-4c82-8e73-d08540d6fe3d, owner={href=https://zone01.bluelock.com/api/v1.0/vApp/vm-082cb106-5174-48a3-8d52-11c6930829f4, name=Ubuntu1004, type=application/vnd.vmware.vcloud.vm+xml}, operation=Updated Virtual Machine Ubuntu1004(082cb106-5174-48a3-8d52-11c6930829f4), startTime=Sat Apr 27 14:17:46 PDT 2013, endTime=Sat Apr 27 14:17:51 PDT 2013, expiryTime=Tue Jun 11 14:17:46 PDT 2013, error=[majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]} error: [majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]
	at org.jclouds.vcloud.predicates.TaskSuccess.apply(TaskSuccess.java:63)
	at org.jclouds.vcloud.predicates.TaskSuccess.apply(TaskSuccess.java:41)
	at org.jclouds.util.Predicates2$RetryablePredicate.apply(Predicates2.java:113)
	at org.jclouds.vcloud.compute.strategy.InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.waitForTask(InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java:226)
	at org.jclouds.vcloud.compute.strategy.InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.createNodeWithGroupEncodedIntoName(InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java:136)
	at org.jclouds.vcloud.compute.strategy.VCloudComputeServiceAdapter.createNodeWithGroupEncodedIntoName(VCloudComputeServiceAdapter.java:96)
	at org.jclouds.compute.strategy.impl.AdaptingComputeServiceStrategies.createNodeWithGroupEncodedIntoName(AdaptingComputeServiceStrategies.java:197)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:82)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:66)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
	at java.lang.Thread.getStackTrace(Thread.java:1503)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.createNodeInGroupWithNameAndTemplate(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:170)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.execute(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:125)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:214)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:234)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.testAScriptExecutionAfterBootWithBasicTemplate(BaseComputeServiceLiveTest.java:224)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
1 error[s]
Node failures:
0 error[s]
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:226)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:234)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.testAScriptExecutionAfterBootWithBasicTemplate(BaseComputeServiceLiveTest.java:224)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.vcloud.TaskInErrorStateException: error on task: {href=https://zone01.bluelock.com/api/v1.0/task/5130ed38-b290-4c82-8e73-d08540d6fe3d, owner={href=https://zone01.bluelock.com/api/v1.0/vApp/vm-082cb106-5174-48a3-8d52-11c6930829f4, name=Ubuntu1004, type=application/vnd.vmware.vcloud.vm+xml}, operation=Updated Virtual Machine Ubuntu1004(082cb106-5174-48a3-8d52-11c6930829f4), startTime=Sat Apr 27 14:17:46 PDT 2013, endTime=Sat Apr 27 14:17:51 PDT 2013, expiryTime=Tue Jun 11 14:17:46 PDT 2013, error=[majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]} error: [majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]
	at org.jclouds.vcloud.predicates.TaskSuccess.apply(TaskSuccess.java:63)
	at org.jclouds.vcloud.predicates.TaskSuccess.apply(TaskSuccess.java:41)
	at org.jclouds.util.Predicates2$RetryablePredicate.apply(Predicates2.java:113)
	at org.jclouds.vcloud.compute.strategy.InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.waitForTask(InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java:226)
	at org.jclouds.vcloud.compute.strategy.InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.createNodeWithGroupEncodedIntoName(InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java:136)
	at org.jclouds.vcloud.compute.strategy.VCloudComputeServiceAdapter.createNodeWithGroupEncodedIntoName(VCloudComputeServiceAdapter.java:96)
	at org.jclouds.compute.strategy.impl.AdaptingComputeServiceStrategies.createNodeWithGroupEncodedIntoName(AdaptingComputeServiceStrategies.java:197)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:82)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:66)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
	at java.lang.Thread.getStackTrace(Thread.java:1503)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.createNodeInGroupWithNameAndTemplate(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:170)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.execute(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:125)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:214)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:234)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.testAScriptExecutionAfterBootWithBasicTemplate(BaseComputeServiceLiveTest.java:224)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
1 error[s]
Node failures:
0 error[s]
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:226)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:234)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.testAScriptExecutionAfterBootWithBasicTemplate(BaseComputeServiceLiveTest.java:224)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)

testExtendedOptionsWithCustomizationScript(org.jclouds.bluelock.vcloud.zone01.features.BluelockVCloudZone01VmClientLiveTest)  Time elapsed: 0.762 sec  <<< FAILURE!
java.lang.AssertionError: expected [cat > /root/foo.txt<<EOF
I '"love"' {asc|!}*&
EOF
] but found [#!/bin/bash
if [ "$1" = "postcustomization" ]; then
  echo "post customization"
  touch /root/.postcustomization
  sleep 30
  #regenerate keys 
  /bin/rm /etc/ssh/ssh_host_*
  /usr/sbin/dpkg-reconfigure openssh-server
 echo "completed"
fi
cat > /root/foo.txt<<EOF
I '"love"' {asc|!}*&
EOF
]
	at org.testng.Assert.fail(Assert.java:94)
	at org.testng.Assert.failNotEquals(Assert.java:494)
	at org.testng.Assert.assertEquals(Assert.java:123)
	at org.testng.Assert.assertEquals(Assert.java:176)
	at org.testng.Assert.assertEquals(Assert.java:186)
	at org.jclouds.vcloud.features.VmClientLiveTest.checkApiOutput1_0_1(VmClientLiveTest.java:153)
	at org.jclouds.vcloud.features.VmClientLiveTest.checkApiOutput(VmClientLiveTest.java:141)
	at org.jclouds.vcloud.features.VmClientLiveTest.testExtendedOptionsWithCustomizationScript(VmClientLiveTest.java:119)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)

testCreateTwoNodesWithRunScript(org.jclouds.bluelock.vcloud.zone01.compute.BluelockVCloudZone01ComputeServiceLiveTest)  Time elapsed: 479.369 sec  <<< FAILURE!
org.jclouds.compute.RunNodesException: error running 2 nodes group(vcd) location(https://zone01.bluelock.com/api/v1.0/vdc/9db4ee77-33e7-4b83-96be-eee9925eaa9b) image(https://zone01.bluelock.com/api/v1.0/vAppTemplate/vappTemplate-9aa0cb96-9c66-44f9-9a7b-565e419575ca) size(https://zone01.bluelock.com/api/v1.0/vAppTemplate/vappTemplate-9aa0cb96-9c66-44f9-9a7b-565e419575ca) options({taskName=bootstrap, scriptPresent=true})
Execution failures:
1) ExecutionException on vcd-489:
java.util.concurrent.ExecutionException: org.jclouds.vcloud.TaskInErrorStateException: error on task: {href=https://zone01.bluelock.com/api/v1.0/task/7d805080-4bfb-4173-8642-42f64d255745, owner={href=https://zone01.bluelock.com/api/v1.0/vApp/vm-05e08817-eb09-4231-82d0-df170deb3504, name=Ubuntu1004, type=application/vnd.vmware.vcloud.vm+xml}, operation=Updated Virtual Machine Ubuntu1004(05e08817-eb09-4231-82d0-df170deb3504), startTime=Sat Apr 27 14:31:03 PDT 2013, endTime=Sat Apr 27 14:31:03 PDT 2013, expiryTime=Tue Jun 11 14:31:03 PDT 2013, error=[majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]} error: [majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]
	at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:306)
	at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:293)
	at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116)
	at org.jclouds.concurrent.FutureIterables$1.run(FutureIterables.java:127)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.vcloud.TaskInErrorStateException: error on task: {href=https://zone01.bluelock.com/api/v1.0/task/7d805080-4bfb-4173-8642-42f64d255745, owner={href=https://zone01.bluelock.com/api/v1.0/vApp/vm-05e08817-eb09-4231-82d0-df170deb3504, name=Ubuntu1004, type=application/vnd.vmware.vcloud.vm+xml}, operation=Updated Virtual Machine Ubuntu1004(05e08817-eb09-4231-82d0-df170deb3504), startTime=Sat Apr 27 14:31:03 PDT 2013, endTime=Sat Apr 27 14:31:03 PDT 2013, expiryTime=Tue Jun 11 14:31:03 PDT 2013, error=[majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]} error: [majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]
	at org.jclouds.vcloud.predicates.TaskSuccess.apply(TaskSuccess.java:63)
	at org.jclouds.vcloud.predicates.TaskSuccess.apply(TaskSuccess.java:41)
	at org.jclouds.util.Predicates2$RetryablePredicate.apply(Predicates2.java:113)
	at org.jclouds.vcloud.compute.strategy.InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.waitForTask(InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java:226)
	at org.jclouds.vcloud.compute.strategy.InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.createNodeWithGroupEncodedIntoName(InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java:143)
	at org.jclouds.vcloud.compute.strategy.VCloudComputeServiceAdapter.createNodeWithGroupEncodedIntoName(VCloudComputeServiceAdapter.java:96)
	at org.jclouds.compute.strategy.impl.AdaptingComputeServiceStrategies.createNodeWithGroupEncodedIntoName(AdaptingComputeServiceStrategies.java:197)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:82)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:66)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
	at java.lang.Thread.getStackTrace(Thread.java:1503)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.createNodeInGroupWithNameAndTemplate(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:170)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.execute(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:125)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:214)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.testCreateTwoNodesWithRunScript(BaseComputeServiceLiveTest.java:343)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
1 error[s]
Node failures:
0 error[s]
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:226)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.testCreateTwoNodesWithRunScript(BaseComputeServiceLiveTest.java:343)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.vcloud.TaskInErrorStateException: error on task: {href=https://zone01.bluelock.com/api/v1.0/task/7d805080-4bfb-4173-8642-42f64d255745, owner={href=https://zone01.bluelock.com/api/v1.0/vApp/vm-05e08817-eb09-4231-82d0-df170deb3504, name=Ubuntu1004, type=application/vnd.vmware.vcloud.vm+xml}, operation=Updated Virtual Machine Ubuntu1004(05e08817-eb09-4231-82d0-df170deb3504), startTime=Sat Apr 27 14:31:03 PDT 2013, endTime=Sat Apr 27 14:31:03 PDT 2013, expiryTime=Tue Jun 11 14:31:03 PDT 2013, error=[majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]} error: [majorErrorCode=500, message=Unable to perform this action. Contact your cloud administrator., minorErrorCode=INTERNAL_SERVER_ERROR, stackTrace=null, vendorSpecificErrorCode=null]
	at org.jclouds.vcloud.predicates.TaskSuccess.apply(TaskSuccess.java:63)
	at org.jclouds.vcloud.predicates.TaskSuccess.apply(TaskSuccess.java:41)
	at org.jclouds.util.Predicates2$RetryablePredicate.apply(Predicates2.java:113)
	at org.jclouds.vcloud.compute.strategy.InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.waitForTask(InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java:226)
	at org.jclouds.vcloud.compute.strategy.InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.createNodeWithGroupEncodedIntoName(InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java:143)
	at org.jclouds.vcloud.compute.strategy.VCloudComputeServiceAdapter.createNodeWithGroupEncodedIntoName(VCloudComputeServiceAdapter.java:96)
	at org.jclouds.compute.strategy.impl.AdaptingComputeServiceStrategies.createNodeWithGroupEncodedIntoName(AdaptingComputeServiceStrategies.java:197)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:82)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:66)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
	at java.lang.Thread.getStackTrace(Thread.java:1503)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.createNodeInGroupWithNameAndTemplate(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:170)
	at org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.execute(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:125)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:214)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.testCreateTwoNodesWithRunScript(BaseComputeServiceLiveTest.java:343)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
1 error[s]
Node failures:
0 error[s]
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:226)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.testCreateTwoNodesWithRunScript(BaseComputeServiceLiveTest.java:343)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)

