adding cloudstack dependancy

Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/86fd5cf2
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/86fd5cf2
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/86fd5cf2

Branch: refs/heads/master
Commit: 86fd5cf2447b75d66f0f2f6763698b352079cc9d
Parents: 26070cb
Author: asankasa <[email protected]>
Authored: Mon Oct 6 09:46:33 2014 +0530
Committer: Imesh Gunaratne <[email protected]>
Committed: Thu Nov 27 12:01:00 2014 +0530

----------------------------------------------------------------------
 .../cloud/controller/iaases/CloudstackIaas.java |  542 +++
 .../validate/CloudstackPartitionValidator.java  |   53 +
 .../apis/cloudstack/1.8.0-stratos/pom.xml       |  149 +
 .../jclouds/cloudstack/AsyncJobException.java   |   35 +
 .../org/jclouds/cloudstack/CloudStackApi.java   |  198 ++
 .../cloudstack/CloudStackApiMetadata.java       |   86 +
 .../jclouds/cloudstack/CloudStackContext.java   |   33 +
 .../jclouds/cloudstack/CloudStackDomainApi.java |   60 +
 .../jclouds/cloudstack/CloudStackGlobalApi.java |  127 +
 ...tSecurityGroupPairsToIndexedQueryParams.java |   55 +
 .../BindCIDRsToCommaDelimitedQueryParam.java    |   41 +
 .../BindIdListToCommaDelimitedQueryParam.java   |   41 +
 .../BindSnapshotPolicyScheduleToQueryParam.java |   43 +
 .../BindTemplateMetadataToQueryParams.java      |   53 +
 .../binders/ResourceLimitToQueryParams.java     |   48 +
 .../compute/CloudStackComputeService.java       |  180 +
 .../CloudStackComputeServiceContextModule.java  |  291 ++
 .../extensions/CloudStackImageExtension.java    |  160 +
 .../CloudStackSecurityGroupExtension.java       |  282 ++
 .../CloudStackSecurityGroupToSecurityGroup.java |   66 +
 .../functions/IngressRuleToIpPermission.java    |   58 +
 .../functions/OrphanedGroupsByZoneId.java       |   73 +
 .../functions/ServiceOfferingToHardware.java    |   50 +
 .../compute/functions/TemplateToImage.java      |   67 +
 .../functions/TemplateToOperatingSystem.java    |   88 +
 .../functions/VirtualMachineToNodeMetadata.java |  179 +
 .../compute/functions/ZoneToLocation.java       |   52 +
 .../compute/loaders/CreateUniqueKeyPair.java    |   64 +
 .../loaders/FindSecurityGroupOrCreate.java      |   74 +
 .../options/CloudStackTemplateOptions.java      |  509 +++
 .../predicates/AllNodesInGroupTerminated.java   |   53 +
 .../AdvancedNetworkOptionsConverter.java        |   59 +
 .../strategy/BasicNetworkOptionsConverter.java  |   41 +
 .../CloudStackComputeServiceAdapter.java        |  476 +++
 .../compute/strategy/OptionsConverter.java      |   43 +
 .../config/CloudStackHttpApiModule.java         |  154 +
 .../config/CloudStackParserModule.java          |  105 +
 .../cloudstack/config/CloudStackProperties.java |   52 +
 .../cloudstack/config/CredentialType.java       |   42 +
 .../org/jclouds/cloudstack/domain/Account.java  |  789 +++++
 .../org/jclouds/cloudstack/domain/Alert.java    |  163 +
 .../cloudstack/domain/AllocationState.java      |   42 +
 .../jclouds/cloudstack/domain/ApiKeyPair.java   |  125 +
 .../cloudstack/domain/AsyncCreateResponse.java  |  132 +
 .../org/jclouds/cloudstack/domain/AsyncJob.java |  456 +++
 .../cloudstack/domain/AsyncJobError.java        |  162 +
 .../jclouds/cloudstack/domain/Capabilities.java |  188 ++
 .../org/jclouds/cloudstack/domain/Capacity.java |  287 ++
 .../org/jclouds/cloudstack/domain/Cluster.java  |  302 ++
 .../cloudstack/domain/ConfigurationEntry.java   |  166 +
 .../jclouds/cloudstack/domain/DiskOffering.java |  295 ++
 .../org/jclouds/cloudstack/domain/Domain.java   |  220 ++
 .../domain/EncryptedPasswordAndPrivateKey.java  |  114 +
 .../org/jclouds/cloudstack/domain/Event.java    |  333 ++
 .../jclouds/cloudstack/domain/ExtractMode.java  |   32 +
 .../jclouds/cloudstack/domain/FirewallRule.java |  338 ++
 .../jclouds/cloudstack/domain/GuestIPType.java  |   60 +
 .../org/jclouds/cloudstack/domain/Host.java     |  959 ++++++
 .../cloudstack/domain/IPForwardingRule.java     |  396 +++
 .../java/org/jclouds/cloudstack/domain/ISO.java |  767 +++++
 .../cloudstack/domain/ISOExtraction.java        |  368 +++
 .../cloudstack/domain/ISOPermissions.java       |  178 +
 .../jclouds/cloudstack/domain/IngressRule.java  |  278 ++
 .../jclouds/cloudstack/domain/JobResult.java    |  126 +
 .../cloudstack/domain/LoadBalancerRule.java     |  444 +++
 .../cloudstack/domain/LoginResponse.java        |  339 ++
 .../java/org/jclouds/cloudstack/domain/NIC.java |  325 ++
 .../org/jclouds/cloudstack/domain/Network.java  |  748 +++++
 .../cloudstack/domain/NetworkOffering.java      |  356 ++
 .../domain/NetworkOfferingAvailabilityType.java |   45 +
 .../cloudstack/domain/NetworkService.java       |  242 ++
 .../jclouds/cloudstack/domain/NetworkType.java  |   45 +
 .../org/jclouds/cloudstack/domain/OSType.java   |  156 +
 .../cloudstack/domain/PermissionOperation.java  |   32 +
 .../java/org/jclouds/cloudstack/domain/Pod.java |  283 ++
 .../cloudstack/domain/PortForwardingRule.java   |  432 +++
 .../org/jclouds/cloudstack/domain/Project.java  |  242 ++
 .../cloudstack/domain/PublicIPAddress.java      |  568 ++++
 .../cloudstack/domain/ResourceLimit.java        |  271 ++
 .../cloudstack/domain/SecurityGroup.java        |  289 ++
 .../cloudstack/domain/ServiceOffering.java      |  457 +++
 .../org/jclouds/cloudstack/domain/Snapshot.java |  442 +++
 .../cloudstack/domain/SnapshotPolicy.java       |  217 ++
 .../domain/SnapshotPolicySchedule.java          |  127 +
 .../jclouds/cloudstack/domain/SshKeyPair.java   |  144 +
 .../jclouds/cloudstack/domain/StoragePool.java  |  483 +++
 .../jclouds/cloudstack/domain/StorageType.java  |   45 +
 .../jclouds/cloudstack/domain/SystemVmType.java |   44 +
 .../org/jclouds/cloudstack/domain/Template.java |  869 +++++
 .../cloudstack/domain/TemplateExtraction.java   |  368 +++
 .../cloudstack/domain/TemplateFilter.java       |   64 +
 .../cloudstack/domain/TemplateMetadata.java     |  236 ++
 .../cloudstack/domain/TemplatePermission.java   |  178 +
 .../jclouds/cloudstack/domain/TrafficType.java  |   66 +
 .../jclouds/cloudstack/domain/UsageRecord.java  |  515 +++
 .../org/jclouds/cloudstack/domain/User.java     |  412 +++
 .../org/jclouds/cloudstack/domain/VMGroup.java  |  217 ++
 .../cloudstack/domain/VirtualMachine.java       | 1049 ++++++
 .../jclouds/cloudstack/domain/VlanIPRange.java  |  372 +++
 .../org/jclouds/cloudstack/domain/Volume.java   |  739 +++++
 .../org/jclouds/cloudstack/domain/Zone.java     |  435 +++
 .../jclouds/cloudstack/domain/ZoneAndName.java  |   93 +
 .../domain/ZoneSecurityGroupNamePortsCidrs.java |  158 +
 .../jclouds/cloudstack/features/AccountApi.java |   78 +
 .../jclouds/cloudstack/features/AddressApi.java |  112 +
 .../cloudstack/features/AsyncJobApi.java        |   78 +
 .../cloudstack/features/ConfigurationApi.java   |   53 +
 .../cloudstack/features/DomainAccountApi.java   |   83 +
 .../cloudstack/features/DomainDomainApi.java    |   99 +
 .../cloudstack/features/DomainLimitApi.java     |   56 +
 .../cloudstack/features/DomainUserApi.java      |   91 +
 .../jclouds/cloudstack/features/EventApi.java   |   72 +
 .../cloudstack/features/FirewallApi.java        |  215 ++
 .../cloudstack/features/GlobalAccountApi.java   |  103 +
 .../cloudstack/features/GlobalAlertApi.java     |   60 +
 .../cloudstack/features/GlobalCapacityApi.java  |   60 +
 .../features/GlobalConfigurationApi.java        |   83 +
 .../cloudstack/features/GlobalDomainApi.java    |  108 +
 .../cloudstack/features/GlobalHostApi.java      |  247 ++
 .../cloudstack/features/GlobalOfferingApi.java  |  178 +
 .../cloudstack/features/GlobalPodApi.java       |  148 +
 .../features/GlobalStoragePoolApi.java          |   50 +
 .../cloudstack/features/GlobalUsageApi.java     |   63 +
 .../cloudstack/features/GlobalUserApi.java      |  114 +
 .../cloudstack/features/GlobalVlanApi.java      |  105 +
 .../cloudstack/features/GlobalZoneApi.java      |  103 +
 .../jclouds/cloudstack/features/GuestOSApi.java |  110 +
 .../cloudstack/features/HypervisorApi.java      |   62 +
 .../org/jclouds/cloudstack/features/ISOApi.java |  219 ++
 .../jclouds/cloudstack/features/LimitApi.java   |   58 +
 .../cloudstack/features/LoadBalancerApi.java    |  247 ++
 .../org/jclouds/cloudstack/features/NATApi.java |  169 +
 .../jclouds/cloudstack/features/NetworkApi.java |  119 +
 .../cloudstack/features/OfferingApi.java        |  148 +
 .../jclouds/cloudstack/features/ProjectApi.java |   76 +
 .../cloudstack/features/SSHKeyPairApi.java      |  118 +
 .../cloudstack/features/SecurityGroupApi.java   |  245 ++
 .../jclouds/cloudstack/features/SessionApi.java |   78 +
 .../cloudstack/features/SnapshotApi.java        |  171 +
 .../cloudstack/features/TemplateApi.java        |  294 ++
 .../jclouds/cloudstack/features/VMGroupApi.java |  114 +
 .../cloudstack/features/VirtualMachineApi.java  |  258 ++
 .../jclouds/cloudstack/features/VolumeApi.java  |  170 +
 .../jclouds/cloudstack/features/ZoneApi.java    |   79 +
 .../AddSessionKeyAndJSessionIdToRequest.java    |   55 +
 .../filters/AuthenticationFilter.java           |   30 +
 .../jclouds/cloudstack/filters/QuerySigner.java |  141 +
 .../functions/CloudStackFallbacks.java          |   52 +
 .../functions/CreateFirewallRulesForIP.java     |   90 +
 .../CreatePortForwardingRulesForIP.java         |   88 +
 .../functions/CreateSecurityGroupIfNeeded.java  |  111 +
 .../cloudstack/functions/DateToYyyyMmDd.java    |   39 +
 .../GetFirewallRulesByVirtualMachine.java       |   49 +
 .../GetIPForwardingRulesByVirtualMachine.java   |   48 +
 .../ParseAsyncJobFromHttpResponse.java          |   51 +
 .../ParseAsyncJobsFromHttpResponse.java         |   58 +
 .../ParseEventTypesFromHttpResponse.java        |   79 +
 .../ParseIdToNameEntryFromHttpResponse.java     |   46 +
 .../ParseIdToNameFromHttpResponse.java          |   80 +
 .../ParseLoginResponseFromHttpResponse.java     |   55 +
 .../functions/ParseNamesFromHttpResponse.java   |   77 +
 .../functions/ParseTypedAsyncJob.java           |  129 +
 .../ReuseOrAssociateNewPublicIPAddress.java     |  101 +
 .../StaticNATVirtualMachineInNetwork.java       |   78 +
 ...indowsLoginCredentialsFromEncryptedData.java |   80 +
 .../cloudstack/functions/ZoneIdToZone.java      |   47 +
 .../handlers/CloudStackErrorHandler.java        |  104 +
 ...ateSessionAndRetryOn401AndLogoutOnClose.java |   77 +
 .../internal/CloudStackContextImpl.java         |   67 +
 .../loaders/LoginWithPasswordCredentials.java   |   60 +
 .../options/AccountInDomainOptions.java         |   72 +
 .../cloudstack/options/AddClusterOptions.java   |  109 +
 .../cloudstack/options/AddHostOptions.java      |  112 +
 .../options/AddSecondaryStorageOptions.java     |   50 +
 .../options/AssignVirtualMachineOptions.java    |  156 +
 .../options/AssociateIPAddressOptions.java      |  101 +
 .../options/CreateAccountOptions.java           |   85 +
 .../options/CreateDiskOfferingOptions.java      |  119 +
 .../cloudstack/options/CreateDomainOptions.java |   70 +
 .../options/CreateFirewallRuleOptions.java      |  124 +
 .../options/CreateIPForwardingRuleOptions.java  |   54 +
 .../options/CreateLoadBalancerRuleOptions.java  |  135 +
 .../options/CreateNetworkOptions.java           |  236 ++
 .../cloudstack/options/CreatePodOptions.java    |   44 +
 .../options/CreateServiceOfferingOptions.java   |  209 ++
 .../options/CreateSnapshotOptions.java          |   64 +
 .../options/CreateTemplateOptions.java          |  127 +
 .../cloudstack/options/CreateUserOptions.java   |   70 +
 .../options/CreateVMGroupOptions.java           |   84 +
 .../options/CreateVlanIPRangeOptions.java       |  128 +
 .../cloudstack/options/CreateZoneOptions.java   |  174 +
 .../cloudstack/options/DeleteHostOptions.java   |   63 +
 .../cloudstack/options/DeleteISOOptions.java    |   51 +
 .../options/DeleteTemplateOptions.java          |   54 +
 .../options/DeployVirtualMachineOptions.java    |  378 +++
 .../cloudstack/options/ExtractISOOptions.java   |   51 +
 .../options/ExtractTemplateOptions.java         |   44 +
 .../options/GenerateUsageRecordsOptions.java    |   41 +
 .../cloudstack/options/ListAccountsOptions.java |  153 +
 .../cloudstack/options/ListAlertsOptions.java   |   65 +
 .../options/ListAsyncJobsOptions.java           |   93 +
 .../cloudstack/options/ListCapacityOptions.java |   86 +
 .../cloudstack/options/ListClustersOptions.java |  121 +
 .../ListConfigurationEntriesOptions.java        |  113 +
 .../options/ListDiskOfferingsOptions.java       |   88 +
 .../options/ListDomainChildrenOptions.java      |  131 +
 .../cloudstack/options/ListDomainsOptions.java  |  130 +
 .../options/ListEgressFirewallRulesOptions.java |  178 +
 .../cloudstack/options/ListEventsOptions.java   |  140 +
 .../options/ListFirewallRulesOptions.java       |  161 +
 .../cloudstack/options/ListHostsOptions.java    |  262 ++
 .../options/ListIPForwardingRulesOptions.java   |  137 +
 .../cloudstack/options/ListISOsOptions.java     |  247 ++
 .../options/ListLoadBalancerRulesOptions.java   |  198 ++
 .../options/ListNetworkOfferingsOptions.java    |  191 ++
 .../cloudstack/options/ListNetworksOptions.java |  207 ++
 .../cloudstack/options/ListOSTypesOptions.java  |   70 +
 .../cloudstack/options/ListPodsOptions.java     |   80 +
 .../options/ListPortForwardingRulesOptions.java |  118 +
 .../cloudstack/options/ListProjectsOptions.java |  170 +
 .../options/ListPublicIPAddressesOptions.java   |  207 ++
 .../options/ListResourceLimitsOptions.java      |  151 +
 .../options/ListSSHKeyPairsOptions.java         |   63 +
 .../options/ListSecurityGroupsOptions.java      |  137 +
 .../options/ListServiceOfferingsOptions.java    |  108 +
 .../options/ListSnapshotPoliciesOptions.java    |   63 +
 .../options/ListSnapshotsOptions.java           |  171 +
 .../options/ListStoragePoolsOptions.java        |  116 +
 .../options/ListTemplatesOptions.java           |  175 +
 .../options/ListUsageRecordsOptions.java        |  111 +
 .../cloudstack/options/ListUsersOptions.java    |  188 ++
 .../cloudstack/options/ListVMGroupsOptions.java |  132 +
 .../options/ListVirtualMachinesOptions.java     |  243 ++
 .../options/ListVlanIPRangesOptions.java        |  127 +
 .../cloudstack/options/ListVolumesOptions.java  |  233 ++
 .../cloudstack/options/ListZonesOptions.java    |   91 +
 .../cloudstack/options/RegisterISOOptions.java  |  138 +
 .../options/RegisterTemplateOptions.java        |  155 +
 .../options/StopVirtualMachineOptions.java      |   54 +
 .../options/UpdateAccountOptions.java           |   54 +
 .../options/UpdateClusterOptions.java           |  111 +
 .../options/UpdateDiskOfferingOptions.java      |  100 +
 .../cloudstack/options/UpdateDomainOptions.java |   70 +
 .../cloudstack/options/UpdateHostOptions.java   |   83 +
 .../cloudstack/options/UpdateISOOptions.java    |  126 +
 .../options/UpdateISOPermissionsOptions.java    |  113 +
 .../options/UpdateLoadBalancerRuleOptions.java  |   85 +
 .../options/UpdateNetworkOfferingOptions.java   |  120 +
 .../cloudstack/options/UpdatePodOptions.java    |   89 +
 .../options/UpdateServiceOfferingOptions.java   |  100 +
 .../options/UpdateTemplateOptions.java          |  114 +
 .../UpdateTemplatePermissionsOptions.java       |  118 +
 .../cloudstack/options/UpdateUserOptions.java   |  167 +
 .../options/UpdateVMGroupOptions.java           |   52 +
 .../cloudstack/options/UpdateZoneOptions.java   |  258 ++
 .../predicates/CorrectHypervisorForZone.java    |   94 +
 .../cloudstack/predicates/JobComplete.java      |   67 +
 .../predicates/LoadBalancerRuleActive.java      |   61 +
 .../predicates/NetworkOfferingPredicates.java   |   55 +
 .../predicates/NetworkPredicates.java           |  265 ++
 .../cloudstack/predicates/OSCategoryIn.java     |   86 +
 .../predicates/PublicIPAddressPredicates.java   |   85 +
 .../predicates/SecurityGroupPredicates.java     |  236 ++
 .../predicates/SshKeyPairPredicates.java        |   75 +
 .../predicates/TemplatePredicates.java          |   62 +
 .../cloudstack/predicates/UserPredicates.java   |  103 +
 .../predicates/VirtualMachineDestroyed.java     |   62 +
 .../predicates/VirtualMachineExpunged.java      |   56 +
 .../predicates/VirtualMachineRunning.java       |   64 +
 .../cloudstack/predicates/ZonePredicates.java   |   73 +
 .../BlockUntilJobCompletesAndReturnResult.java  |   69 +
 .../cloudstack/suppliers/GetCurrentUser.java    |   65 +
 .../suppliers/NetworksForCurrentUser.java       |   60 +
 .../suppliers/ProjectsForCurrentUser.java       |   60 +
 .../suppliers/ZoneIdToZoneSupplier.java         |   48 +
 .../jclouds/cloudstack/util/ApiKeyPairs.java    |   85 +
 .../util/SnapshotPolicySchedules.java           |   41 +
 .../services/org.jclouds.apis.ApiMetadata       |    1 +
 .../cloudstack/CloudStackApiMetadataTest.java   |   28 +
 .../CloudStackContextBuilderTest.java           |   34 +
 .../PasswordAuthenticationExpectTest.java       |   72 +
 ...oudStackComputeServiceAdapterExpectTest.java |  455 +++
 ...CloudStackComputeServiceAdapterLiveTest.java |  138 +
 .../CloudStackComputeServiceLiveTest.java       |   54 +
 .../compute/CloudStackExperimentLiveTest.java   |  119 +
 .../CloudStackImageExtensionExpectTest.java     |  192 ++
 .../CloudStackImageExtensionLiveTest.java       |   40 +
 ...udStackSecurityGroupExtensionExpectTest.java |  699 ++++
 ...loudStackSecurityGroupExtensionLiveTest.java |   65 +
 ...udStackSecurityGroupToSecurityGroupTest.java |   72 +
 .../IngressRuleToIpPermissionTest.java          |   58 +
 .../ServiceOfferingToHardwareTest.java          |   58 +
 .../compute/functions/TemplateToImageTest.java  |   78 +
 .../TemplateToOperatingSystemTest.java          |   86 +
 .../VirtualMachineToNodeMetadataTest.java       |  187 ++
 .../compute/functions/ZoneToLocationTest.java   |   61 +
 .../loaders/CreateUniqueKeyPairTest.java        |   69 +
 .../loaders/FindSecurityGroupOrCreateTest.java  |  257 ++
 .../options/CloudStackTemplateOptionsTest.java  |  261 ++
 .../compute/strategy/OptionsConverterTest.java  |  118 +
 .../cloudstack/domain/VirtualMachineTest.java   |   52 +
 .../features/AccountApiExpectTest.java          |  105 +
 .../cloudstack/features/AccountApiLiveTest.java |   80 +
 .../cloudstack/features/AccountApiTest.java     |   96 +
 .../cloudstack/features/AddressApiLiveTest.java |   94 +
 .../cloudstack/features/AddressApiTest.java     |  135 +
 .../features/AsyncJobApiLiveTest.java           |   72 +
 .../cloudstack/features/AsyncJobApiTest.java    |   94 +
 .../features/ConfigurationApiLiveTest.java      |   35 +
 .../features/ConfigurationApiTest.java          |   55 +
 .../features/DomainAccountApiLiveTest.java      |   64 +
 .../features/DomainAccountApiTest.java          |   67 +
 .../features/DomainDomainApiExpectTest.java     |  156 +
 .../features/DomainDomainApiLiveTest.java       |   97 +
 .../features/DomainLimitApiLiveTest.java        |   28 +
 .../cloudstack/features/DomainLimitApiTest.java |   57 +
 .../features/DomainUserApiLiveTest.java         |   91 +
 .../cloudstack/features/EventApiLiveTest.java   |   67 +
 .../cloudstack/features/EventApiTest.java       |   90 +
 .../features/FirewallApiExpectTest.java         |  402 +++
 .../features/FirewallApiLiveTest.java           |  233 ++
 .../cloudstack/features/FirewallApiTest.java    |  116 +
 .../features/GlobalAccountApiLiveTest.java      |   67 +
 .../features/GlobalAccountApiTest.java          |  109 +
 .../features/GlobalAlertApiLiveTest.java        |   53 +
 .../cloudstack/features/GlobalAlertApiTest.java |   73 +
 .../features/GlobalCapacityApiLiveTest.java     |   54 +
 .../features/GlobalCapacityApiTest.java         |   72 +
 .../GlobalConfigurationApiExpectTest.java       |  125 +
 .../GlobalConfigurationApiLiveTest.java         |   99 +
 .../features/GlobalDomainApiExpectTest.java     |  144 +
 .../features/GlobalDomainApiLiveTest.java       |   78 +
 .../features/GlobalHostApiExpectTest.java       |  375 +++
 .../features/GlobalHostApiLiveTest.java         |   91 +
 .../cloudstack/features/GlobalHostApiTest.java  |   51 +
 .../features/GlobalOfferingApiLiveTest.java     |  152 +
 .../features/GlobalOfferingApiTest.java         |  167 +
 .../features/GlobalPodApiExpectTest.java        |  206 ++
 .../features/GlobalPodApiLiveTest.java          |  129 +
 .../features/GlobalStoragePoolApiLiveTest.java  |   63 +
 .../features/GlobalStoragePoolApiTest.java      |   67 +
 .../features/GlobalUsageApiLiveTest.java        |   58 +
 .../cloudstack/features/GlobalUsageApiTest.java |  139 +
 .../features/GlobalUserApiLiveTest.java         |  104 +
 .../cloudstack/features/GlobalUserApiTest.java  |   98 +
 .../features/GlobalVlanApiExpectTest.java       |  169 +
 .../features/GlobalVlanApiLiveTest.java         |  135 +
 .../features/GlobalZoneApiExpectTest.java       |  133 +
 .../features/GlobalZoneApiLiveTest.java         |   65 +
 .../cloudstack/features/GuestOSApiLiveTest.java |   73 +
 .../cloudstack/features/GuestOSApiTest.java     |  130 +
 .../features/HypervisorApiLiveTest.java         |   43 +
 .../cloudstack/features/HypervisorApiTest.java  |   72 +
 .../cloudstack/features/ISOApiExpectTest.java   |  221 ++
 .../cloudstack/features/ISOApiLiveTest.java     |  108 +
 .../jclouds/cloudstack/features/ISOApiTest.java |  279 ++
 .../cloudstack/features/LimitApiLiveTest.java   |   44 +
 .../cloudstack/features/LimitApiTest.java       |   71 +
 .../features/LoadBalancerApiLiveTest.java       |  226 ++
 .../features/LoadBalancerApiTest.java           |  159 +
 .../cloudstack/features/NATApiLiveTest.java     |   63 +
 .../jclouds/cloudstack/features/NATApiTest.java |  200 ++
 .../cloudstack/features/NetworkApiLiveTest.java |  186 ++
 .../cloudstack/features/NetworkApiTest.java     |  171 +
 .../features/OfferingApiLiveTest.java           |  110 +
 .../cloudstack/features/OfferingApiTest.java    |  204 ++
 .../features/ProjectApiExpectTest.java          |   77 +
 .../cloudstack/features/ProjectApiLiveTest.java |   46 +
 .../cloudstack/features/ProjectApiTest.java     |   96 +
 .../features/SSHKeyPairApiExpectTest.java       |  182 +
 .../features/SSHKeyPairApiLiveTest.java         |   92 +
 .../cloudstack/features/SSHKeyPairApiTest.java  |  135 +
 .../features/SecurityGroupApiLiveTest.java      |  234 ++
 .../features/SecurityGroupApiTest.java          |  297 ++
 .../features/SessionApiExpectTest.java          |   95 +
 .../cloudstack/features/SessionApiLiveTest.java |   91 +
 .../features/SnapshotApiLiveTest.java           |  141 +
 .../cloudstack/features/SnapshotApiTest.java    |  240 ++
 .../features/TemplateApiLiveTest.java           |  217 ++
 .../cloudstack/features/TemplateApiTest.java    |  400 +++
 .../cloudstack/features/VMGroupApiLiveTest.java |   69 +
 .../cloudstack/features/VMGroupApiTest.java     |  169 +
 .../features/VirtualMachineApiExpectTest.java   |  119 +
 .../features/VirtualMachineApiLiveTest.java     |  397 +++
 .../features/VirtualMachineApiTest.java         |  259 ++
 .../features/VolumeApiExpectTest.java           |   61 +
 .../cloudstack/features/VolumeApiLiveTest.java  |  264 ++
 .../cloudstack/features/VolumeApiTest.java      |  162 +
 .../cloudstack/features/ZoneApiExpectTest.java  |   90 +
 .../cloudstack/features/ZoneApiLiveTest.java    |   72 +
 .../cloudstack/features/ZoneApiTest.java        |  105 +
 .../cloudstack/filters/QuerySignerTest.java     |   95 +
 ...ockUntilJobCompletesAndReturnResultTest.java |  116 +
 .../CreateSecurityGroupIfNeededTest.java        |  233 ++
 .../ParseAsyncJobFromHttpResponseTest.java      |  217 ++
 .../ParseAsyncJobsFromHttpResponseTest.java     |   54 +
 .../ReuseOrAssociateNewPublicIPAddressTest.java |  103 +
 ...taticNATVirtualMachineInNetworkLiveTest.java |  121 +
 ...wsLoginCredentialsFromEncryptedDataTest.java |   68 +
 .../handlers/CloudStackErrorHandlerTest.java    |  159 +
 ...essionAndRetryOn401AndLogoutOnCloseTest.java |   86 +
 .../internal/BaseCloudStackApiLiveTest.java     |  274 ++
 .../internal/BaseCloudStackApiTest.java         |   56 +
 ...oudStackComputeServiceContextExpectTest.java |  259 ++
 .../internal/BaseCloudStackExpectTest.java      |   84 +
 .../LoginWithPasswordCredentialsTest.java       |   78 +
 .../options/AddClusterOptionsTest.java          |   87 +
 .../cloudstack/options/AddHostOptionsTest.java  |   88 +
 .../options/AddSecondaryStorageOptionsTest.java |   42 +
 .../options/AssociateIPAddressOptionsTest.java  |   54 +
 .../options/CreateAccountOptionsTest.java       |   63 +
 .../options/CreateDiskOfferingOptionsTest.java  |   66 +
 .../CreateIPForwardingRuleOptionsTest.java      |   41 +
 .../options/CreateNetworkOptionsTest.java       |  132 +
 .../options/CreatePodOptionsTest.java           |   43 +
 .../CreateServiceOfferingOptionsTest.java       |  123 +
 .../options/CreateUserOptionsTest.java          |   52 +
 .../options/CreateVlanIPRangeOptionsTest.java   |  132 +
 .../options/DeleteHostOptionsTest.java          |   53 +
 .../GenerateUsageRecordsOptionsTest.java        |   41 +
 .../options/ListAccountsOptionsTest.java        |  108 +
 .../options/ListAlertsOptionsTest.java          |   63 +
 .../options/ListAsyncJobsOptionsTest.java       |   66 +
 .../options/ListCapacityOptionsTest.java        |   86 +
 .../options/ListClustersOptionsTest.java        |  132 +
 .../options/ListDiskOfferingsOptionsTest.java   |   64 +
 .../options/ListHostsOptionsTest.java           |  165 +
 .../ListIPForwardingRulesOptionsTest.java       |   87 +
 .../cloudstack/options/ListISOsOptionsTest.java |  167 +
 .../ListLoadBalancerRulesOptionsTest.java       |  131 +
 .../ListNetworkOfferingsOptionsTest.java        |  132 +
 .../options/ListNetworksOptionsTest.java        |  142 +
 .../options/ListOSTypesOptionsTest.java         |   52 +
 .../cloudstack/options/ListPodsOptionsTest.java |   87 +
 .../ListPortForwardingRulesOptionsTest.java     |   66 +
 .../ListPublicIPAddressesOptionsTest.java       |  131 +
 .../options/ListSecurityGroupsOptionsTest.java  |   85 +
 .../ListServiceOfferingsOptionsTest.java        |   74 +
 .../options/ListStoragePoolsOptionsTest.java    |  119 +
 .../options/ListTemplatesOptionsTest.java       |  114 +
 .../options/ListUsageRecordsOptionsTest.java    |   95 +
 .../options/ListUsersOptionsTest.java           |  129 +
 .../options/ListVirtualMachesOptionsTest.java   |  152 +
 .../options/ListVlanIPRangesOptionsTest.java    |  132 +
 .../options/ListZonesOptionsTest.java           |   63 +
 .../options/UpdateAccountOptionsTest.java       |   41 +
 .../options/UpdateClusterOptionsTest.java       |   65 +
 .../options/UpdateDiskOfferingOptionsTest.java  |   54 +
 .../options/UpdateHostOptionsTest.java          |   66 +
 .../UpdateNetworkOfferingOptionsTest.java       |   64 +
 .../options/UpdatePodOptionsTest.java           |   98 +
 .../UpdateServiceOfferingOptionsTest.java       |   54 +
 .../options/UpdateUserOptionsTest.java          |  107 +
 .../DeleteIPForwardingRuleResponseTest.java     |   37 +
 .../parse/DeleteNetworkResponseTest.java        |   37 +
 .../DeployVirtualMachineResponse3xTest.java     |   37 +
 .../DeployVirtualMachineResponse4xTest.java     |   38 +
 .../parse/DisableStaticNATResponseTest.java     |   37 +
 ...TResponseWhereResponseDoesntHaveJobTest.java |   42 +
 .../cloudstack/parse/JobResultResponseTest.java |   38 +
 .../parse/ListAccountsResponseTest.java         |   96 +
 .../parse/ListAlertsResponseTest.java           |   69 +
 .../parse/ListCapabilitiesResponseTest.java     |   39 +
 .../parse/ListCapacityResponseTest.java         |   48 +
 .../parse/ListClustersResponseTest.java         |   65 +
 .../ListConfigurationEntriesResponseTest.java   |   63 +
 .../parse/ListDiskOfferingsResponseTest.java    |   54 +
 .../parse/ListDomainsResponseTest.java          |   60 +
 .../parse/ListFirewallRulesResponseTest.java    |   66 +
 .../cloudstack/parse/ListHostsResponseTest.java |  153 +
 .../parse/ListHypervisorsResponseTest.java      |   47 +
 .../ListIPForwardingRulesResponseTest.java      |   45 +
 .../ListLoadBalancerRulesResponseTest.java      |   64 +
 .../parse/ListNetworkOfferingsResponseTest.java |   50 +
 .../parse/ListNetworksResponseTest.java         |   87 +
 .../parse/ListOSCategoriesResponseTest.java     |   49 +
 .../parse/ListOSTypesResponseTest.java          |  192 ++
 .../cloudstack/parse/ListPodsResponseTest.java  |   64 +
 .../ListPortForwardingRulesResponseTest.java    |   65 +
 .../ListPublicIPAddressesResponseTest.java      |   47 +
 .../parse/ListSSHKeyPairsResponseTest.java      |   60 +
 .../parse/ListSecurityGroupsResponseTest.java   |   89 +
 .../parse/ListServiceOfferingsResponseTest.java |   54 +
 .../parse/ListStoragePoolsResponseTest.java     |   67 +
 .../parse/ListTemplatesResponseTest.java        |   77 +
 .../parse/ListUsageRecordsResponseTest.java     |   72 +
 .../ListVirtualMachinesResponse3xTest.java      |   76 +
 .../parse/ListVirtualMachinesResponseTest.java  |   75 +
 .../parse/ListVlanIPRangesResponseTest.java     |   71 +
 .../cloudstack/parse/ListZonesResponseTest.java |   44 +
 .../parse/RegisterUserKeysResponseTest.java     |   40 +
 .../cloudstack/predicates/JobCompleteTest.java  |   79 +
 .../predicates/NetworkPredicatesTest.java       |  109 +
 .../cloudstack/predicates/OSCategoryInTest.java |   85 +
 .../PublicIPAddressPredicatesTest.java          |   64 +
 .../predicates/SecurityGroupPredicatesTest.java |  107 +
 .../predicates/TemplatePredicatesTest.java      |   49 +
 .../predicates/UserPredicatesTest.java          |   64 +
 .../predicates/VirtualMachineDestroyedTest.java |   68 +
 .../predicates/VirtualMachineExpungedTest.java  |   64 +
 .../predicates/VirtualMachineRunningTest.java   |   82 +
 .../predicates/ZonePredicatesTest.java          |   51 +
 .../src/test/resources/addclusterresponse.json  |    1 +
 .../src/test/resources/addhostresponse.json     |    2 +
 .../resources/addsecondarystorageresponse.json  |    3 +
 .../authorizesecuritygroupingressresponse.json  |    2 +
 .../cancelhostmaintenanceresponse.json          |    1 +
 .../test/resources/createdomainresponse.json    |    2 +
 .../createegressfirewallrulesresponse.json      |    1 +
 .../resources/createfirewallrulesresponse.json  |    1 +
 .../test/resources/createkeypairresponse.json   |    1 +
 .../src/test/resources/createpodresponse.json   |    1 +
 .../createportforwardingrulesresponse.json      |    1 +
 .../resources/createsecuritygroupresponse.json  |    3 +
 .../resources/createsshkeypairresponse-2.json   |    4 +
 .../resources/createsshkeypairresponse.json     |    4 +
 .../createtemplateresponse-imageextension.json  |    1 +
 .../test/resources/createtemplateresponse.json  |    1 +
 .../resources/createvlaniprangeresponse.json    |    1 +
 .../src/test/resources/createzoneresponse.json  |    4 +
 .../test/resources/deletedomainresponse.json    |    1 +
 .../deleteegressfirewallrulesresponse.json      |    1 +
 .../resources/deletefirewallrulesresponse.json  |    1 +
 .../deleteipforwardingruleresponse.json         |    1 +
 .../test/resources/deletenetworkresponse.json   |    1 +
 .../deleteportforwardingrulesresponse.json      |    1 +
 .../resources/deletesecuritygroupresponse.json  |    1 +
 .../test/resources/deletetemplateresponse.json  |    1 +
 .../src/test/resources/deletezoneresponse.json  |    1 +
 .../resources/deployvirtualmachineresponse.json |    1 +
 .../deployvirtualmachineresponse4x.json         |    1 +
 .../resources/disablestaticnatresponse.json     |    1 +
 .../enablestaticnatresponse-withoutjob.json     |    1 +
 .../src/test/resources/getdomainresponse.json   |    2 +
 .../getegressfirewallrulesresponse.json         |    2 +
 .../resources/getfirewallrulesresponse.json     |    2 +
 .../src/test/resources/getisoresponse.json      |    1 +
 .../getportforwardingrulesresponse.json         |    2 +
 .../resources/getsecuritygroupresponse.json     |    1 +
 ...getsecuritygroupresponse_extension_byid.json |    1 +
 ...uritygroupresponse_extension_byid_empty.json |    1 +
 ...ygroupresponse_extension_byid_with_cidr.json |    1 +
 ...groupresponse_extension_byid_with_group.json |    1 +
 .../test/resources/getvmpasswordresponse.json   |    2 +
 .../src/test/resources/getzoneresponse-2.json   |    1 +
 .../src/test/resources/getzoneresponse.json     |    1 +
 .../test/resources/listaccountsresponse.json    |    1 +
 .../src/test/resources/listalertsresponse.json  |    1 +
 .../test/resources/listasyncjobsresponse.json   | 3119 ++++++++++++++++++
 .../resources/listcapabilitiesresponse.json     |    1 +
 .../test/resources/listcapacityresponse.json    |    1 +
 .../test/resources/listclustersresponse.json    |    1 +
 .../resources/listconfigurationsresponse.json   |    4 +
 .../resources/listdiskofferingsresponse.json    |    1 +
 .../resources/listdomainchildrenresponse.json   |    3 +
 .../src/test/resources/listdomainsresponse.json |    3 +
 .../listegressfirewallrulesresponse.json        |    4 +
 .../test/resources/listeventtypesresponse.json  |    1 +
 .../resources/listfirewallrulesresponse.json    |    4 +
 .../src/test/resources/listhostsresponse.json   |    5 +
 .../test/resources/listhypervisorsresponse.json |    1 +
 .../listipforwardingrulesresponse.json          |   17 +
 .../src/test/resources/listisosresponse.json    |    1 +
 .../listloadbalancerrulesresponse.json          |    2 +
 .../resources/listnetworkofferingsresponse.json |    1 +
 .../test/resources/listnetworksresponse-2.json  |    1 +
 .../test/resources/listnetworksresponse.json    |    1 +
 .../resources/listoscategoriesresponse.json     |    1 +
 .../src/test/resources/listostypesresponse.json |    1 +
 .../src/test/resources/listpodsresponse.json    |    1 +
 .../listportforwardingrulesresponse.json        |    1 +
 .../test/resources/listprojectsresponse.json    |    1 +
 .../listpublicipaddressesresponse.json          |    1 +
 .../resources/listresourcelimitsresponse.json   |    9 +
 .../resources/listsecuritygroupsresponse.json   |    1 +
 .../resources/listserviceofferingsresponse.json |    1 +
 .../test/resources/listsshkeypairsresponse.json |    2 +
 .../resources/liststoragepoolsresponse.json     |    1 +
 .../listtemplatesresponse-imageextension.json   |    1 +
 .../test/resources/listtemplatesresponse.json   |    1 +
 .../resources/listusagerecordsresponse.json     |    1 +
 ...tvirtualmachinesresponse-imageextension.json |    2 +
 .../resources/listvirtualmachinesresponse.json  |    1 +
 .../listvirtualmachinesresponse3x.json          |    1 +
 .../resources/listvlaniprangesresponse.json     |    1 +
 .../listvolumesreponse-imageextension.json      |    2 +
 .../listvolumesresponse-imageextension.json     |    1 +
 .../src/test/resources/listzonesresponse.json   |    1 +
 .../resources/listzonesresponse_single.json     |    1 +
 .../src/test/resources/loginresponse.json       |    1 +
 .../src/test/resources/logoutresponse.json      |    1 +
 .../preparehostformaintenanceresponse.json      |    1 +
 ...asyncjobresultresponse-authorizeingress.json |   34 +
 ...tresponse-createtemplate-imageextension.json |    2 +
 ...ryasyncjobresultresponse-createtemplate.json |    1 +
 ...ueryasyncjobresultresponse-createvolume.json |   36 +
 ...yasyncjobresultresponse-extracttemplate.json |    1 +
 .../queryasyncjobresultresponse-ipaddress.json  |    1 +
 ...asyncjobresultresponse-ipforwardingrule.json |    1 +
 ...ponse-stopvirtualmachine-imageextension.json |    2 +
 ...ltresponse-virtualmachine-securitygroup.json |   73 +
 ...ryasyncjobresultresponse-virtualmachine.json |   53 +
 .../test/resources/reconnecthostresponse.json   |    1 +
 .../src/test/resources/registerisoresponse.json |    3 +
 .../resources/registersshkeypairresponse.json   |    2 +
 .../resources/registeruserkeysresponse.json     |    1 +
 .../revokesecuritygroupingressresponse.json     |    2 +
 ...opvirtualmachineresponse-imageextension.json |    1 +
 .../test/resources/updateclusterresponse.json   |    1 +
 .../resources/updateconfigurationsresponse.json |    2 +
 .../test/resources/updatedomainresponse.json    |    2 +
 .../src/test/resources/updatehostresponse.json  |    2 +
 .../src/test/resources/updatepodresponse.json   |    1 +
 .../src/test/resources/updatezoneresponse.json  |    4 +
 .../pom.xml                                     |    5 +
 615 files changed, 72016 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/CloudstackIaas.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/CloudstackIaas.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/CloudstackIaas.java
new file mode 100644
index 0000000..6f17725
--- /dev/null
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/CloudstackIaas.java
@@ -0,0 +1,542 @@
+package org.apache.stratos.cloud.controller.iaases;
+
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.cloud.controller.exception.CloudControllerException;
+import org.apache.stratos.cloud.controller.exception.InvalidHostException;
+import org.apache.stratos.cloud.controller.exception.InvalidRegionException;
+import org.apache.stratos.cloud.controller.exception.InvalidZoneException;
+import org.apache.stratos.cloud.controller.interfaces.Iaas;
+import org.apache.stratos.cloud.controller.jcloud.ComputeServiceBuilderUtil;
+import org.apache.stratos.cloud.controller.pojo.IaasProvider;
+import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
+import 
org.apache.stratos.cloud.controller.validate.CloudStackPartitionValidator;
+import 
org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator;
+import org.jclouds.cloudstack.CloudStackApi;
+import org.jclouds.cloudstack.compute.options.CloudStackTemplateOptions;
+import org.jclouds.cloudstack.domain.*;
+import org.jclouds.cloudstack.features.VolumeApi;
+import org.jclouds.cloudstack.options.ListPublicIPAddressesOptions;
+import org.jclouds.cloudstack.options.ListZonesOptions;
+import org.jclouds.compute.ComputeServiceContext;
+import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.domain.Template;
+import org.jclouds.compute.domain.TemplateBuilder;
+import org.jclouds.compute.options.TemplateOptions;
+import org.jclouds.domain.Location;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeoutException;
+
+public class CloudstackIaas extends Iaas {
+
+    private static final Log log = LogFactory.getLog(CloudStackIaas.class);
+
+    public CloudStackIaas(IaasProvider iaasProvider) {
+        super(iaasProvider);
+    }
+
+    @Override
+    public void buildComputeServiceAndTemplate() {
+        // builds and sets Compute Service
+        
ComputeServiceBuilderUtil.buildDefaultComputeService(getIaasProvider());
+        // builds and sets Template
+        buildTemplate();
+    }
+
+    @Override
+    public void buildTemplate() {
+
+        IaasProvider iaasInfo = getIaasProvider();
+
+        //if compute service is not available
+        if (iaasInfo.getComputeService() == null) {
+            String msg = "Compute service is null for IaaS provider: "
+                    + iaasInfo.getName();
+            log.error(msg);
+            throw new CloudControllerException(msg);
+        }
+
+        //create templateBuilder
+        TemplateBuilder templateBuilder = iaasInfo.getComputeService()
+                .templateBuilder();
+
+        //**SET PROPERTIES TO templateBuilder OBJECT**//
+
+        /**
+         * PROPERTY - 1
+         * set image id specified
+         */
+        templateBuilder.imageId(iaasInfo.getImage());
+
+        /**
+         *  PROPERTY-2
+         *  if user has specified a zone in cloud-controller.xml, set the zone 
into templateBuilder object
+         *  (user should provide the zone id for this, because zone name is 
not unique in cloudstack)
+         */
+        if (iaasInfo.getProperty(CloudControllerConstants.AVAILABILITY_ZONE) 
!= null) {
+            Set<? extends Location> locations = 
iaasInfo.getComputeService().listAssignableLocations();
+            for (Location location : locations) {
+                if 
(location.getId().equals(iaasInfo.getProperty(CloudControllerConstants.AVAILABILITY_ZONE)))
 {
+                    //if the zone is valid set the zone to templateBuilder 
Object
+                    templateBuilder.locationId(location.getId());
+                    log.info("Zone has been set as " + 
iaasInfo.getProperty(CloudControllerConstants.AVAILABILITY_ZONE)
+                            + " with id: " + location.getId());
+                    break;
+                }
+            }
+        }
+
+        /**
+         * PROPERTY-3
+         * if user has specified an instance type in cloud-controller.xml, set 
the instance type into templateBuilder
+         * object.(service offering)
+         *Important:Specify the Service Offering type ID. Not the name. 
Because the name is not unique in cloudstack.
+         */
+        if (iaasInfo.getProperty(CloudControllerConstants.INSTANCE_TYPE) != 
null) {
+            
templateBuilder.hardwareId(iaasInfo.getProperty(CloudControllerConstants.INSTANCE_TYPE));
+        }
+
+        //build the template
+        Template template = templateBuilder.build();
+
+        /**if you wish to auto assign IPs, instance spawning call should be
+         * blocking, but if you
+         * wish to assign IPs manually, it can be non-blocking.
+         * is auto-assign-ip mode or manual-assign-ip mode?
+         */
+        boolean blockUntilRunning = Boolean.parseBoolean(iaasInfo
+                .getProperty(CloudControllerConstants.AUTO_ASSIGN_IP));
+        template.getOptions().as(TemplateOptions.class)
+                .blockUntilRunning(blockUntilRunning);
+
+        // this is required in order to avoid creation of additional security
+        // groups by Jclouds.
+        template.getOptions().as(TemplateOptions.class)
+                .inboundPorts(new int[]{});
+
+
+        //**SET CLOUDSTACK SPECIFIC PROPERTIES TO TEMPLATE OBJECT**//
+
+        //set security group - If you are using basic zone
+        if (iaasInfo.getProperty(CloudControllerConstants.SECURITY_GROUP_IDS) 
!= null) {
+            template.getOptions()
+                    .as(CloudStackTemplateOptions.class)
+                    
.securityGroupIds(Arrays.asList(iaasInfo.getProperty(CloudControllerConstants.SECURITY_GROUP_IDS)
+                            .split(CloudControllerConstants.ENTRY_SEPARATOR)));
+        }
+
+
+        /**
+         * set network ID - If you are using advanced zone
+         * in cloudstack sometimes we get unautorized exception if we didn't 
specify the
+         * domain ID and user name
+         */
+        if (iaasInfo.getProperty(CloudControllerConstants.NETWORK_IDS) != 
null) {
+            template.getOptions()
+                    .as(CloudStackTemplateOptions.class)
+                    
.networks(Arrays.asList(iaasInfo.getProperty(CloudControllerConstants.NETWORK_IDS)
+                            .split(CloudControllerConstants.ENTRY_SEPARATOR)));
+        }
+
+        //set user name
+        if (iaasInfo.getProperty(CloudControllerConstants.USER_NAME) != null) {
+            template.getOptions().as(CloudStackTemplateOptions.class)
+                    
.account(iaasInfo.getProperty(CloudControllerConstants.USER_NAME));
+        }
+        //set domain ID
+        if (iaasInfo.getProperty(CloudControllerConstants.DOMAIN_ID) != null) {
+            template.getOptions().as(CloudStackTemplateOptions.class)
+                    
.domainId(iaasInfo.getProperty(CloudControllerConstants.DOMAIN_ID));
+        }
+
+        /**
+         *Set key pair
+         * in cloudstack sometimes we get unauthorized exception if we didn't 
specify the
+         * domain ID and user name
+         */
+        if (iaasInfo.getProperty(CloudControllerConstants.KEY_PAIR) != null) {
+            template.getOptions().as(CloudStackTemplateOptions.class)
+                    
.keyPair(iaasInfo.getProperty(CloudControllerConstants.KEY_PAIR));
+        }
+
+        // ability to define tags
+        if (iaasInfo.getProperty(CloudControllerConstants.TAGS) != null) {
+            template.getOptions()
+                    .as(CloudStackTemplateOptions.class)
+                    
.tags(Arrays.asList(iaasInfo.getProperty(CloudControllerConstants.TAGS)
+                            .split(CloudControllerConstants.ENTRY_SEPARATOR)));
+        }
+        //set disk offering to the instance
+        if (iaasInfo.getProperty(CloudControllerConstants.DISK_OFFERING) != 
null) {
+            template.getOptions()
+                    .as(CloudStackTemplateOptions.class)
+                    
.diskOfferingId(iaasInfo.getProperty(CloudControllerConstants.DISK_OFFERING));
+        }
+
+        // set Template
+        iaasInfo.setTemplate(template);
+    }
+
+    @Override
+    public void setDynamicPayload() {
+        IaasProvider iaasInfo = getIaasProvider();
+        if (iaasInfo.getTemplate() != null && iaasInfo.getPayload() != null) {
+            
iaasInfo.getTemplate().getOptions().as(CloudStackTemplateOptions.class)
+                    
.userMetadata(convertByteArrayToHashMap(iaasInfo.getPayload()));
+        }
+    }
+
+    /**
+     * IMPORTANT
+     * In cloudstack we can assign public IPs, if we are using an advanced 
zone only. If we are using a basic zone
+     * we cannot assign public ips.
+     * <p/>
+     * When we use an advanced zone, a public IP address will get 
automatically assigned to the vm. So we don't need
+     * to find an unallocated IP address and assign that address to the vm. If 
you are using a basic zone you cannot
+     * assign public IPs
+     * <p/>
+     * So  this method will find the IP that has been assigned to the vm and 
return it.
+     */
+    @Override
+    public String associateAddress(NodeMetadata node) {
+
+        IaasProvider iaasInfo = getIaasProvider();
+        ComputeServiceContext context = 
iaasInfo.getComputeService().getContext();
+        CloudStackApi cloudStackApi = context.unwrapApi(CloudStackApi.class);
+        String ip = null;
+
+        // get all allocated IPs
+        ListPublicIPAddressesOptions listPublicIPAddressesOptions = new 
ListPublicIPAddressesOptions();
+        
listPublicIPAddressesOptions.zoneId(iaasInfo.getProperty(CloudControllerConstants.AVAILABILITY_ZONE));
+
+        Set<PublicIPAddress> publicIPAddresses = cloudStackApi.getAddressApi()
+                .listPublicIPAddresses(listPublicIPAddressesOptions);
+
+        String id = node.getProviderId(); //vm ID
+
+        for (PublicIPAddress publicIPAddress : publicIPAddresses) {
+            if (publicIPAddress.getVirtualMachineId().equals(id)) { //check 
whether this instance has
+                // already got an public ip or not
+                ip = publicIPAddress.getIPAddress(); //A public ip has been 
successfully assigned to the vm
+                log.info("Successfully associated an IP address " + ip
+                        + " for node with id: " + node.getId());
+                break;
+            }
+
+        }
+
+        if (ip == null || ip.isEmpty()) { //IP has not been successfully 
assigned to VM(That means there are
+            //  no more IPs  available for the VM)
+            String msg = "No address associated for node with id: " + 
node.getId();
+            log.warn(msg);
+            throw new CloudControllerException(msg);
+        }
+
+        return ip;
+    }
+
+    @Override
+    public String associatePredefinedAddress(NodeMetadata node, String ip) {
+        return "";
+    }
+
+    @Override
+    public void releaseAddress(String ip) {
+        IaasProvider iaasInfo = getIaasProvider();
+        ComputeServiceContext context = 
iaasInfo.getComputeService().getContext();
+        CloudStackApi cloudStackApi = context.unwrapApi(CloudStackApi.class);
+        cloudStackApi.getAddressApi().disassociateIPAddress(ip);
+    }
+
+    @Override
+    public boolean createKeyPairFromPublicKey(String region, String 
keyPairName, String publicKey) {
+
+        IaasProvider iaasInfo = getIaasProvider();
+        ComputeServiceContext context = 
iaasInfo.getComputeService().getContext();
+        CloudStackApi cloudStackApi = context.unwrapApi(CloudStackApi.class);
+        SshKeyPair sshKeyPair = 
cloudStackApi.getSSHKeyPairApi().createSSHKeyPair(keyPairName);
+
+        if (sshKeyPair != null) {
+
+            
iaasInfo.getTemplate().getOptions().as(CloudStackTemplateOptions.class)
+                    .keyPair(sshKeyPair.getName());
+
+            log.info("A key-pair is created successfully - Key Pair Name: " + 
sshKeyPair.getName());
+            return true;
+        }
+        log.error("Key-pair is unable to create");
+        return false;
+    }
+
+    @Override
+    public boolean isValidRegion(String region) throws InvalidRegionException {
+
+        IaasProvider iaasInfo = getIaasProvider();
+        //no such method in Jclouds cloudstack api
+        String msg = "Invalid region: " + region + " in the iaas: " + 
iaasInfo.getType();
+        log.error(msg);
+        throw new InvalidRegionException(msg);
+    }
+
+    @Override
+    public boolean isValidZone(String region, String zone) throws 
InvalidZoneException {
+
+        IaasProvider iaasInfo = getIaasProvider();
+        ComputeServiceContext context = 
iaasInfo.getComputeService().getContext();
+        CloudStackApi cloudStackApi = context.unwrapApi(CloudStackApi.class);
+        ListZonesOptions listZonesOptions = new ListZonesOptions();
+        listZonesOptions.available(true);
+        Set<Zone> zoneSet = 
cloudStackApi.getZoneApi().listZones(listZonesOptions);
+
+        for (org.jclouds.cloudstack.domain.Zone configuredZone : zoneSet) {
+            if (configuredZone.getName().equalsIgnoreCase(zone)) {
+                return true;
+            }
+        }
+        String msg = "Invalid zone: " + zone + " in the iaas: " + 
iaasInfo.getType();
+        log.error(msg);
+        throw new InvalidZoneException(msg);
+    }
+
+    @Override
+    public boolean isValidHost(String zone, String host) throws 
InvalidHostException {
+
+        IaasProvider iaasInfo = getIaasProvider();
+        // there's no such method in jclouds cloustack api
+        String msg = "Invalid host: " + host + " in the zone: " + zone + " and 
of the iaas: " + iaasInfo.getType();
+        log.error(msg);
+        throw new InvalidHostException(msg);
+
+    }
+
+    @Override
+    public PartitionValidator getPartitionValidator() {
+        return new CloudStackPartitionValidator();
+    }
+
+    @Override
+    public String createVolume(int sizeGB) {
+
+        // Snapshot id is not there in IaaS.createVolume() method in stratos 
4.0.0
+        String snapshotId = null;
+        //todo return volume ID if volume is created
+        IaasProvider iaasInfo = getIaasProvider();
+        ComputeServiceContext context = iaasInfo.getComputeService()
+                .getContext();
+
+        String zone = ComputeServiceBuilderUtil.extractZone(iaasInfo);
+        String diskOfferingID = 
iaasInfo.getTemplate().getOptions().as(CloudStackTemplateOptions.class)
+                .getDiskOfferingId();
+        if (zone == null && diskOfferingID == null) {
+            log.error("Could not create a volume in the , [zone] : " + zone + 
" of Iaas : " + iaasInfo);
+            return null;
+        }
+
+        VolumeApi volumeApi = 
context.unwrapApi(CloudStackApi.class).getVolumeApi();
+
+        Volume volume;
+        if (StringUtils.isEmpty(snapshotId)) {
+            if (log.isInfoEnabled()) {
+                log.info("Creating a volume in the zone " + zone);
+            }
+
+            //cloudstack jcloud api does not return a volume object
+            volumeApi.createVolumeFromCustomDiskOfferingInZone(null, 
diskOfferingID, zone, sizeGB);
+
+            //  volume = blockStoreApi.createVolumeInAvailabilityZone(zone, 
sizeGB);
+        } else {
+            if (log.isInfoEnabled()) {
+                log.info("Creating a volume in the zone " + zone + " from the 
snapshot " + snapshotId);
+            }
+            volumeApi.createVolumeFromSnapshotInZone(null, diskOfferingID, 
zone);
+        }
+
+        return null;
+    }
+
+    @Override
+    public String attachVolume(String instanceId, String volumeId, String 
deviceName) {
+        IaasProvider iaasInfo = getIaasProvider();
+        ComputeServiceContext context = iaasInfo.getComputeService()
+                .getContext();
+        CloudStackApi cloudStackApi = context.unwrapApi(CloudStackApi.class);
+
+        //get volume
+        org.jclouds.cloudstack.domain.Volume volume = 
cloudStackApi.getVolumeApi().getVolume(volumeId);
+
+        //get current volume state
+        Volume.State volumeState = volume.getState();
+
+        if (log.isDebugEnabled()) {
+            log.debug("Volume " + volumeId + " is in state " + volumeState);
+        }
+
+        //if volume is not available, not allocated or cannot use
+        //volume state ALLOCATED   means that volume has not been attached to 
any instance.
+
+        //TODO there is an error with logic.
+        if (!(volumeState == Volume.State.ALLOCATED || volumeState == 
Volume.State.CREATING
+                || volumeState == Volume.State.READY)) {
+            log.error(String.format("Volume %s can not be attached. Volume 
status is %s", volumeId, volumeState));
+        }
+
+        //check whether the account of volume and instance is same
+        if (!volume.getAccount().equals(cloudStackApi.getVirtualMachineApi()
+                .getVirtualMachine(instanceId).getAccount())) {
+            log.error(String.format("Volume %s can not be attached. Instance 
account and Volume account " +
+                    "are not the same ", volumeId));
+        }
+
+        boolean volumeBecameAvailable = false, volumeBecameAttached = false;
+
+        try {
+            if (volumeState == Volume.State.CREATING) {
+
+                volumeBecameAvailable = waitForStatus(volumeId, 
Volume.State.ALLOCATED, 5);
+
+            } else if (volumeState == Volume.State.READY) {
+                volumeBecameAvailable = true;
+            }
+
+        } catch (TimeoutException e) {
+            log.error("[Volume ID] " + volumeId + "did not become ALLOCATED 
within expected timeout");
+        }
+
+        //if volume state is 'ALLOCATED'
+        if (volumeBecameAvailable) {
+
+            //attach volume into instance
+            cloudStackApi.getVolumeApi().attachVolume(volumeId, instanceId);
+
+            try {
+                volumeBecameAttached = waitForStatus(volumeId, 
Volume.State.READY, 2);
+            } catch (TimeoutException e) {
+                log.error("[Volume ID] " + volumeId + "did not become READY 
within expected timeout");
+            }
+        }
+
+        try {
+            // waiting 5seconds till volumes are actually attached.
+            Thread.sleep(5000);
+        } catch (InterruptedException ignored) {
+
+        }
+
+        //If volume state is not 'READY'
+        if (!volumeBecameAttached) {
+            log.error(String.format("[Volume ID] %s attachment is called, but 
not yet became attached", volumeId));
+        }
+
+        log.info(String.format("Volume [id]: %s attachment for instance [id]: 
%s was successful [status]: Attaching." +
+                " of Iaas : %s", volumeId, instanceId, iaasInfo));
+
+        return "Attaching";
+
+    }
+
+    @Override
+    public void detachVolume(String instanceId, String volumeId) {
+
+
+        IaasProvider iaasInfo = getIaasProvider();
+
+        ComputeServiceContext context = iaasInfo.getComputeService()
+                .getContext();
+
+        if (log.isDebugEnabled()) {
+            log.debug(String.format("Starting to detach volume %s from the 
instance %s", volumeId, instanceId));
+        }
+
+        CloudStackApi cloudStackApi = context.unwrapApi(CloudStackApi.class);
+
+        cloudStackApi.getVolumeApi().detachVolume(volumeId);
+
+        try {
+            //TODO this is true only for newly created volumes
+            if (waitForStatus(volumeId, Volume.State.ALLOCATED, 5)) {
+                log.info(String.format("Detachment of Volume [id]: %s from 
instance [id]: %s was successful of Iaas : %s", volumeId, instanceId, 
iaasInfo));
+            }
+        } catch (TimeoutException e) {
+            log.error(String.format("Detachment of Volume [id]: %s from 
instance [id]: %s was unsuccessful. [volume Status] : %s", volumeId, 
instanceId, iaasInfo));
+        }
+
+    }
+
+    @Override
+    public void deleteVolume(String volumeId) {
+        IaasProvider iaasInfo = getIaasProvider();
+        ComputeServiceContext context = iaasInfo.getComputeService()
+                .getContext();
+        CloudStackApi cloudStackApi = context.unwrapApi(CloudStackApi.class);
+        cloudStackApi.getVolumeApi().deleteVolume(volumeId);
+        log.info("Deletion of Volume [id]: " + volumeId + " was successful. "
+                + " of Iaas : " + iaasInfo);
+    }
+
+    @Override
+    public String getIaasDevice(String device) {//todo implement this 
method(auto generated method)
+        return null;
+    }
+
+    private boolean waitForStatus(String volumeId, Volume.State 
expectedStatus, int timeoutInMilliseconds) throws TimeoutException {
+        int timeout = 1000 * 60 * timeoutInMilliseconds;
+        long timout = System.currentTimeMillis() + timeout;
+
+        IaasProvider iaasInfo = getIaasProvider();
+        ComputeServiceContext context = 
iaasInfo.getComputeService().getContext();
+        CloudStackApi cloudStackApi = context.unwrapApi(CloudStackApi.class);
+
+        //get volume
+        org.jclouds.cloudstack.domain.Volume volume = 
cloudStackApi.getVolumeApi().getVolume(volumeId);
+
+        Volume.State volumeState = volume.getState();
+
+        while (volumeState != expectedStatus) {
+            try {
+                if (log.isDebugEnabled()) {
+                    log.debug(String.format("Volume %s is still NOT in %s. 
Current State=%s", volumeId, expectedStatus, volumeState));
+                }
+                if (volumeState == Volume.State.FAILED || volumeState == 
Volume.State.DESTROYED || volumeState == Volume.State.UNRECOGNIZED) {
+                    log.error("Volume " + volumeId + " is in state" + 
volumeState);
+                    return false;
+                }
+
+                Thread.sleep(1000);
+                volumeState = volume.getState();
+                if (System.currentTimeMillis() > timout) {
+                    throw new TimeoutException();
+                }
+            } catch (InterruptedException e) {
+                // Ignoring the exception
+            }
+        }
+        if (log.isDebugEnabled()) {
+            log.debug(String.format("Volume %s status became %s", volumeId, 
expectedStatus));
+        }
+
+        return true;
+    }
+
+    private Map<String, String> convertByteArrayToHashMap(byte[] byteArray) {
+
+        Map<String, String> map = new HashMap<String, String>();
+
+        String stringFromByteArray = new String(byteArray);
+        String[] keyValuePairs = stringFromByteArray.split(",");
+
+        for (String keyValuePair : keyValuePairs) {
+            String[] keyValue = keyValuePair.split("=");
+            if (keyValue.length > 1) {
+                map.put(keyValue[0], keyValue[1]);
+            }
+        }
+
+        return map;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/CloudstackPartitionValidator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/CloudstackPartitionValidator.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/CloudstackPartitionValidator.java
new file mode 100644
index 0000000..878e49d
--- /dev/null
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/CloudstackPartitionValidator.java
@@ -0,0 +1,53 @@
+package org.apache.stratos.cloud.controller.validate;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
+import org.apache.stratos.cloud.controller.interfaces.Iaas;
+import org.apache.stratos.cloud.controller.pojo.IaasProvider;
+import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
+import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
+import 
org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator;
+import org.apache.stratos.messaging.domain.topology.Scope;
+
+import java.util.Properties;
+
+
+public class CloudstackPartitionValidator implements PartitionValidator {
+
+
+    private static final Log log = 
LogFactory.getLog(AWSEC2PartitionValidator.class);
+    private IaasProvider iaasProvider;
+    private Iaas iaas;
+
+
+    @Override
+    public void setIaasProvider(IaasProvider iaas) {
+        this.iaasProvider = iaas;
+        this.iaas = iaas.getIaas();
+    }
+
+    @Override
+    public IaasProvider validate(String partitionId, Properties properties) 
throws InvalidPartitionException {
+
+        try {
+            IaasProvider updatedIaasProvider = new IaasProvider(iaasProvider);
+            Iaas updatedIaas = 
CloudControllerUtil.getIaas(updatedIaasProvider);
+            updatedIaas.setIaasProvider(updatedIaasProvider);
+
+            if (properties.containsKey(Scope.zone.toString())) {
+                String zone = properties.getProperty(Scope.zone.toString());
+                iaas.isValidZone(null, zone);
+                
updatedIaasProvider.setProperty(CloudControllerConstants.AVAILABILITY_ZONE, 
zone);
+                updatedIaas = CloudControllerUtil.getIaas(updatedIaasProvider);
+                updatedIaas.setIaasProvider(updatedIaasProvider);
+            }
+
+        } catch (Exception ex) {
+            String msg = "Invalid Partition Detected : "+partitionId+". Cause: 
"+ex.getMessage();
+            log.error(msg, ex);
+            throw new InvalidPartitionException(msg, ex);
+        }
+        return iaasProvider;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/pom.xml
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/pom.xml 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/pom.xml
new file mode 100644
index 0000000..4b9d332
--- /dev/null
+++ b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/pom.xml
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.jclouds</groupId>
+    <artifactId>jclouds-project</artifactId>
+    <version>2.0.0-SNAPSHOT</version>
+    <relativePath>../../project/pom.xml</relativePath>
+  </parent>
+  <groupId>org.apache.jclouds.api</groupId>
+  <artifactId>cloudstack</artifactId>
+  <name>jclouds cloudstack core</name>
+  <description>jclouds components to access cloudstack</description>
+  <packaging>bundle</packaging>
+
+  <!-- bootstrapping: need to fetch the project POM -->
+  <repositories>
+    <repository>
+      <id>sonatype-nexus-snapshots</id>
+      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
+    </repository>  
+  </repositories>
+  
+  <properties>
+    
<test.cloudstack.endpoint>http://localhost:8080/client/api</test.cloudstack.endpoint>
+    <test.cloudstack.api-version>3.0.3</test.cloudstack.api-version>
+    <test.cloudstack.build-version />
+    <test.cloudstack.identity>FIXME_apiKey</test.cloudstack.identity>
+    <test.cloudstack.credential>FIXME_secretKey</test.cloudstack.credential>
+    <test.cloudstack.domainAdminIdentity />
+    <test.cloudstack.domainAdminCredential />
+    <test.cloudstack.globalAdminIdentity />
+    <test.cloudstack.globalAdminCredential />
+    <test.cloudstack.template>osFamily=CENTOS</test.cloudstack.template>
+    
<jclouds.osgi.export>org.jclouds.cloudstack*;version="${project.version}"</jclouds.osgi.export>
+    <jclouds.osgi.import>
+      org.jclouds.compute.internal;version="${project.version}",
+      org.jclouds.rest.internal;version="${project.version}",
+      org.jclouds*;version="${project.version}",
+      *
+    </jclouds.osgi.import>
+  </properties>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.jclouds</groupId>
+      <artifactId>jclouds-core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jclouds</groupId>
+      <artifactId>jclouds-core</artifactId>
+      <version>${project.version}</version>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jclouds</groupId>
+      <artifactId>jclouds-compute</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jclouds</groupId>
+      <artifactId>jclouds-compute</artifactId>
+      <version>${project.version}</version>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jclouds.driver</groupId>
+      <artifactId>jclouds-sshj</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jclouds.driver</groupId>
+      <artifactId>jclouds-slf4j</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>ch.qos.logback</groupId>
+      <artifactId>logback-classic</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  <profiles>
+    <profile>
+      <id>live</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>integration</id>
+                <phase>integration-test</phase>
+                <goals>
+                  <goal>test</goal>
+                </goals>
+                <configuration>
+                  <!-- too many tasks seem to overload the server and make the 
test take longer -->
+                  <threadCount>2</threadCount>
+                  <systemPropertyVariables>
+                    
<test.cloudstack.endpoint>${test.cloudstack.endpoint}</test.cloudstack.endpoint>
+                    
<test.cloudstack.api-version>${test.cloudstack.api-version}</test.cloudstack.api-version>
+                    
<test.cloudstack.build-version>${test.cloudstack.build-version}</test.cloudstack.build-version>
+                    
<test.cloudstack.identity>${test.cloudstack.identity}</test.cloudstack.identity>
+                    
<test.cloudstack.credential>${test.cloudstack.credential}</test.cloudstack.credential>
+                    
<test.cloudstack.template>${test.cloudstack.template}</test.cloudstack.template>
+                    
<test.cloudstack.domainAdminIdentity>${test.cloudstack.domainAdminIdentity}</test.cloudstack.domainAdminIdentity>
+                    
<test.cloudstack.domainAdminCredential>${test.cloudstack.domainAdminCredential}</test.cloudstack.domainAdminCredential>
+                    
<test.cloudstack.globalAdminIdentity>${test.cloudstack.globalAdminIdentity}</test.cloudstack.globalAdminIdentity>
+                    
<test.cloudstack.globalAdminCredential>${test.cloudstack.globalAdminCredential}</test.cloudstack.globalAdminCredential>
+                  </systemPropertyVariables>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+
+</project>

http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/AsyncJobException.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/AsyncJobException.java
 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/AsyncJobException.java
new file mode 100644
index 0000000..014b7b1
--- /dev/null
+++ 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/AsyncJobException.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.cloudstack;
+
+public class AsyncJobException extends RuntimeException {
+
+   public AsyncJobException() {
+   }
+
+   public AsyncJobException(String s) {
+      super(s);
+   }
+
+   public AsyncJobException(String s, Throwable throwable) {
+      super(s, throwable);
+   }
+
+   public AsyncJobException(Throwable throwable) {
+      super(throwable);
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/CloudStackApi.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/CloudStackApi.java
 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/CloudStackApi.java
new file mode 100644
index 0000000..a873643
--- /dev/null
+++ 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/CloudStackApi.java
@@ -0,0 +1,198 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.cloudstack;
+
+import java.io.Closeable;
+
+import org.jclouds.cloudstack.features.AccountApi;
+import org.jclouds.cloudstack.features.AddressApi;
+import org.jclouds.cloudstack.features.AsyncJobApi;
+import org.jclouds.cloudstack.features.ConfigurationApi;
+import org.jclouds.cloudstack.features.EventApi;
+import org.jclouds.cloudstack.features.FirewallApi;
+import org.jclouds.cloudstack.features.GuestOSApi;
+import org.jclouds.cloudstack.features.HypervisorApi;
+import org.jclouds.cloudstack.features.ISOApi;
+import org.jclouds.cloudstack.features.LimitApi;
+import org.jclouds.cloudstack.features.LoadBalancerApi;
+import org.jclouds.cloudstack.features.NATApi;
+import org.jclouds.cloudstack.features.NetworkApi;
+import org.jclouds.cloudstack.features.OfferingApi;
+import org.jclouds.cloudstack.features.ProjectApi;
+import org.jclouds.cloudstack.features.SSHKeyPairApi;
+import org.jclouds.cloudstack.features.SecurityGroupApi;
+import org.jclouds.cloudstack.features.SessionApi;
+import org.jclouds.cloudstack.features.SnapshotApi;
+import org.jclouds.cloudstack.features.TemplateApi;
+import org.jclouds.cloudstack.features.VMGroupApi;
+import org.jclouds.cloudstack.features.VirtualMachineApi;
+import org.jclouds.cloudstack.features.VolumeApi;
+import org.jclouds.cloudstack.features.ZoneApi;
+import org.jclouds.rest.annotations.Delegate;
+
+/**
+ * Provides synchronous access to CloudStack.
+ * <p/>
+ *
+ * @see <a 
href="http://download.cloud.com/releases/2.2.0/api_2.2.12/TOC_User.html"; />
+ */
+public interface CloudStackApi extends Closeable {
+   /**
+    * Provides synchronous access to Zone features.
+    */
+   @Delegate
+   ZoneApi getZoneApi();
+
+   /**
+    * Provides synchronous access to Template features.
+    */
+   @Delegate
+   TemplateApi getTemplateApi();
+
+   /**
+    * Provides synchronous access to Service, Disk, and Network Offering
+    * features.
+    */
+   @Delegate
+   OfferingApi getOfferingApi();
+
+   /**
+    * Provides synchronous access to Network features.
+    */
+   @Delegate
+   NetworkApi getNetworkApi();
+
+   /**
+    * Provides synchronous access to VirtualMachine features.
+    */
+   @Delegate
+   VirtualMachineApi getVirtualMachineApi();
+
+   /**
+    * Provides synchronous access to SecurityGroup features.
+    */
+   @Delegate
+   SecurityGroupApi getSecurityGroupApi();
+
+   /**
+    * Provides synchronous access to AsyncJob features.
+    */
+   @Delegate
+   AsyncJobApi getAsyncJobApi();
+
+   /**
+    * Provides synchronous access to Address features.
+    */
+   @Delegate
+   AddressApi getAddressApi();
+
+   /**
+    * Provides synchronous access to NAT features.
+    */
+   @Delegate
+   NATApi getNATApi();
+
+   /**
+    * Provides synchronous access to Firewall features.
+    */
+   @Delegate
+   FirewallApi getFirewallApi();
+
+   /**
+    * Provides synchronous access to LoadBalancer features.
+    */
+   @Delegate
+   LoadBalancerApi getLoadBalancerApi();
+
+   /**
+    * Provides synchronous access to GuestOS features.
+    */
+   @Delegate
+   GuestOSApi getGuestOSApi();
+
+   /**
+    * Provides synchronous access to Hypervisor features.
+    */
+   @Delegate
+   HypervisorApi getHypervisorApi();
+
+   /**
+    * Provides synchronous access to Configuration features.
+    */
+   @Delegate
+   ConfigurationApi getConfigurationApi();
+
+   /**
+    * Provides synchronous access to Account features.
+    */
+   @Delegate
+   AccountApi getAccountApi();
+
+   /**
+    * Provides synchronous access to SSH Keypairs
+    */
+   @Delegate
+   SSHKeyPairApi getSSHKeyPairApi();
+
+   /**
+    * Provides synchronous access to VM groups
+    */
+   @Delegate
+   VMGroupApi getVMGroupApi();
+
+   /**
+    * Provides synchronous access to Events
+    */
+   @Delegate
+   EventApi getEventApi();
+
+   /**
+    * Provides synchronous access to Resource Limits
+    */
+   @Delegate
+   LimitApi getLimitApi();
+
+   /**
+    * Provides synchronous access to ISOs
+    */
+   @Delegate
+   ISOApi getISOApi();
+
+   /**
+    * Provides synchronous access to Volumes
+    */
+   @Delegate
+   VolumeApi getVolumeApi();
+
+   /**
+    * Provides synchronous access to Snapshots
+    */
+   @Delegate
+   SnapshotApi getSnapshotApi();
+
+   /**
+    * Provides synchronous access to Sessions
+    */
+   @Delegate
+   SessionApi getSessionApi();
+
+   /**
+    * Provides synchronous access to Projects
+    */
+   @Delegate
+   ProjectApi getProjectApi();
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/CloudStackApiMetadata.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/CloudStackApiMetadata.java
 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/CloudStackApiMetadata.java
new file mode 100644
index 0000000..56dc772
--- /dev/null
+++ 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/CloudStackApiMetadata.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.cloudstack;
+import static 
org.jclouds.cloudstack.config.CloudStackProperties.AUTO_GENERATE_KEYPAIRS;
+import static org.jclouds.reflect.Reflection2.typeToken;
+
+import java.net.URI;
+import java.util.Properties;
+
+import 
org.jclouds.cloudstack.compute.config.CloudStackComputeServiceContextModule;
+import org.jclouds.cloudstack.config.CloudStackParserModule;
+import org.jclouds.cloudstack.config.CloudStackHttpApiModule;
+import org.jclouds.rest.internal.BaseHttpApiMetadata;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.Module;
+/**
+ * Implementation of {@link ApiMetadata} for Citrix/Apache CloudStack api.
+ */
+public class CloudStackApiMetadata extends BaseHttpApiMetadata<CloudStackApi> {
+   
+   @Override
+   public Builder toBuilder() {
+      return new Builder().fromApiMetadata(this);
+   }
+
+   public CloudStackApiMetadata() {
+      this(new Builder());
+   }
+
+   protected CloudStackApiMetadata(Builder builder) {
+      super(builder);
+   }
+
+   public static Properties defaultProperties() {
+      Properties properties = BaseHttpApiMetadata.defaultProperties();
+      properties.setProperty("jclouds.ssh.max-retries", "7");
+      properties.setProperty("jclouds.ssh.retry-auth", "true");
+      properties.setProperty(AUTO_GENERATE_KEYPAIRS, "false");
+      return properties;
+   }
+
+   public static class Builder extends 
BaseHttpApiMetadata.Builder<CloudStackApi, Builder> {
+
+      @SuppressWarnings("deprecation")
+      protected Builder() {
+         id("cloudstack")
+         .name("Citrix CloudStack API")
+         .identityName("API Key")
+         .credentialName("Secret Key")
+         
.documentation(URI.create("http://download.cloud.com/releases/2.2.0/api_2.2.12/TOC_User.html";))
+         .defaultEndpoint("http://localhost:8080/client/api";)
+         .version("2.2")
+         .view(typeToken(CloudStackContext.class))
+         .defaultProperties(CloudStackApiMetadata.defaultProperties())
+         .defaultModules(ImmutableSet.<Class<? extends Module>> builder()
+                                     .add(CloudStackParserModule.class)
+                                     .add(CloudStackHttpApiModule.class)
+                                     
.add(CloudStackComputeServiceContextModule.class).build());
+      }
+      
+      @Override
+      public CloudStackApiMetadata build() {
+         return new CloudStackApiMetadata(this);
+      }
+
+      @Override
+      protected Builder self() {
+         return this;
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/CloudStackContext.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/CloudStackContext.java
 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/CloudStackContext.java
new file mode 100644
index 0000000..d1635f5
--- /dev/null
+++ 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/CloudStackContext.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.cloudstack;
+
+import org.jclouds.cloudstack.internal.CloudStackContextImpl;
+import org.jclouds.compute.ComputeServiceContext;
+
+import com.google.inject.ImplementedBy;
+
+@ImplementedBy(CloudStackContextImpl.class)
+public interface CloudStackContext extends ComputeServiceContext {
+
+   CloudStackApi getApi();
+
+   CloudStackDomainApi getDomainApi();
+
+   CloudStackGlobalApi getGlobalApi();
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/CloudStackDomainApi.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/CloudStackDomainApi.java
 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/CloudStackDomainApi.java
new file mode 100644
index 0000000..6eacd9f
--- /dev/null
+++ 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/CloudStackDomainApi.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.cloudstack;
+
+import org.jclouds.cloudstack.features.DomainAccountApi;
+import org.jclouds.cloudstack.features.DomainDomainApi;
+import org.jclouds.cloudstack.features.DomainLimitApi;
+import org.jclouds.cloudstack.features.DomainUserApi;
+import org.jclouds.rest.annotations.Delegate;
+
+/**
+ * Provides synchronous access to CloudStack.
+ * <p/>
+ * 
+ * @see <a href=
+ *      
"http://download.cloud.com/releases/2.2.0/api_2.2.12/TOC_Domain_Admin.html";
+ *      />
+ */
+public interface CloudStackDomainApi extends CloudStackApi {
+
+   /**
+    * Provides synchronous access to Resource Limits
+    */
+   @Delegate
+   @Override
+   DomainLimitApi getLimitApi();
+   
+   /**
+    * Provides synchronous access to Accounts
+    */
+   @Delegate
+   @Override
+   DomainAccountApi getAccountApi();
+
+   /**
+    * Provides synchronous access to Users
+    */
+   @Delegate
+   DomainUserApi getUserClient();
+
+   /**
+    * Provides synchronous access to Domains
+    */
+   @Delegate
+   DomainDomainApi getDomainClient();
+}

Reply via email to