From 5d1769335cbce659e8cd5546fa375b5dcba693a0 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 8 Feb 2013 16:21:46 +0530 Subject: [PATCH] CLOUDSTACK-1210: Fix pluggable service, apiserver, mgmt server impl, api-discovery - Mgmt server impl is a pluggable service, fix it's method - Fix getCommands() to return all cmd api classes supported by this mgmt server - For api-discovery, get commands from pluggable services only, don't use reflections - Don't use reflections in ApiServer, iterate pluggableservices - Fix api discovery unit test - The fix was done automatically using following python program along with following step: 1. Get all apis provided by default mgmt server, all of them are in cloud-api now cd api/src/org/apache/cloudstack/api/command find . >> apis 2. For all apis, generate java code that adds the class to the cmdList arraylist: f = open('apis', 'r') data = f.read() f.close() output = "" for a in data.split('\n'): output += "cmdList.add(%s);" % a.split('/')[-1].replace('.java', '.class') # wrote output to a file, copied content to mgmt server impl's getCommands() # similarly, fixed import statements using same code, splitting on / Testing: Ran apiserver, put breakpoints in ApiServer's init() where classes are processed Total cmd classes found by reflections (ReflectUtil) = 354 Total cmd classes found by getCommands for all pluggable services = 354 Next, copied the comma separated values for each set to a string in ipython, a & b set(a).difference(set(b)) returned null. The above test implies both set of cmd classes found by both methods, i.e. using reflections and using getCommands() had same set of apis and all were unique. Conclusion: The changes are idempotent and don't break api server's cmd class api discovery processing. BUG-ID: CLOUDSTACK-1210 Signed-off-by: Rohit Yadav --- .../discovery/ApiDiscoveryServiceImpl.java | 4 +- .../discovery/ApiDiscoveryTest.java | 2 +- server/src/com/cloud/api/ApiServer.java | 17 +- .../cloud/server/ManagementServerImpl.java | 392 ++++++++++++++++-- 4 files changed, 361 insertions(+), 54 deletions(-) diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java index 087b166575a..30123c79df2 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java @@ -68,9 +68,7 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { if (s_apiNameDiscoveryResponseMap == null) { long startTime = System.nanoTime(); s_apiNameDiscoveryResponseMap = new HashMap(); - //TODO: Fix and use PluggableService to get the classes - Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, - new String[]{"org.apache.cloudstack.api", "com.cloud.api"}); + Set> cmdClasses = new HashSet>(); for(PluggableService service: _services) cmdClasses.addAll(service.getCommands()); cacheResponseMap(cmdClasses); diff --git a/plugins/api/discovery/test/org/apache/cloudstack/discovery/ApiDiscoveryTest.java b/plugins/api/discovery/test/org/apache/cloudstack/discovery/ApiDiscoveryTest.java index 320d20aa71d..afff746c848 100644 --- a/plugins/api/discovery/test/org/apache/cloudstack/discovery/ApiDiscoveryTest.java +++ b/plugins/api/discovery/test/org/apache/cloudstack/discovery/ApiDiscoveryTest.java @@ -83,7 +83,7 @@ public class ApiDiscoveryTest { @Test public void verifyListApis() throws Exception { ListResponse responses = (ListResponse) _discoveryService.listApis(testUser, null); - assertTrue("No. of response items > 1", responses.getCount() > 1); + assertTrue("No. of response items > 1", responses.getCount() == 1); for (ApiDiscoveryResponse response: responses.getResponses()) { assertFalse("API name is empty", response.getName().isEmpty()); assertFalse("API description is empty", response.getDescription().isEmpty()); diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index e41fcb50513..d99d188b5d5 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -29,15 +29,7 @@ import java.security.SecureRandom; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TimeZone; +import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; @@ -64,7 +56,6 @@ import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; import org.apache.cloudstack.api.command.admin.storage.ListStoragePoolsCmd; import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; import com.cloud.event.ActionEventUtils; -import com.cloud.utils.ReflectUtil; import org.apache.cloudstack.acl.APILimitChecker; import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; @@ -149,7 +140,6 @@ import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; - @Component public class ApiServer implements HttpRequestHandler { private static final Logger s_logger = Logger.getLogger(ApiServer.class.getName()); @@ -165,7 +155,6 @@ public class ApiServer implements HttpRequestHandler { @Inject private ConfigurationDao _configDao; @Inject List _pluggableServices; - @Inject List _apiAccessCheckers; private Account _systemAccount = null; @@ -219,9 +208,7 @@ public class ApiServer implements HttpRequestHandler { } } - Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, - new String[]{"org.apache.cloudstack.api", "com.cloud.api"}); - + Set> cmdClasses = new HashSet>(); for(PluggableService pluggableService: _pluggableServices) cmdClasses.addAll(pluggableService.getCommands()); diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index fd6c8766639..0943bfc201e 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -53,40 +53,56 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.event.ActionEventUtils; import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoCmd; -import org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd; -import org.apache.cloudstack.api.command.admin.config.ListCfgsByCmd; -import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd; -import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; -import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd; -import org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd; -import org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd; -import org.apache.cloudstack.api.command.admin.resource.ListCapacityCmd; -import org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd; -import org.apache.cloudstack.api.command.admin.systemvm.DestroySystemVmCmd; -import org.apache.cloudstack.api.command.admin.systemvm.ListSystemVMsCmd; -import org.apache.cloudstack.api.command.admin.systemvm.RebootSystemVmCmd; -import org.apache.cloudstack.api.command.admin.systemvm.StopSystemVmCmd; -import org.apache.cloudstack.api.command.admin.systemvm.UpgradeSystemVMCmd; -import org.apache.cloudstack.api.command.admin.vlan.ListVlanIpRangesCmd; -import org.apache.cloudstack.api.command.user.address.ListPublicIpAddressesCmd; -import org.apache.cloudstack.api.command.user.config.ListCapabilitiesCmd; -import org.apache.cloudstack.api.command.user.guest.ListGuestOsCategoriesCmd; -import org.apache.cloudstack.api.command.user.guest.ListGuestOsCmd; -import org.apache.cloudstack.api.command.user.iso.ListIsosCmd; -import org.apache.cloudstack.api.command.user.iso.UpdateIsoCmd; -import org.apache.cloudstack.api.command.user.offering.ListDiskOfferingsCmd; -import org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd; -import org.apache.cloudstack.api.command.user.ssh.CreateSSHKeyPairCmd; -import org.apache.cloudstack.api.command.user.ssh.ListSSHKeyPairsCmd; -import org.apache.cloudstack.api.command.user.ssh.DeleteSSHKeyPairCmd; -import org.apache.cloudstack.api.command.user.ssh.ListSSHKeyPairsCmd; -import org.apache.cloudstack.api.command.user.ssh.RegisterSSHKeyPairCmd; -import org.apache.cloudstack.api.command.user.template.ListTemplatesCmd; -import org.apache.cloudstack.api.command.user.template.UpdateTemplateCmd; -import org.apache.cloudstack.api.command.user.vm.GetVMPasswordCmd; -import org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd; -import org.apache.cloudstack.api.command.user.volume.ExtractVolumeCmd; -import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd; +import org.apache.cloudstack.api.command.admin.account.*; +import org.apache.cloudstack.api.command.admin.autoscale.*; +import org.apache.cloudstack.api.command.admin.cluster.*; +import org.apache.cloudstack.api.command.admin.config.*; +import org.apache.cloudstack.api.command.admin.domain.*; +import org.apache.cloudstack.api.command.admin.host.*; +import org.apache.cloudstack.api.command.admin.ldap.*; +import org.apache.cloudstack.api.command.admin.network.*; +import org.apache.cloudstack.api.command.admin.offering.*; +import org.apache.cloudstack.api.command.admin.pod.*; +import org.apache.cloudstack.api.command.admin.region.*; +import org.apache.cloudstack.api.command.admin.resource.*; +import org.apache.cloudstack.api.command.admin.router.*; +import org.apache.cloudstack.api.command.admin.storage.*; +import org.apache.cloudstack.api.command.admin.swift.*; +import org.apache.cloudstack.api.command.admin.systemvm.*; +import org.apache.cloudstack.api.command.admin.template.*; +import org.apache.cloudstack.api.command.admin.usage.*; +import org.apache.cloudstack.api.command.admin.user.*; +import org.apache.cloudstack.api.command.admin.vlan.*; +import org.apache.cloudstack.api.command.admin.vm.*; +import org.apache.cloudstack.api.command.admin.vpc.*; +import org.apache.cloudstack.api.command.admin.zone.*; +import org.apache.cloudstack.api.command.user.account.*; +import org.apache.cloudstack.api.command.user.address.*; +import org.apache.cloudstack.api.command.user.autoscale.*; +import org.apache.cloudstack.api.command.user.config.*; +import org.apache.cloudstack.api.command.user.event.*; +import org.apache.cloudstack.api.command.user.firewall.*; +import org.apache.cloudstack.api.command.user.guest.*; +import org.apache.cloudstack.api.command.user.iso.*; +import org.apache.cloudstack.api.command.user.job.*; +import org.apache.cloudstack.api.command.user.loadbalancer.*; +import org.apache.cloudstack.api.command.user.nat.*; +import org.apache.cloudstack.api.command.user.network.*; +import org.apache.cloudstack.api.command.user.offering.*; +import org.apache.cloudstack.api.command.user.project.*; +import org.apache.cloudstack.api.command.user.region.*; +import org.apache.cloudstack.api.command.user.resource.*; +import org.apache.cloudstack.api.command.user.securitygroup.*; +import org.apache.cloudstack.api.command.user.snapshot.*; +import org.apache.cloudstack.api.command.user.ssh.*; +import org.apache.cloudstack.api.command.user.tag.*; +import org.apache.cloudstack.api.command.user.template.*; +import org.apache.cloudstack.api.command.user.vm.*; +import org.apache.cloudstack.api.command.user.vmgroup.*; +import org.apache.cloudstack.api.command.user.volume.*; +import org.apache.cloudstack.api.command.user.vpc.*; +import org.apache.cloudstack.api.command.user.vpn.*; +import org.apache.cloudstack.api.command.user.zone.*; import org.apache.cloudstack.api.response.ExtractResponse; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; @@ -1820,7 +1836,313 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe @Override public List> getCommands() { List> cmdList = new ArrayList>(); - //TODO: Add cmd classes + cmdList.add(CreateAccountCmd.class); + cmdList.add(DeleteAccountCmd.class); + cmdList.add(DisableAccountCmd.class); + cmdList.add(EnableAccountCmd.class); + cmdList.add(LockAccountCmd.class); + cmdList.add(UpdateAccountCmd.class); + cmdList.add(CreateCounterCmd.class); + cmdList.add(DeleteCounterCmd.class); + cmdList.add(AddClusterCmd.class); + cmdList.add(DeleteClusterCmd.class); + cmdList.add(ListClustersCmd.class); + cmdList.add(UpdateClusterCmd.class); + cmdList.add(ListCfgsByCmd.class); + cmdList.add(ListHypervisorCapabilitiesCmd.class); + cmdList.add(UpdateCfgCmd.class); + cmdList.add(UpdateHypervisorCapabilitiesCmd.class); + cmdList.add(CreateDomainCmd.class); + cmdList.add(DeleteDomainCmd.class); + cmdList.add(ListDomainChildrenCmd.class); + cmdList.add(ListDomainsCmd.class); + cmdList.add(UpdateDomainCmd.class); + cmdList.add(AddHostCmd.class); + cmdList.add(AddSecondaryStorageCmd.class); + cmdList.add(CancelMaintenanceCmd.class); + cmdList.add(DeleteHostCmd.class); + cmdList.add(ListHostsCmd.class); + cmdList.add(PrepareForMaintenanceCmd.class); + cmdList.add(ReconnectHostCmd.class); + cmdList.add(UpdateHostCmd.class); + cmdList.add(UpdateHostPasswordCmd.class); + cmdList.add(LDAPConfigCmd.class); + cmdList.add(LDAPRemoveCmd.class); + cmdList.add(AddNetworkDeviceCmd.class); + cmdList.add(AddNetworkServiceProviderCmd.class); + cmdList.add(CreateNetworkOfferingCmd.class); + cmdList.add(CreatePhysicalNetworkCmd.class); + cmdList.add(CreateStorageNetworkIpRangeCmd.class); + cmdList.add(DeleteNetworkDeviceCmd.class); + cmdList.add(DeleteNetworkOfferingCmd.class); + cmdList.add(DeleteNetworkServiceProviderCmd.class); + cmdList.add(DeletePhysicalNetworkCmd.class); + cmdList.add(DeleteStorageNetworkIpRangeCmd.class); + cmdList.add(ListNetworkDeviceCmd.class); + cmdList.add(ListNetworkServiceProvidersCmd.class); + cmdList.add(ListPhysicalNetworksCmd.class); + cmdList.add(ListStorageNetworkIpRangeCmd.class); + cmdList.add(ListSupportedNetworkServicesCmd.class); + cmdList.add(UpdateNetworkOfferingCmd.class); + cmdList.add(UpdateNetworkServiceProviderCmd.class); + cmdList.add(UpdatePhysicalNetworkCmd.class); + cmdList.add(UpdateStorageNetworkIpRangeCmd.class); + cmdList.add(CreateDiskOfferingCmd.class); + cmdList.add(CreateServiceOfferingCmd.class); + cmdList.add(DeleteDiskOfferingCmd.class); + cmdList.add(DeleteServiceOfferingCmd.class); + cmdList.add(UpdateDiskOfferingCmd.class); + cmdList.add(UpdateServiceOfferingCmd.class); + cmdList.add(CreatePodCmd.class); + cmdList.add(DeletePodCmd.class); + cmdList.add(ListPodsByCmd.class); + cmdList.add(UpdatePodCmd.class); + cmdList.add(AddRegionCmd.class); + cmdList.add(RemoveRegionCmd.class); + cmdList.add(UpdateRegionCmd.class); + cmdList.add(ListAlertsCmd.class); + cmdList.add(ListCapacityCmd.class); + cmdList.add(UploadCustomCertificateCmd.class); + cmdList.add(ConfigureVirtualRouterElementCmd.class); + cmdList.add(CreateVirtualRouterElementCmd.class); + cmdList.add(DestroyRouterCmd.class); + cmdList.add(ListRoutersCmd.class); + cmdList.add(ListVirtualRouterElementsCmd.class); + cmdList.add(RebootRouterCmd.class); + cmdList.add(StartRouterCmd.class); + cmdList.add(StopRouterCmd.class); + cmdList.add(UpgradeRouterCmd.class); + cmdList.add(AddS3Cmd.class); + cmdList.add(CancelPrimaryStorageMaintenanceCmd.class); + cmdList.add(CreateStoragePoolCmd.class); + cmdList.add(DeletePoolCmd.class); + cmdList.add(ListS3sCmd.class); + cmdList.add(ListStoragePoolsCmd.class); + cmdList.add(PreparePrimaryStorageForMaintenanceCmd.class); + cmdList.add(UpdateStoragePoolCmd.class); + cmdList.add(AddSwiftCmd.class); + cmdList.add(ListSwiftsCmd.class); + cmdList.add(DestroySystemVmCmd.class); + cmdList.add(ListSystemVMsCmd.class); + cmdList.add(MigrateSystemVMCmd.class); + cmdList.add(RebootSystemVmCmd.class); + cmdList.add(StartSystemVMCmd.class); + cmdList.add(StopSystemVmCmd.class); + cmdList.add(UpgradeSystemVMCmd.class); + cmdList.add(PrepareTemplateCmd.class); + cmdList.add(AddTrafficMonitorCmd.class); + cmdList.add(AddTrafficTypeCmd.class); + cmdList.add(DeleteTrafficMonitorCmd.class); + cmdList.add(DeleteTrafficTypeCmd.class); + cmdList.add(GenerateUsageRecordsCmd.class); + cmdList.add(GetUsageRecordsCmd.class); + cmdList.add(ListTrafficMonitorsCmd.class); + cmdList.add(ListTrafficTypeImplementorsCmd.class); + cmdList.add(ListTrafficTypesCmd.class); + cmdList.add(ListUsageTypesCmd.class); + cmdList.add(UpdateTrafficTypeCmd.class); + cmdList.add(CreateUserCmd.class); + cmdList.add(DeleteUserCmd.class); + cmdList.add(DisableUserCmd.class); + cmdList.add(EnableUserCmd.class); + cmdList.add(GetUserCmd.class); + cmdList.add(ListUsersCmd.class); + cmdList.add(LockUserCmd.class); + cmdList.add(RegisterCmd.class); + cmdList.add(UpdateUserCmd.class); + cmdList.add(CreateVlanIpRangeCmd.class); + cmdList.add(DeleteVlanIpRangeCmd.class); + cmdList.add(ListVlanIpRangesCmd.class); + cmdList.add(AssignVMCmd.class); + cmdList.add(MigrateVMCmd.class); + cmdList.add(RecoverVMCmd.class); + cmdList.add(CreatePrivateGatewayCmd.class); + cmdList.add(CreateVPCOfferingCmd.class); + cmdList.add(DeletePrivateGatewayCmd.class); + cmdList.add(DeleteVPCOfferingCmd.class); + cmdList.add(UpdateVPCOfferingCmd.class); + cmdList.add(CreateZoneCmd.class); + cmdList.add(DeleteZoneCmd.class); + cmdList.add(MarkDefaultZoneForAccountCmd.class); + cmdList.add(UpdateZoneCmd.class); + cmdList.add(AddAccountToProjectCmd.class); + cmdList.add(DeleteAccountFromProjectCmd.class); + cmdList.add(ListAccountsCmd.class); + cmdList.add(ListProjectAccountsCmd.class); + cmdList.add(AssociateIPAddrCmd.class); + cmdList.add(DisassociateIPAddrCmd.class); + cmdList.add(ListPublicIpAddressesCmd.class); + cmdList.add(CreateAutoScalePolicyCmd.class); + cmdList.add(CreateAutoScaleVmGroupCmd.class); + cmdList.add(CreateAutoScaleVmProfileCmd.class); + cmdList.add(CreateConditionCmd.class); + cmdList.add(DeleteAutoScalePolicyCmd.class); + cmdList.add(DeleteAutoScaleVmGroupCmd.class); + cmdList.add(DeleteAutoScaleVmProfileCmd.class); + cmdList.add(DeleteConditionCmd.class); + cmdList.add(DisableAutoScaleVmGroupCmd.class); + cmdList.add(EnableAutoScaleVmGroupCmd.class); + cmdList.add(ListAutoScalePoliciesCmd.class); + cmdList.add(ListAutoScaleVmGroupsCmd.class); + cmdList.add(ListAutoScaleVmProfilesCmd.class); + cmdList.add(ListConditionsCmd.class); + cmdList.add(ListCountersCmd.class); + cmdList.add(UpdateAutoScalePolicyCmd.class); + cmdList.add(UpdateAutoScaleVmGroupCmd.class); + cmdList.add(UpdateAutoScaleVmProfileCmd.class); + cmdList.add(ListCapabilitiesCmd.class); + cmdList.add(ListEventsCmd.class); + cmdList.add(ListEventTypesCmd.class); + cmdList.add(CreateEgressFirewallRuleCmd.class); + cmdList.add(CreateFirewallRuleCmd.class); + cmdList.add(CreatePortForwardingRuleCmd.class); + cmdList.add(DeleteEgressFirewallRuleCmd.class); + cmdList.add(DeleteFirewallRuleCmd.class); + cmdList.add(DeletePortForwardingRuleCmd.class); + cmdList.add(ListEgressFirewallRulesCmd.class); + cmdList.add(ListFirewallRulesCmd.class); + cmdList.add(ListPortForwardingRulesCmd.class); + cmdList.add(UpdatePortForwardingRuleCmd.class); + cmdList.add(ListGuestOsCategoriesCmd.class); + cmdList.add(ListGuestOsCmd.class); + cmdList.add(AttachIsoCmd.class); + cmdList.add(CopyIsoCmd.class); + cmdList.add(DeleteIsoCmd.class); + cmdList.add(DetachIsoCmd.class); + cmdList.add(ExtractIsoCmd.class); + cmdList.add(ListIsoPermissionsCmd.class); + cmdList.add(ListIsosCmd.class); + cmdList.add(RegisterIsoCmd.class); + cmdList.add(UpdateIsoCmd.class); + cmdList.add(UpdateIsoPermissionsCmd.class); + cmdList.add(ListAsyncJobsCmd.class); + cmdList.add(QueryAsyncJobResultCmd.class); + cmdList.add(AssignToLoadBalancerRuleCmd.class); + cmdList.add(CreateLBStickinessPolicyCmd.class); + cmdList.add(CreateLoadBalancerRuleCmd.class); + cmdList.add(DeleteLBStickinessPolicyCmd.class); + cmdList.add(DeleteLoadBalancerRuleCmd.class); + cmdList.add(ListLBStickinessPoliciesCmd.class); + cmdList.add(ListLoadBalancerRuleInstancesCmd.class); + cmdList.add(ListLoadBalancerRulesCmd.class); + cmdList.add(RemoveFromLoadBalancerRuleCmd.class); + cmdList.add(UpdateLoadBalancerRuleCmd.class); + cmdList.add(CreateIpForwardingRuleCmd.class); + cmdList.add(DeleteIpForwardingRuleCmd.class); + cmdList.add(DisableStaticNatCmd.class); + cmdList.add(EnableStaticNatCmd.class); + cmdList.add(ListIpForwardingRulesCmd.class); + cmdList.add(CreateNetworkACLCmd.class); + cmdList.add(CreateNetworkCmd.class); + cmdList.add(DeleteNetworkACLCmd.class); + cmdList.add(DeleteNetworkCmd.class); + cmdList.add(ListNetworkACLsCmd.class); + cmdList.add(ListNetworkOfferingsCmd.class); + cmdList.add(ListNetworksCmd.class); + cmdList.add(RestartNetworkCmd.class); + cmdList.add(UpdateNetworkCmd.class); + cmdList.add(ListDiskOfferingsCmd.class); + cmdList.add(ListServiceOfferingsCmd.class); + cmdList.add(ActivateProjectCmd.class); + cmdList.add(CreateProjectCmd.class); + cmdList.add(DeleteProjectCmd.class); + cmdList.add(DeleteProjectInvitationCmd.class); + cmdList.add(ListProjectInvitationsCmd.class); + cmdList.add(ListProjectsCmd.class); + cmdList.add(SuspendProjectCmd.class); + cmdList.add(UpdateProjectCmd.class); + cmdList.add(UpdateProjectInvitationCmd.class); + cmdList.add(ListRegionsCmd.class); + cmdList.add(GetCloudIdentifierCmd.class); + cmdList.add(ListHypervisorsCmd.class); + cmdList.add(ListResourceLimitsCmd.class); + cmdList.add(UpdateResourceCountCmd.class); + cmdList.add(UpdateResourceLimitCmd.class); + cmdList.add(AuthorizeSecurityGroupEgressCmd.class); + cmdList.add(AuthorizeSecurityGroupIngressCmd.class); + cmdList.add(CreateSecurityGroupCmd.class); + cmdList.add(DeleteSecurityGroupCmd.class); + cmdList.add(ListSecurityGroupsCmd.class); + cmdList.add(RevokeSecurityGroupEgressCmd.class); + cmdList.add(RevokeSecurityGroupIngressCmd.class); + cmdList.add(CreateSnapshotCmd.class); + cmdList.add(CreateSnapshotPolicyCmd.class); + cmdList.add(DeleteSnapshotCmd.class); + cmdList.add(DeleteSnapshotPoliciesCmd.class); + cmdList.add(ListSnapshotPoliciesCmd.class); + cmdList.add(ListSnapshotsCmd.class); + cmdList.add(CreateSSHKeyPairCmd.class); + cmdList.add(DeleteSSHKeyPairCmd.class); + cmdList.add(ListSSHKeyPairsCmd.class); + cmdList.add(RegisterSSHKeyPairCmd.class); + cmdList.add(CreateTagsCmd.class); + cmdList.add(DeleteTagsCmd.class); + cmdList.add(ListTagsCmd.class); + cmdList.add(CopyTemplateCmd.class); + cmdList.add(CreateTemplateCmd.class); + cmdList.add(DeleteTemplateCmd.class); + cmdList.add(ExtractTemplateCmd.class); + cmdList.add(ListTemplatePermissionsCmd.class); + cmdList.add(ListTemplatesCmd.class); + cmdList.add(RegisterTemplateCmd.class); + cmdList.add(UpdateTemplateCmd.class); + cmdList.add(UpdateTemplatePermissionsCmd.class); + cmdList.add(AddNicToVMCmd.class); + cmdList.add(DeployVMCmd.class); + cmdList.add(DestroyVMCmd.class); + cmdList.add(GetVMPasswordCmd.class); + cmdList.add(ListVMsCmd.class); + cmdList.add(RebootVMCmd.class); + cmdList.add(RemoveNicFromVMCmd.class); + cmdList.add(ResetVMPasswordCmd.class); + cmdList.add(ResetVMSSHKeyCmd.class); + cmdList.add(RestoreVMCmd.class); + cmdList.add(StartVMCmd.class); + cmdList.add(StopVMCmd.class); + cmdList.add(UpdateDefaultNicForVMCmd.class); + cmdList.add(UpdateVMCmd.class); + cmdList.add(UpgradeVMCmd.class); + cmdList.add(CreateVMGroupCmd.class); + cmdList.add(DeleteVMGroupCmd.class); + cmdList.add(ListVMGroupsCmd.class); + cmdList.add(UpdateVMGroupCmd.class); + cmdList.add(AttachVolumeCmd.class); + cmdList.add(CreateVolumeCmd.class); + cmdList.add(DeleteVolumeCmd.class); + cmdList.add(DetachVolumeCmd.class); + cmdList.add(ExtractVolumeCmd.class); + cmdList.add(ListVolumesCmd.class); + cmdList.add(MigrateVolumeCmd.class); + cmdList.add(ResizeVolumeCmd.class); + cmdList.add(UploadVolumeCmd.class); + cmdList.add(CreateStaticRouteCmd.class); + cmdList.add(CreateVPCCmd.class); + cmdList.add(DeleteStaticRouteCmd.class); + cmdList.add(DeleteVPCCmd.class); + cmdList.add(ListPrivateGatewaysCmd.class); + cmdList.add(ListStaticRoutesCmd.class); + cmdList.add(ListVPCOfferingsCmd.class); + cmdList.add(ListVPCsCmd.class); + cmdList.add(RestartVPCCmd.class); + cmdList.add(UpdateVPCCmd.class); + cmdList.add(AddVpnUserCmd.class); + cmdList.add(CreateRemoteAccessVpnCmd.class); + cmdList.add(CreateVpnConnectionCmd.class); + cmdList.add(CreateVpnCustomerGatewayCmd.class); + cmdList.add(CreateVpnGatewayCmd.class); + cmdList.add(DeleteRemoteAccessVpnCmd.class); + cmdList.add(DeleteVpnConnectionCmd.class); + cmdList.add(DeleteVpnCustomerGatewayCmd.class); + cmdList.add(DeleteVpnGatewayCmd.class); + cmdList.add(ListRemoteAccessVpnsCmd.class); + cmdList.add(ListVpnConnectionsCmd.class); + cmdList.add(ListVpnCustomerGatewaysCmd.class); + cmdList.add(ListVpnGatewaysCmd.class); + cmdList.add(ListVpnUsersCmd.class); + cmdList.add(RemoveVpnUserCmd.class); + cmdList.add(ResetVpnConnectionCmd.class); + cmdList.add(UpdateVpnCustomerGatewayCmd.class); + cmdList.add(ListZonesByCmd.class); return cmdList; }