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(); +}
