Merge branch 'master' into ui-multiple-nics

This commit is contained in:
Brian Federle 2013-03-14 10:45:27 -07:00
commit 4b26e9d89b
55 changed files with 980 additions and 1338 deletions

1
.gitignore vendored
View File

@ -59,6 +59,7 @@ tools/cli/build/
*.iso
*.tar.gz
*.tgz
target-eclipse
awsapi/modules/*
!.gitignore
.classpath

View File

@ -62,5 +62,4 @@ public interface Domain extends OwnedBy, Identity, InternalIdentity {
public String getUuid();
int getRegionId();
}

View File

@ -63,7 +63,5 @@ public interface Account extends ControlledEntity, InternalIdentity, Identity {
public Long getDefaultZoneId();
public int getRegionId();
public String getUuid();
}

View File

@ -62,7 +62,7 @@ public interface AccountService {
* @return the user if created successfully, null otherwise
*/
UserAccount createUserAccount(String userName, String password, String firstName, String lastName, String email, String timezone, String accountName, short accountType, Long domainId, String networkDomain,
Map<String, String> details);
Map<String, String> details, String accountUUID, String userUUID);
/**
* Locks a user by userId. A locked user cannot access the API, but will still have running VMs/IP addresses
@ -77,7 +77,7 @@ public interface AccountService {
User getSystemUser();
User createUser(String userName, String password, String firstName, String lastName, String email, String timeZone, String accountName, Long domainId);
User createUser(String userName, String password, String firstName, String lastName, String email, String timeZone, String accountName, Long domainId, String userUUID);
boolean isAdmin(short accountType);

View File

@ -27,7 +27,7 @@ import com.cloud.utils.Pair;
public interface DomainService {
Domain createDomain(String name, Long parentId, String networkDomain);
Domain createDomain(String name, Long parentId, String networkDomain, String domainUUID);
Domain getDomain(long id);

View File

@ -73,5 +73,4 @@ public interface User extends OwnedBy, InternalIdentity {
boolean isRegistered();
public int getRegionId();
}

View File

@ -1,468 +0,0 @@
// 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.apache.cloudstack.api;
public class ApiConstants {
public static final String ACCOUNT = "account";
public static final String ACCOUNTS = "accounts";
public static final String ACCOUNT_TYPE = "accounttype";
public static final String ACCOUNT_ID = "accountid";
public static final String ALGORITHM = "algorithm";
public static final String ALLOCATED_ONLY = "allocatedonly";
public static final String API_KEY = "userapikey";
public static final String APPLIED = "applied";
public static final String AVAILABLE = "available";
public static final String BITS = "bits";
public static final String BOOTABLE = "bootable";
public static final String BIND_DN = "binddn";
public static final String BIND_PASSWORD = "bindpass";
public static final String CATEGORY = "category";
public static final String CERTIFICATE = "certificate";
public static final String PRIVATE_KEY = "privatekey";
public static final String DOMAIN_SUFFIX = "domainsuffix";
public static final String DNS_SEARCH_ORDER = "dnssearchorder";
public static final String CIDR = "cidr";
public static final String IP6_CIDR = "ip6cidr";
public static final String CIDR_LIST = "cidrlist";
public static final String CLEANUP = "cleanup";
public static final String CLUSTER_ID = "clusterid";
public static final String CLUSTER_NAME = "clustername";
public static final String CLUSTER_TYPE = "clustertype";
public static final String COMPONENT = "component";
public static final String CPU_NUMBER = "cpunumber";
public static final String CPU_SPEED = "cpuspeed";
public static final String CREATED = "created";
public static final String CUSTOMIZED = "customized";
public static final String DESCRIPTION = "description";
public static final String DESTINATION_ZONE_ID = "destzoneid";
public static final String DETAILS = "details";
public static final String DEVICE_ID = "deviceid";
public static final String DISK_OFFERING_ID = "diskofferingid";
public static final String DISK_SIZE = "disksize";
public static final String DISPLAY_NAME = "displayname";
public static final String DISPLAY_TEXT = "displaytext";
public static final String DNS1 = "dns1";
public static final String DNS2 = "dns2";
public static final String DOMAIN = "domain";
public static final String DOMAIN_ID = "domainid";
public static final String DURATION = "duration";
public static final String EMAIL = "email";
public static final String END_DATE = "enddate";
public static final String END_IP = "endip";
public static final String END_IPV6 = "endipv6";
public static final String END_PORT = "endport";
public static final String ENTRY_TIME = "entrytime";
public static final String FETCH_LATEST = "fetchlatest";
public static final String FIRSTNAME = "firstname";
public static final String FORCED = "forced";
public static final String FORCED_DESTROY_LOCAL_STORAGE = "forcedestroylocalstorage";
public static final String FORMAT = "format";
public static final String FOR_VIRTUAL_NETWORK = "forvirtualnetwork";
public static final String GATEWAY = "gateway";
public static final String IP6_GATEWAY = "ip6gateway";
public static final String GROUP = "group";
public static final String GROUP_ID = "groupid";
public static final String GUEST_CIDR_ADDRESS = "guestcidraddress";
public static final String HA_ENABLE = "haenable";
public static final String HOST_ID = "hostid";
public static final String HOST_NAME = "hostname";
public static final String HYPERVISOR = "hypervisor";
public static final String INLINE = "inline";
public static final String INSTANCE = "instance";
public static final String ICMP_CODE = "icmpcode";
public static final String ICMP_TYPE = "icmptype";
public static final String ID = "id";
public static final String IDS = "ids";
public static final String INTERNAL_DNS1 = "internaldns1";
public static final String INTERNAL_DNS2 = "internaldns2";
public static final String INTERVAL_TYPE = "intervaltype";
public static final String IP_ADDRESS = "ipaddress";
public static final String IP6_ADDRESS = "ip6address";
public static final String IP_ADDRESS_ID = "ipaddressid";
public static final String IS_ASYNC = "isasync";
public static final String IP_AVAILABLE = "ipavailable";
public static final String IP_LIMIT = "iplimit";
public static final String IP_TOTAL = "iptotal";
public static final String IS_CLEANUP_REQUIRED = "iscleanuprequired";
public static final String IS_EXTRACTABLE = "isextractable";
public static final String IS_FEATURED = "isfeatured";
public static final String IS_PUBLIC = "ispublic";
public static final String IS_PERSISTENT = "ispersistent";
public static final String IS_READY = "isready";
public static final String IS_RECURSIVE = "isrecursive";
public static final String ISO_FILTER = "isofilter";
public static final String ISO_GUEST_OS_NONE = "None";
public static final String JOB_ID = "jobid";
public static final String JOB_STATUS = "jobstatus";
public static final String LASTNAME = "lastname";
public static final String LEVEL = "level";
public static final String LENGTH = "length";
public static final String LIMIT_CPU_USE = "limitcpuuse";
public static final String LOCK = "lock";
public static final String LUN = "lun";
public static final String LBID = "lbruleid";
public static final String MAX = "max";
public static final String MAX_SNAPS = "maxsnaps";
public static final String MEMORY = "memory";
public static final String MODE = "mode";
public static final String NAME = "name";
public static final String METHOD_NAME = "methodname";
public static final String NETWORK_DOMAIN = "networkdomain";
public static final String NETMASK = "netmask";
public static final String NEW_NAME = "newname";
public static final String NUM_RETRIES = "numretries";
public static final String OFFER_HA = "offerha";
public static final String IS_SYSTEM_OFFERING = "issystem";
public static final String IS_DEFAULT_USE = "defaultuse";
public static final String OP = "op";
public static final String OS_CATEGORY_ID = "oscategoryid";
public static final String OS_TYPE_ID = "ostypeid";
public static final String PARAMS = "params";
public static final String PARENT_DOMAIN_ID = "parentdomainid";
public static final String PASSWORD = "password";
public static final String NEW_PASSWORD = "new_password";
public static final String PASSWORD_ENABLED = "passwordenabled";
public static final String SSHKEY_ENABLED = "sshkeyenabled";
public static final String PATH = "path";
public static final String POD_ID = "podid";
public static final String POD_IDS = "podids";
public static final String POLICY_ID = "policyid";
public static final String PORT = "port";
public static final String PORTAL = "portal";
public static final String PORT_FORWARDING_SERVICE_ID = "portforwardingserviceid";
public static final String PRIVATE_INTERFACE = "privateinterface";
public static final String PRIVATE_IP = "privateip";
public static final String PRIVATE_PORT = "privateport";
public static final String PRIVATE_START_PORT = "privateport";
public static final String PRIVATE_END_PORT = "privateendport";
public static final String PRIVATE_ZONE = "privatezone";
public static final String PROTOCOL = "protocol";
public static final String PUBLIC_INTERFACE = "publicinterface";
public static final String PUBLIC_IP_ID = "publicipid";
public static final String PUBLIC_IP = "publicip";
public static final String PUBLIC_PORT = "publicport";
public static final String PUBLIC_START_PORT = "publicport";
public static final String PUBLIC_END_PORT = "publicendport";
public static final String PUBLIC_ZONE = "publiczone";
public static final String RECEIVED_BYTES = "receivedbytes";
public static final String REQUIRES_HVM = "requireshvm";
public static final String RESOURCE_TYPE = "resourcetype";
public static final String RESPONSE = "response";
public static final String QUERY_FILTER = "queryfilter";
public static final String SCHEDULE = "schedule";
public static final String SCOPE = "scope";
public static final String SECRET_KEY = "usersecretkey";
public static final String SINCE = "since";
public static final String KEY = "key";
public static final String SEARCH_BASE = "searchbase";
public static final String SECURITY_GROUP_IDS = "securitygroupids";
public static final String SECURITY_GROUP_NAMES = "securitygroupnames";
public static final String SECURITY_GROUP_NAME = "securitygroupname";
public static final String SECURITY_GROUP_ID = "securitygroupid";
public static final String SENT = "sent";
public static final String SENT_BYTES = "sentbytes";
public static final String SERVICE_OFFERING_ID = "serviceofferingid";
public static final String SHOW_CAPACITIES = "showcapacities";
public static final String SIZE = "size";
public static final String SNAPSHOT_ID = "snapshotid";
public static final String SNAPSHOT_POLICY_ID = "snapshotpolicyid";
public static final String SNAPSHOT_TYPE = "snapshottype";
public static final String SOURCE_ZONE_ID = "sourcezoneid";
public static final String START_DATE = "startdate";
public static final String START_IP = "startip";
public static final String START_IPV6 = "startipv6";
public static final String START_PORT = "startport";
public static final String STATE = "state";
public static final String STATUS = "status";
public static final String STORAGE_TYPE = "storagetype";
public static final String SYSTEM_VM_TYPE = "systemvmtype";
public static final String TAGS = "tags";
public static final String TARGET_IQN = "targetiqn";
public static final String TEMPLATE_FILTER = "templatefilter";
public static final String TEMPLATE_ID = "templateid";
public static final String ISO_ID = "isoid";
public static final String TIMEOUT = "timeout";
public static final String TIMEZONE = "timezone";
public static final String TYPE = "type";
public static final String TRUST_STORE = "truststore";
public static final String TRUST_STORE_PASSWORD = "truststorepass";
public static final String URL = "url";
public static final String USAGE_INTERFACE = "usageinterface";
public static final String USER_DATA = "userdata";
public static final String USER_ID = "userid";
public static final String USE_SSL = "ssl";
public static final String USERNAME = "username";
public static final String USER_SECURITY_GROUP_LIST = "usersecuritygrouplist";
public static final String USE_VIRTUAL_NETWORK = "usevirtualnetwork";
public static final String VALUE = "value";
public static final String VIRTUAL_MACHINE_ID = "virtualmachineid";
public static final String VIRTUAL_MACHINE_IDS = "virtualmachineids";
public static final String VLAN = "vlan";
public static final String VLAN_ID = "vlanid";
public static final String VM_AVAILABLE = "vmavailable";
public static final String VM_LIMIT = "vmlimit";
public static final String VM_TOTAL = "vmtotal";
public static final String VNET = "vnet";
public static final String VOLUME_ID = "volumeid";
public static final String ZONE_ID = "zoneid";
public static final String ZONE_NAME = "zonename";
public static final String NETWORK_TYPE = "networktype";
public static final String PAGE = "page";
public static final String PAGE_SIZE = "pagesize";
public static final String COUNT = "count";
public static final String TRAFFIC_TYPE = "traffictype";
public static final String NETWORK_OFFERING_ID = "networkofferingid";
public static final String NETWORK_IDS = "networkids";
public static final String NETWORK_ID = "networkid";
public static final String NIC_ID = "nicid";
public static final String SPECIFY_VLAN = "specifyvlan";
public static final String IS_DEFAULT = "isdefault";
public static final String IS_SYSTEM = "issystem";
public static final String AVAILABILITY = "availability";
public static final String NETWORKRATE = "networkrate";
public static final String HOST_TAGS = "hosttags";
public static final String SSH_KEYPAIR = "keypair";
public static final String HOST_CPU_CAPACITY = "hostcpucapacity";
public static final String HOST_CPU_NUM = "hostcpunum";
public static final String HOST_MEM_CAPACITY = "hostmemcapacity";
public static final String HOST_MAC = "hostmac";
public static final String HOST_TAG = "hosttag";
public static final String PXE_SERVER_TYPE = "pxeservertype";
public static final String LINMIN_USERNAME = "linminusername";
public static final String LINMIN_PASSWORD = "linminpassword";
public static final String LINMIN_APID = "linminapid";
public static final String DHCP_SERVER_TYPE = "dhcpservertype";
public static final String LINK_LOCAL_IP = "linklocalip";
public static final String LINK_LOCAL_MAC_ADDRESS = "linklocalmacaddress";
public static final String LINK_LOCAL_MAC_NETMASK = "linklocalnetmask";
public static final String LINK_LOCAL_NETWORK_ID = "linklocalnetworkid";
public static final String PRIVATE_MAC_ADDRESS = "privatemacaddress";
public static final String PRIVATE_NETMASK = "privatenetmask";
public static final String PRIVATE_NETWORK_ID = "privatenetworkid";
public static final String ALLOCATION_STATE = "allocationstate";
public static final String MANAGED_STATE = "managedstate";
public static final String STORAGE_ID = "storageid";
public static final String PING_STORAGE_SERVER_IP = "pingstorageserverip";
public static final String PING_DIR = "pingdir";
public static final String TFTP_DIR = "tftpdir";
public static final String PING_CIFS_USERNAME = "pingcifsusername";
public static final String PING_CIFS_PASSWORD = "pingcifspassword";
public static final String CHECKSUM = "checksum";
public static final String NETWORK_DEVICE_TYPE = "networkdevicetype";
public static final String NETWORK_DEVICE_PARAMETER_LIST = "networkdeviceparameterlist";
public static final String ZONE_TOKEN = "zonetoken";
public static final String DHCP_PROVIDER = "dhcpprovider";
public static final String RESULT = "success";
public static final String LUN_ID = "lunId";
public static final String IQN = "iqn";
public static final String AGGREGATE_NAME = "aggregatename";
public static final String POOL_NAME = "poolname";
public static final String VOLUME_NAME = "volumename";
public static final String SNAPSHOT_POLICY = "snapshotpolicy";
public static final String SNAPSHOT_RESERVATION = "snapshotreservation";
public static final String IP_NETWORK_LIST = "iptonetworklist";
public static final String PARAM_LIST = "param";
public static final String FOR_LOAD_BALANCING = "forloadbalancing";
public static final String KEYBOARD = "keyboard";
public static final String OPEN_FIREWALL = "openfirewall";
public static final String TEMPLATE_TAG = "templatetag";
public static final String HYPERVISOR_VERSION = "hypervisorversion";
public static final String MAX_GUESTS_LIMIT = "maxguestslimit";
public static final String PROJECT_ID = "projectid";
public static final String PROJECT_IDS = "projectids";
public static final String PROJECT = "project";
public static final String ROLE = "role";
public static final String USER = "user";
public static final String ACTIVE_ONLY = "activeonly";
public static final String TOKEN = "token";
public static final String ACCEPT = "accept";
public static final String SORT_KEY = "sortkey";
public static final String ACCOUNT_DETAILS = "accountdetails";
public static final String SERVICE_PROVIDER_LIST = "serviceproviderlist";
public static final String SERVICE_CAPABILITY_LIST = "servicecapabilitylist";
public static final String CAN_CHOOSE_SERVICE_CAPABILITY = "canchooseservicecapability";
public static final String PROVIDER = "provider";
public static final String NETWORK_SPEED = "networkspeed";
public static final String BROADCAST_DOMAIN_RANGE = "broadcastdomainrange";
public static final String ISOLATION_METHODS = "isolationmethods";
public static final String PHYSICAL_NETWORK_ID = "physicalnetworkid";
public static final String DEST_PHYSICAL_NETWORK_ID = "destinationphysicalnetworkid";
public static final String ENABLED = "enabled";
public static final String SERVICE_NAME = "servicename";
public static final String DHCP_RANGE = "dhcprange";
public static final String UUID = "uuid";
public static final String SECURITY_GROUP_EANBLED = "securitygroupenabled";
public static final String LOCAL_STORAGE_ENABLED = "localstorageenabled";
public static final String GUEST_IP_TYPE = "guestiptype";
public static final String XEN_NETWORK_LABEL = "xennetworklabel";
public static final String KVM_NETWORK_LABEL = "kvmnetworklabel";
public static final String VMWARE_NETWORK_LABEL = "vmwarenetworklabel";
public static final String NETWORK_SERVICE_PROVIDER_ID = "nspid";
public static final String SERVICE_LIST = "servicelist";
public static final String CAN_ENABLE_INDIVIDUAL_SERVICE = "canenableindividualservice";
public static final String SUPPORTED_SERVICES = "supportedservices";
public static final String NSP_ID = "nspid";
public static final String ACL_TYPE = "acltype";
public static final String SUBDOMAIN_ACCESS = "subdomainaccess";
public static final String LOAD_BALANCER_DEVICE_ID = "lbdeviceid";
public static final String LOAD_BALANCER_DEVICE_NAME = "lbdevicename";
public static final String LOAD_BALANCER_DEVICE_STATE = "lbdevicestate";
public static final String LOAD_BALANCER_DEVICE_CAPACITY = "lbdevicecapacity";
public static final String LOAD_BALANCER_DEVICE_DEDICATED = "lbdevicededicated";
public static final String FIREWALL_DEVICE_ID = "fwdeviceid";
public static final String FIREWALL_DEVICE_NAME = "fwdevicename";
public static final String FIREWALL_DEVICE_STATE = "fwdevicestate";
public static final String FIREWALL_DEVICE_CAPACITY = "fwdevicecapacity";
public static final String FIREWALL_DEVICE_DEDICATED = "fwdevicededicated";
public static final String SERVICE = "service";
public static final String ASSOCIATED_NETWORK_ID = "associatednetworkid";
public static final String ASSOCIATED_NETWORK_NAME = "associatednetworkname";
public static final String SOURCE_NAT_SUPPORTED = "sourcenatsupported";
public static final String RESOURCE_STATE = "resourcestate";
public static final String PROJECT_INVITE_REQUIRED = "projectinviterequired";
public static final String REQUIRED = "required";
public static final String RESTART_REQUIRED = "restartrequired";
public static final String ALLOW_USER_CREATE_PROJECTS = "allowusercreateprojects";
public static final String CONSERVE_MODE = "conservemode";
public static final String TRAFFIC_TYPE_IMPLEMENTOR = "traffictypeimplementor";
public static final String KEYWORD = "keyword";
public static final String LIST_ALL = "listall";
public static final String SPECIFY_IP_RANGES = "specifyipranges";
public static final String IS_SOURCE_NAT = "issourcenat";
public static final String IS_STATIC_NAT = "isstaticnat";
public static final String SORT_BY = "sortby";
public static final String CHANGE_CIDR = "changecidr";
public static final String PURPOSE = "purpose";
public static final String IS_TAGGED = "istagged";
public static final String INSTANCE_NAME = "instancename";
public static final String START_VM = "startvm";
public static final String HA_HOST = "hahost";
public static final String CUSTOM_DISK_OFF_MAX_SIZE = "customdiskofferingmaxsize";
public static final String DEFAULT_ZONE_ID = "defaultzoneid";
public static final String GUID = "guid";
public static final String EXTERNAL_SWITCH_MGMT_DEVICE_ID = "vsmdeviceid";
public static final String EXTERNAL_SWITCH_MGMT_DEVICE_NAME = "vsmdevicename";
public static final String EXTERNAL_SWITCH_MGMT_DEVICE_STATE = "vsmdevicestate";
// Would we need to have a capacity field for Cisco N1KV VSM? Max hosts managed by it perhaps? May remove this later.
public static final String EXTERNAL_SWITCH_MGMT_DEVICE_CAPACITY = "vsmdevicecapacity";
public static final String CISCO_NEXUS_VSM_NAME = "vsmname";
public static final String VSM_USERNAME = "vsmusername";
public static final String VSM_PASSWORD = "vsmpassword";
public static final String VSM_IPADDRESS = "vsmipaddress";
public static final String VSM_MGMT_VLAN_ID = "vsmmgmtvlanid";
public static final String VSM_PKT_VLAN_ID = "vsmpktvlanid";
public static final String VSM_CTRL_VLAN_ID = "vsmctrlvlanid";
public static final String VSM_STORAGE_VLAN_ID = "vsmstoragevlanid";
public static final String VSM_DOMAIN_ID = "vsmdomainid";
public static final String VSM_CONFIG_MODE = "vsmconfigmode";
public static final String VSM_CONFIG_STATE = "vsmconfigstate";
public static final String VSM_DEVICE_STATE = "vsmdevicestate";
public static final String ADD_VSM_FLAG = "addvsmflag";
public static final String END_POINT = "endpoint";
public static final String REGION_ID = "regionid";
public static final String IS_PROPAGATE = "ispropagate";
public static final String VPC_OFF_ID = "vpcofferingid";
public static final String NETWORK = "network";
public static final String VPC_ID = "vpcid";
public static final String GATEWAY_ID = "gatewayid";
public static final String CAN_USE_FOR_DEPLOY = "canusefordeploy";
public static final String RESOURCE_IDS = "resourceids";
public static final String RESOURCE_ID = "resourceid";
public static final String CUSTOMER = "customer";
public static final String S2S_VPN_GATEWAY_ID = "s2svpngatewayid";
public static final String S2S_CUSTOMER_GATEWAY_ID = "s2scustomergatewayid";
public static final String IPSEC_PSK = "ipsecpsk";
public static final String GUEST_IP = "guestip";
public static final String REMOVED = "removed";
public static final String IKE_POLICY = "ikepolicy";
public static final String ESP_POLICY = "esppolicy";
public static final String IKE_LIFETIME = "ikelifetime";
public static final String ESP_LIFETIME = "esplifetime";
public static final String DPD = "dpd";
public static final String FOR_VPC = "forvpc";
public static final String SHRINK_OK = "shrinkok";
public static final String NICIRA_NVP_DEVICE_ID = "nvpdeviceid";
public static final String NICIRA_NVP_TRANSPORT_ZONE_UUID = "transportzoneuuid";
public static final String NICIRA_NVP_DEVICE_NAME = "niciradevicename";
public static final String NICIRA_NVP_GATEWAYSERVICE_UUID = "l3gatewayserviceuuid";
public static final String S3_ACCESS_KEY = "accesskey";
public static final String S3_SECRET_KEY = "secretkey";
public static final String S3_END_POINT = "endpoint";
public static final String S3_BUCKET_NAME = "bucket";
public static final String S3_HTTPS_FLAG = "usehttps";
public static final String S3_CONNECTION_TIMEOUT = "connectiontimeout";
public static final String S3_MAX_ERROR_RETRY = "maxerrorretry";
public static final String S3_SOCKET_TIMEOUT = "sockettimeout";
public static final String INCL_ZONES = "includezones";
public static final String EXCL_ZONES = "excludezones";
public static final String SOURCE = "source";
public static final String COUNTER_ID = "counterid";
public static final String AGGR_OPERATOR = "aggroperator";
public static final String AGGR_FUNCTION = "aggrfunction";
public static final String AGGR_VALUE = "aggrvalue";
public static final String THRESHOLD = "threshold";
public static final String RELATIONAL_OPERATOR = "relationaloperator";
public static final String OTHER_DEPLOY_PARAMS = "otherdeployparams";
public static final String MIN_MEMBERS = "minmembers";
public static final String MAX_MEMBERS = "maxmembers";
public static final String AUTOSCALE_VM_DESTROY_TIME = "destroyvmgraceperiod";
public static final String VMPROFILE_ID = "vmprofileid";
public static final String VMGROUP_ID = "vmgroupid";
public static final String CS_URL = "csurl";
public static final String SCALEUP_POLICY_IDS = "scaleuppolicyids";
public static final String SCALEDOWN_POLICY_IDS = "scaledownpolicyids";
public static final String SCALEUP_POLICIES = "scaleuppolicies";
public static final String SCALEDOWN_POLICIES = "scaledownpolicies";
public static final String INTERVAL = "interval";
public static final String QUIETTIME = "quiettime";
public static final String ACTION = "action";
public static final String CONDITION_ID = "conditionid";
public static final String CONDITION_IDS = "conditionids";
public static final String COUNTERPARAM_LIST = "counterparam";
public static final String AUTOSCALE_USER_ID = "autoscaleuserid";
public static final String BAREMETAL_DISCOVER_NAME = "baremetaldiscovername";
<<<<<<< HEAD
public static final String UCS_DN = "ucsdn";
=======
public static final String VM_SNAPSHOT_DESCRIPTION = "description";
public static final String VM_SNAPSHOT_DISPLAYNAME = "name";
public static final String VM_SNAPSHOT_ID = "vmsnapshotid";
public static final String VM_SNAPSHOT_DISK_IDS = "vmsnapshotdiskids";
public static final String VM_SNAPSHOT_MEMORY = "snapshotmemory";
>>>>>>> CLOUDSTACK-684 Support VM Snapshot
public enum HostDetails {
all, capacity, events, stats, min;
}
public enum VMDetails {
all, group, nics, stats, secgrp, tmpl, servoff, iso, volume, min;
}
public enum LDAPParams {
hostname, port, usessl, queryfilter, searchbase, dn, passwd, truststore, truststorepass;
@Override
public String toString() {
return "ldap." + name();
}
}
}

View File

@ -78,6 +78,11 @@ public class CreateAccountCmd extends BaseCmd {
@Parameter(name = ApiConstants.ACCOUNT_DETAILS, type = CommandType.MAP, description = "details for account used to store specific parameters")
private Map<String, String> details;
@Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.STRING, description="Account UUID, required for adding account from external provisioning system")
private String accountUUID;
@Parameter(name=ApiConstants.USER_ID, type=CommandType.STRING, description="User UUID, required for adding account from external provisioning system")
private String userUUID;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
@ -133,6 +138,14 @@ public class CreateAccountCmd extends BaseCmd {
return params;
}
public String getAccountUUID() {
return accountUUID;
}
public String getUserUUID() {
return userUUID;
}
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
@ -151,7 +164,7 @@ public class CreateAccountCmd extends BaseCmd {
public void execute(){
UserContext.current().setEventDetails("Account Name: "+getAccountName()+", Domain Id:"+getDomainId());
UserAccount userAccount = _accountService.createUserAccount(getUsername(), getPassword(), getFirstName(), getLastName(), getEmail(), getTimeZone(), getAccountName(), getAccountType(),
getDomainId(), getNetworkDomain(), getDetails());
getDomainId(), getNetworkDomain(), getDetails(), getAccountUUID(), getUserUUID());
if (userAccount != null) {
AccountResponse response = _responseGenerator.createUserAccountResponse(userAccount);
response.setResponseName(getCommandName());

View File

@ -49,6 +49,9 @@ public class CreateDomainCmd extends BaseCmd {
@Parameter(name=ApiConstants.NETWORK_DOMAIN, type=CommandType.STRING, description="Network domain for networks in the domain")
private String networkDomain;
@Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.STRING, description="Domain UUID, required for adding domain from another Region")
private String domainUUID;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
@ -65,6 +68,10 @@ public class CreateDomainCmd extends BaseCmd {
return networkDomain;
}
public String getDomainUUID() {
return domainUUID;
}
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
@ -82,7 +89,7 @@ public class CreateDomainCmd extends BaseCmd {
@Override
public void execute(){
UserContext.current().setEventDetails("Domain Name: "+getDomainName()+((getParentDomainId()!=null)?", Parent DomainId :"+getParentDomainId():""));
Domain domain = _domainService.createDomain(getDomainName(), getParentDomainId(), getNetworkDomain());
Domain domain = _domainService.createDomain(getDomainName(), getParentDomainId(), getNetworkDomain(), getDomainUUID());
if (domain != null) {
DomainResponse response = _responseGenerator.createDomainResponse(domain);
response.setResponseName(getCommandName());

View File

@ -49,12 +49,6 @@ public class AddRegionCmd extends BaseCmd {
@Parameter(name=ApiConstants.END_POINT, type=CommandType.STRING, required=true, description="Region service endpoint")
private String endPoint;
@Parameter(name=ApiConstants.API_KEY, type=CommandType.STRING, description="API key of Admin user")
private String apiKey;
@Parameter(name=ApiConstants.SECRET_KEY, type=CommandType.STRING, description="Secret Key of Admin user")
private String secretKey;
@Inject public RegionService _regionService;
/////////////////////////////////////////////////////
@ -73,14 +67,6 @@ public class AddRegionCmd extends BaseCmd {
return endPoint;
}
public String getApiKey() {
return apiKey;
}
public String getSecretKey() {
return secretKey;
}
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
@ -97,7 +83,7 @@ public class AddRegionCmd extends BaseCmd {
@Override
public void execute(){
Region region = _regionService.addRegion(getId(), getRegionName(), getEndPoint(), getApiKey(), getSecretKey());
Region region = _regionService.addRegion(getId(), getRegionName(), getEndPoint());
if (region != null) {
RegionResponse response = _responseGenerator.createRegionResponse(region);
response.setResponseName(getCommandName());

View File

@ -49,12 +49,6 @@ public class UpdateRegionCmd extends BaseCmd {
@Parameter(name=ApiConstants.END_POINT, type=CommandType.STRING, description="updates region with this end point")
private String endPoint;
@Parameter(name=ApiConstants.API_KEY, type=CommandType.STRING, description="new API key for the Region")
private String apiKey;
@Parameter(name=ApiConstants.SECRET_KEY, type=CommandType.STRING, description="new Secret Key for the Region")
private String secretKey;
@Inject RegionService _regionService;
/////////////////////////////////////////////////////
@ -73,13 +67,6 @@ public class UpdateRegionCmd extends BaseCmd {
return endPoint;
}
public String getApiKey() {
return apiKey;
}
public String getSecretKey() {
return secretKey;
}
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
@ -96,7 +83,7 @@ public class UpdateRegionCmd extends BaseCmd {
@Override
public void execute(){
Region region = _regionService.updateRegion(getId(), getRegionName(), getEndPoint(), getApiKey(), getSecretKey());
Region region = _regionService.updateRegion(getId(), getRegionName(), getEndPoint());
if (region != null) {
RegionResponse response = _responseGenerator.createRegionResponse(region);
response.setResponseName(getCommandName());

View File

@ -65,6 +65,9 @@ public class CreateUserCmd extends BaseCmd {
@Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required=true, description="Unique username.")
private String username;
@Parameter(name=ApiConstants.USER_ID, type=CommandType.STRING, description="User UUID, required for adding account from external provisioning system")
private String userUUID;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
@ -101,6 +104,10 @@ public class CreateUserCmd extends BaseCmd {
return username;
}
public String getUserUUID() {
return userUUID;
}
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
@ -132,7 +139,7 @@ public class CreateUserCmd extends BaseCmd {
@Override
public void execute(){
UserContext.current().setEventDetails("UserName: "+getUserName()+", FirstName :"+getFirstName()+", LastName: "+getLastName());
User user = _accountService.createUser(getUserName(), getPassword(), getFirstName(), getLastName(), getEmail(), getTimezone(), getAccountName(), getDomainId());
User user = _accountService.createUser(getUserName(), getPassword(), getFirstName(), getLastName(), getEmail(), getTimezone(), getAccountName(), getDomainId(), getUserUUID());
if (user != null) {
UserResponse response = _responseGenerator.createUserResponse(user);
response.setResponseName(getCommandName());

View File

@ -18,6 +18,7 @@ package org.apache.cloudstack.api.response;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import org.apache.cloudstack.api.ApiConstants;
@ -157,7 +158,7 @@ public class DomainRouterResponse extends BaseResponse implements ControlledView
private Set<NicResponse> nics;
public DomainRouterResponse(){
nics = new HashSet<NicResponse>();
nics = new LinkedHashSet<NicResponse>();
}

View File

@ -17,6 +17,7 @@
package org.apache.cloudstack.api.response;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import org.apache.cloudstack.api.ApiConstants;
@ -65,9 +66,9 @@ public class SecurityGroupResponse extends BaseResponse implements ControlledVie
private Set<ResourceTagResponse> tags;
public SecurityGroupResponse(){
this.ingressRules = new HashSet<SecurityGroupRuleResponse>();
this.egressRules = new HashSet<SecurityGroupRuleResponse>();
this.tags = new HashSet<ResourceTagResponse>();
this.ingressRules = new LinkedHashSet<SecurityGroupRuleResponse>();
this.egressRules = new LinkedHashSet<SecurityGroupRuleResponse>();
this.tags = new LinkedHashSet<ResourceTagResponse>();
}

View File

@ -18,6 +18,7 @@ package org.apache.cloudstack.api.response;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import org.apache.cloudstack.api.ApiConstants;
@ -169,9 +170,9 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp
private String keyPairName;
public UserVmResponse(){
securityGroupList = new HashSet<SecurityGroupResponse>();
nics = new HashSet<NicResponse>();
tags = new HashSet<ResourceTagResponse>();
securityGroupList = new LinkedHashSet<SecurityGroupResponse>();
nics = new LinkedHashSet<NicResponse>();
tags = new LinkedHashSet<ResourceTagResponse>();
}
public void setHypervisor(String hypervisor) {

View File

@ -18,6 +18,7 @@ package org.apache.cloudstack.api.response;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import org.apache.cloudstack.api.ApiConstants;
@ -161,7 +162,7 @@ public class VolumeResponse extends BaseResponse implements ControlledViewEntity
private Set<ResourceTagResponse> tags;
public VolumeResponse(){
tags = new HashSet<ResourceTagResponse>();
tags = new LinkedHashSet<ResourceTagResponse>();
}
@Override

View File

@ -29,7 +29,4 @@ public interface Region {
public String getEndPoint();
public String getApiKey();
public String getSecretKey();
}

View File

@ -43,22 +43,18 @@ public interface RegionService {
* @param id
* @param name
* @param endPoint
* @param apiKey
* @param secretKey
* @return Return added Region object
*/
public Region addRegion(int id, String name, String endPoint, String apiKey, String secretKey);
public Region addRegion(int id, String name, String endPoint);
/**
* Update details of the Region with specified Id
* @param id
* @param name
* @param endPoint
* @param apiKey
* @param secretKey
* @return Return updated Region object
*/
public Region updateRegion(int id, String name, String endPoint, String apiKey, String secretKey);
public Region updateRegion(int id, String name, String endPoint);
/**
* @param id

View File

@ -64,7 +64,7 @@ public class RegionCmdTest extends TestCase {
Region region = Mockito.mock(Region.class);
Mockito.when(
regionService.addRegion(Mockito.anyInt(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString()))
regionService.addRegion(Mockito.anyInt(), Mockito.anyString(), Mockito.anyString()))
.thenReturn(region);
addRegionCmd._regionService = regionService;
@ -87,7 +87,7 @@ public class RegionCmdTest extends TestCase {
Region region = Mockito.mock(Region.class);
Mockito.when(
regionService.addRegion(Mockito.anyInt(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString()))
regionService.addRegion(Mockito.anyInt(), Mockito.anyString(), Mockito.anyString()))
.thenReturn(null);
addRegionCmd._regionService = regionService;

View File

@ -66,9 +66,6 @@ public class AccountVO implements Account {
@Column(name="default_zone_id")
private Long defaultZoneId = null;
@Column(name="region_id")
private int regionId;
public AccountVO() {
this.uuid = UUID.randomUUID().toString();
}
@ -78,14 +75,13 @@ public class AccountVO implements Account {
this.uuid = UUID.randomUUID().toString();
}
public AccountVO(String accountName, long domainId, String networkDomain, short type, String uuid, int regionId) {
public AccountVO(String accountName, long domainId, String networkDomain, short type, String uuid) {
this.accountName = accountName;
this.domainId = domainId;
this.networkDomain = networkDomain;
this.type = type;
this.state = State.enabled;
this.uuid = uuid;
this.regionId = regionId;
}
public void setNeedsCleanup(boolean value) {
@ -183,11 +179,4 @@ public class AccountVO implements Account {
this.uuid = uuid;
}
public int getRegionId() {
return regionId;
}
public void setRegionId(int regionId) {
this.regionId = regionId;
}
}

View File

@ -93,9 +93,6 @@ public class UserVO implements User, Identity, InternalIdentity {
@Column(name="uuid")
private String uuid;
@Column(name="region_id")
private int regionId;
public UserVO() {
this.uuid = UUID.randomUUID().toString();
}
@ -105,7 +102,7 @@ public class UserVO implements User, Identity, InternalIdentity {
this.uuid = UUID.randomUUID().toString();
}
public UserVO(long accountId, String username, String password, String firstName, String lastName, String email, String timezone, String uuid, int regionId) {
public UserVO(long accountId, String username, String password, String firstName, String lastName, String email, String timezone, String uuid) {
this.accountId = accountId;
this.username = username;
this.password = password;
@ -115,7 +112,6 @@ public class UserVO implements User, Identity, InternalIdentity {
this.timezone = timezone;
this.state = State.enabled;
this.uuid = uuid;
this.regionId = regionId;
}
@Override
@ -266,11 +262,4 @@ public class UserVO implements User, Identity, InternalIdentity {
this.uuid = uuid;
}
public int getRegionId() {
return regionId;
}
public void setRegionId(int regionId) {
this.regionId = regionId;
}
}

6
debian/changelog vendored
View File

@ -1,3 +1,9 @@
cloudstack (4.2.0-incubating-0.0.snapshot) unstable; urgency=low
* Update the version to 4.2.0 to be in sync with Maven
-- Wido den Hollander <wido@widodh.nl> Wed, 13 Mar 2013 19:15:00 +0100
cloudstack (4.1.0-incubating-0.0.snapshot) unstable; urgency=low
* Incorporate incubating into version, remove epoch

View File

@ -18,6 +18,8 @@
/etc/cloudstack/server/*
/etc/cloudstack/management/*
/etc/init.d/cloudstack-management
/etc/security/limits.d/cloudstack-limits.conf
/etc/sudoers.d/cloudstack
/var/cache/cloudstack/management
/var/cache/cloudstack/management/work
/var/cache/cloudstack/management/temp

37
debian/cloudstack-usage.postinst vendored Normal file
View File

@ -0,0 +1,37 @@
#!/bin/bash
# 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.
set -e
case "$1" in
configure)
# We copy the db.properties file from the management server to the usage server
# This used to be a symlink, but we don't do that anymore
if [ -f "/etc/cloud/management/db.properties" ]; then
cp -a /etc/cloud/management/db.properties /etc/cloudstack/usage/db.properties
fi
# We also retain the log4j configuration
if [ -f "/etc/cloud/usage/log4j-cloud_usage.xml" ]; then
cp -a /etc/cloud/usage/log4j-cloud_usage.xml /etc/cloudstack/usage/log4j-cloud_usage.xml
fi
;;
esac
exit 0

9
debian/rules vendored
View File

@ -75,6 +75,8 @@ install:
# cloudstack-management
mkdir $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/server
mkdir $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management
mkdir -p $(DESTDIR)/$(SYSCONFDIR)/security/limits.d/
mkdir -p $(DESTDIR)/$(SYSCONFDIR)/sudoers.d/
mkdir -p $(DESTDIR)/usr/share/$(PACKAGE)-management
mkdir -p $(DESTDIR)/usr/share/$(PACKAGE)-management/webapps/client
mkdir $(DESTDIR)/usr/share/$(PACKAGE)-management/setup
@ -89,6 +91,12 @@ install:
cp -r client/target/cloud-client-ui-$(VERSION)-SNAPSHOT/* $(DESTDIR)/usr/share/$(PACKAGE)-management/webapps/client/
cp server/target/conf/* $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/server/
cp client/target/conf/* $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management/
# nast hack for a couple of configuration files
mv $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/server/cloudstack-limits.conf $(DESTDIR)/$(SYSCONFDIR)/security/limits.d/
mv $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/server/cloudstack-sudoers $(DESTDIR)/$(SYSCONFDIR)/sudoers.d/cloudstack
chmod 0440 $(DESTDIR)/$(SYSCONFDIR)/sudoers.d/cloudstack
ln -s tomcat6-nonssl.conf $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management/tomcat6.conf
mkdir -p $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management/Catalina/localhost/client
install -D packaging/debian/init/cloud-management $(DESTDIR)/$(SYSCONFDIR)/init.d/$(PACKAGE)-management
@ -129,7 +137,6 @@ install:
install -D usage/target/cloud-usage-$(VERSION)-SNAPSHOT.jar $(DESTDIR)/usr/share/$(PACKAGE)-usage/lib/$(PACKAGE)-usage.jar
install -D usage/target/dependencies/* $(DESTDIR)/usr/share/$(PACKAGE)-usage/lib/
cp usage/target/transformed/* $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/usage/
ln -s ../management/db.properties $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/usage/db.properties
install -D packaging/debian/init/cloud-usage $(DESTDIR)/$(SYSCONFDIR)/init.d/$(PACKAGE)-usage
# cloudstack-awsapi

View File

@ -34,8 +34,10 @@
AutoScaling to launch an additional VM whenever CPU usage exceeds 80 percent for 15 minutes, or
to remove a VM whenever CPU usage is less than 20 percent for 30 minutes.</para>
<para>&PRODUCT; uses the NetScaler load balancer to monitor all aspects of a system's health and
work in unison with &PRODUCT; to initiate scale-up or scale-down actions. The supported
NetScaler version is 10.0.</para>
work in unison with &PRODUCT; to initiate scale-up or scale-down actions.</para>
<note>
<para>AutoScale is supported on NetScaler Release 10 Build 73.e and beyond.</para>
</note>
<formalpara>
<title>Prerequisites</title>
<para>Before you configure an AutoScale rule, consider the following:</para>

View File

@ -597,10 +597,6 @@ setup_aesni() {
if [ `grep aes /proc/cpuinfo | wc -l` -gt 0 ]
then
modprobe aesni_intel
if [ `lsmod | grep aesni_intel | wc -l` -gt 0 ]
then
echo aesni_intel >> /etc/modules
fi
fi
}

View File

@ -3496,7 +3496,7 @@ ServerResource {
sscmd.setDataCenter(_dcId);
sscmd.setResourceType(Storage.StorageResourceType.STORAGE_POOL);
} catch (CloudRuntimeException e) {
s_logger.debug("Unable to initialize local storage pool: " + e);
}
if (sscmd != null) {
@ -3937,26 +3937,43 @@ ServerResource {
try {
dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName
.getBytes()));
int persist = dm.isPersistent();
if (force) {
if (dm.getInfo().state != DomainInfo.DomainState.VIR_DOMAIN_SHUTOFF) {
if (dm.isActive() == 1) {
dm.destroy();
if (persist == 1) {
dm.undefine();
}
}
} else {
if (dm.getInfo().state == DomainInfo.DomainState.VIR_DOMAIN_SHUTOFF) {
if (dm.isActive() == 0) {
return null;
}
dm.shutdown();
int retry = _stopTimeout / 2000;
/* Wait for the domain gets into shutoff state */
while ((dm.getInfo().state != DomainInfo.DomainState.VIR_DOMAIN_SHUTOFF)
&& (retry >= 0)) {
Thread.sleep(2000);
retry--;
/* Wait for the domain gets into shutoff state. When it does
the dm object will no longer work, so we need to catch it. */
try {
while ( dm.isActive() == 1 && (retry >= 0)) {
Thread.sleep(2000);
retry--;
}
} catch (LibvirtException e) {
String error = e.toString();
if (error.contains("Domain not found")) {
s_logger.debug("successfully shut down vm " + vmName);
} else {
s_logger.debug("Error in waiting for vm shutdown:" + error);
}
}
if (retry < 0) {
s_logger.warn("Timed out waiting for domain " + vmName
+ " to shutdown gracefully");
return Script.ERR_TIMEOUT;
} else {
if (persist == 1) {
dm.undefine();
}
}
}
} catch (LibvirtException e) {

View File

@ -120,14 +120,18 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
StoragePool sp = null;
try {
s_logger.debug(spd.toString());
sp = conn.storagePoolDefineXML(spd.toString(), 0);
sp.create(0);
sp = conn.storagePoolCreateXML(spd.toString(), 0);
return sp;
} catch (LibvirtException e) {
s_logger.error(e.toString());
if (sp != null) {
try {
sp.undefine();
if (sp.isPersistent() == 1) {
sp.destroy();
sp.undefine();
} else {
sp.destroy();
}
sp.free();
} catch (LibvirtException l) {
s_logger.debug("Failed to define nfs storage pool with: "
@ -150,15 +154,18 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
StoragePool sp = null;
try {
s_logger.debug(spd.toString());
sp = conn.storagePoolDefineXML(spd.toString(), 0);
sp.create(0);
sp = conn.storagePoolCreateXML(spd.toString(), 0);
return sp;
} catch (LibvirtException e) {
s_logger.error(e.toString());
if (sp != null) {
try {
sp.undefine();
if (sp.isPersistent() == 1) {
sp.destroy();
sp.undefine();
} else {
sp.destroy();
}
sp.free();
} catch (LibvirtException l) {
s_logger.debug("Failed to define shared mount point storage pool with: "
@ -181,14 +188,18 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
StoragePool sp = null;
try {
s_logger.debug(spd.toString());
sp = conn.storagePoolDefineXML(spd.toString(), 0);
sp.create(0);
sp = conn.storagePoolCreateXML(spd.toString(), 0);
return sp;
} catch (LibvirtException e) {
s_logger.error(e.toString());
if (sp != null) {
try {
sp.undefine();
if (sp.isPersistent() == 1) {
sp.destroy();
sp.undefine();
} else {
sp.destroy();
}
sp.free();
} catch (LibvirtException l) {
s_logger.debug("Failed to define clvm storage pool with: "
@ -236,14 +247,18 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
try {
s_logger.debug(spd.toString());
sp = conn.storagePoolDefineXML(spd.toString(), 0);
sp.create(0);
sp = conn.storagePoolCreateXML(spd.toString(), 0);
return sp;
} catch (LibvirtException e) {
s_logger.debug(e.toString());
if (sp != null) {
try {
sp.undefine();
if (sp.isPersistent() == 1) {
sp.destroy();
sp.undefine();
} else {
sp.destroy();
}
sp.free();
} catch (LibvirtException l) {
s_logger.debug("Failed to define RBD storage pool with: " + l.toString());
@ -385,15 +400,59 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
try {
sp = conn.storagePoolLookupByUUIDString(name);
if (sp.getInfo().state != StoragePoolState.VIR_STORAGE_POOL_RUNNING) {
if (sp != null && sp.isActive() == 0) {
sp.undefine();
sp = null;
s_logger.debug("Found existing defined storage pool " + name + ". It wasn't running, so we undefined it.");
}
if (sp != null) {
s_logger.debug("Found existing defined storage pool " + name + ", using it.");
}
} catch (LibvirtException e) {
sp = null;
s_logger.debug("createStoragePool didn't find existing running pool: " + e + ", need to create it");
}
// libvirt strips trailing slashes off of path, we will too in order to match
// existing paths
if (path.endsWith("/")) {
path = path.substring(0, path.length() - 1);
}
if (sp == null) {
// see if any existing pool by another name is using our storage path.
// if anyone is, undefine the pool so we can define it as requested.
// This should be safe since a pool in use can't be removed, and no
// volumes are affected by unregistering the pool with libvirt.
s_logger.debug("Didn't find an existing storage pool " + name
+ " by UUID, checking for pools with duplicate paths");
try {
String[] poolnames = conn.listStoragePools();
for (String poolname : poolnames) {
s_logger.debug("Checking path of existing pool " + poolname
+ " against pool we want to create");
StoragePool p = conn.storagePoolLookupByName(poolname);
LibvirtStoragePoolDef pdef = getStoragePoolDef(conn, p);
if (pdef.getTargetPath().equals(path)) {
s_logger.debug("Storage pool utilizing path '" + path + "' already exists as pool "
+ poolname + ", undefining so we can re-define with correct name " + name);
if (p.isPersistent() == 1) {
p.destroy();
p.undefine();
} else {
p.destroy();
}
}
}
} catch (LibvirtException e) {
s_logger.error("Failure in attempting to see if an existing storage pool might "
+ "be using the path of the pool to be created:" + e);
}
s_logger.debug("Attempting to create storage pool " + name);
if (type == StoragePoolType.NetworkFilesystem) {
sp = createNfsStoragePool(conn, name, host, path);
} else if (type == StoragePoolType.SharedMountPoint
@ -407,8 +466,8 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
}
try {
StoragePoolInfo spi = sp.getInfo();
if (spi.state != StoragePoolState.VIR_STORAGE_POOL_RUNNING) {
if (sp.isActive() == 0) {
s_logger.debug("attempting to activate pool " + name);
sp.create(0);
}
@ -427,7 +486,15 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
return pool;
} catch (LibvirtException e) {
throw new CloudRuntimeException(e.toString());
String error = e.toString();
if (error.contains("Storage source conflict")) {
throw new CloudRuntimeException("A pool matching this location already exists in libvirt, "
+ " but has a different UUID/Name. Cannot create new pool without first "
+ " removing it. Check for inactive pools via 'virsh pool-list --all'. "
+ error);
} else {
throw new CloudRuntimeException(error);
}
}
}
@ -459,8 +526,12 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
}
try {
sp.destroy();
sp.undefine();
if (sp.isPersistent() == 1) {
sp.destroy();
sp.undefine();
} else {
sp.destroy();
}
sp.free();
if (s != null) {
s.undefine();

458
pom.xml
View File

@ -1,23 +1,15 @@
<!--
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.
-->
<!-- 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">
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>
@ -43,7 +35,7 @@
</issueManagement>
<properties>
<!--skipTests>true</skipTests-->
<!--skipTests>true</skipTests -->
<cs.jdk.version>1.6</cs.jdk.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@ -92,6 +84,7 @@
<cs.java-ipv6.version>0.10</cs.java-ipv6.version>
<cs.replace.properties>build/replace.properties</cs.replace.properties>
<cs.libvirt-java.version>0.4.9</cs.libvirt-java.version>
<cs.target.dir>target</cs.target.dir>
</properties>
<distributionManagement>
@ -174,11 +167,11 @@
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${cs.mysql.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${cs.mysql.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
@ -188,13 +181,13 @@
<artifactId>junit</artifactId>
<version>${cs.junit.version}</version>
<scope>test</scope>
</dependency>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
@ -205,74 +198,37 @@
<artifactId>spring-web</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<!--
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework.version}</version>
</dependency>
-->
<!-- <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId>
<version>${org.springframework.version}</version> </dependency> <dependency>
<groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId>
<version>${org.springframework.version}</version> </dependency> <dependency>
<groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId>
<version>${org.springframework.version}</version> </dependency> <dependency>
<groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId>
<version>${org.springframework.version}</version> </dependency> <dependency>
<groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId>
<version>${org.springframework.version}</version> </dependency> <dependency>
<groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId>
<version>${org.springframework.version}</version> </dependency> <dependency>
<groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId>
<version>${org.springframework.version}</version> </dependency> <dependency>
<groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId>
<version>${org.springframework.version}</version> </dependency> <dependency>
<groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId>
<version>${org.springframework.version}</version> </dependency> -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<scope>test</scope>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
@ -285,14 +241,16 @@
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
</dependencies>
<build>
<defaultGoal>install</defaultGoal>
<outputDirectory>${basedir}/${cs.target.dir}/classes</outputDirectory>
<testOutputDirectory>${basedir}/${cs.target.dir}/test-classes</testOutputDirectory>
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings
@ -453,41 +411,41 @@
<configuration>
<source>${cs.jdk.version}</source>
<target>${cs.jdk.version}</target>
<fork>true</fork>
<meminitial>128m</meminitial>
<maxmem>512m</maxmem>
<compilerArgument>-XDignore.symbol.file=true</compilerArgument>
<fork>true</fork>
<meminitial>128m</meminitial>
<maxmem>512m</maxmem>
<compilerArgument>-XDignore.symbol.file=true</compilerArgument>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>remove-old-installers</id>
<goals>
<goal>remove-project-artifact</goal>
</goals>
<configuration>
<removeAll>true</removeAll>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>remove-old-installers</id>
<goals>
<goal>remove-project-artifact</goal>
</goals>
<configuration>
<removeAll>true</removeAll>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
@ -514,16 +472,32 @@
<module>awsapi</module>
</modules>
</profile>
<profile>
<id>eclipse</id>
<properties>
<cs.target.dir>target-eclipse</cs.target.dir>
</properties>
</profile>
<profile>
<id>developer</id>
<properties>
<marvin.config>tools/devcloud/devcloud.cfg</marvin.config>
</properties>
<properties>
<marvin.config>tools/devcloud/devcloud.cfg</marvin.config>
</properties>
<modules>
<module>developer</module>
<module>tools</module>
</modules>
</profile>
<profile>
<id>impatient</id>
<properties>
<marvin.config>tools/devcloud/devcloud.cfg</marvin.config>
</properties>
<modules>
<module>developer</module>
<!--module>tools/devcloud</module-->
</modules>
</profile>
<profile>
<id>vmware</id>
<activation>
@ -536,112 +510,112 @@
</modules>
</profile>
<profile>
<id>simulator</id>
<activation>
<property>
<name>deploydb-simulator</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>${project.basedir}/utils/conf/db.properties</file>
<file>${project.basedir}/utils/conf/db.properties.override</file>
</files>
<quiet>true</quiet>
</configuration>
</execution>
</executions>
</plugin>
<!-- DatabaseCreator driver here -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<dependencies>
<!-- specify the dependent jdbc driver here -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${cs.mysql.version}</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>${cs.dbcp.version}</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>${cs.pool.version}</version>
</dependency>
<dependency>
<groupId>org.jasypt</groupId>
<artifactId>jasypt</artifactId>
<version>${cs.jasypt.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cloudstack</groupId>
<artifactId>cloud-utils</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cloudstack</groupId>
<artifactId>cloud-server</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<phase>process-resources</phase>
<id>create-schema</id>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<includeProjectDependencies>false</includeProjectDependencies>
<includePluginDependencies>true</includePluginDependencies>
<executableDependency>
<groupId>org.apache.cloudstack</groupId>
<artifactId>cloud-server</artifactId>
</executableDependency>
<mainClass>com.cloud.upgrade.DatabaseCreator</mainClass>
<arguments>
<!-- db properties file -->
<argument>${project.basedir}/utils/conf/db.properties</argument>
<argument>${project.basedir}/utils/conf/db.properties.override</argument>
<!-- simulator sql files -->
<argument>${basedir}/target/db/create-schema-simulator.sql</argument>
<argument>${basedir}/target/db/templates.simulator.sql</argument>
<!-- database upgrade-->
<argument>com.cloud.upgrade.DatabaseUpgradeChecker</argument>
<argument>--database=simulator</argument>
<argument>--rootpassword=${db.root.password}</argument>
<!-- enable verbosity by -v or dash-dash-verbose -->
</arguments>
<systemProperties>
<systemProperty>
<key>catalina.home</key>
<value>${project.basedir}/utils</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<id>simulator</id>
<activation>
<property>
<name>deploydb-simulator</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>${project.basedir}/utils/conf/db.properties</file>
<file>${project.basedir}/utils/conf/db.properties.override</file>
</files>
<quiet>true</quiet>
</configuration>
</execution>
</executions>
</plugin>
<!-- DatabaseCreator driver here -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<dependencies>
<!-- specify the dependent jdbc driver here -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${cs.mysql.version}</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>${cs.dbcp.version}</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>${cs.pool.version}</version>
</dependency>
<dependency>
<groupId>org.jasypt</groupId>
<artifactId>jasypt</artifactId>
<version>${cs.jasypt.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cloudstack</groupId>
<artifactId>cloud-utils</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cloudstack</groupId>
<artifactId>cloud-server</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<phase>process-resources</phase>
<id>create-schema</id>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<includeProjectDependencies>false</includeProjectDependencies>
<includePluginDependencies>true</includePluginDependencies>
<executableDependency>
<groupId>org.apache.cloudstack</groupId>
<artifactId>cloud-server</artifactId>
</executableDependency>
<mainClass>com.cloud.upgrade.DatabaseCreator</mainClass>
<arguments>
<!-- db properties file -->
<argument>${project.basedir}/utils/conf/db.properties</argument>
<argument>${project.basedir}/utils/conf/db.properties.override</argument>
<!-- simulator sql files -->
<argument>${basedir}/target/db/create-schema-simulator.sql</argument>
<argument>${basedir}/target/db/templates.simulator.sql</argument>
<!-- database upgrade -->
<argument>com.cloud.upgrade.DatabaseUpgradeChecker</argument>
<argument>--database=simulator</argument>
<argument>--rootpassword=${db.root.password}</argument>
<!-- enable verbosity by -v or dash-dash-verbose -->
</arguments>
<systemProperties>
<systemProperty>
<key>catalina.home</key>
<value>${project.basedir}/utils</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

View File

@ -25,6 +25,8 @@ import os
import xml.dom.minidom
from optparse import OptionParser, OptionGroup, OptParseError, BadOptionError, OptionError, OptionConflictError, OptionValueError
import re
import traceback
iptables = Command("iptables")
bash = Command("/bin/bash")
virsh = Command("virsh")
@ -342,7 +344,7 @@ def post_default_network_rules(vm_name, vm_id, vm_ip, vm_mac, vif, brname, dhcpS
def delete_rules_for_vm_in_bridge_firewall_chain(vmName):
vm_name = vmName
if vm_name.startswith('i-') or vm_name.startswith('r-'):
vm_name = '-'.join(vm_name.split('-')[:-1])
vm_name = '-'.join(vm_name.split('-')[:-1]) + "-def"
vmchain = vm_name
@ -692,7 +694,8 @@ def add_network_rules(vm_name, vm_id, vm_ip, signature, seqno, vmMac, rules, vif
return 'true'
except:
logging.debug("Failed to network rule !: " + sys.exc_type)
exceptionText = traceback.format_exc()
logging.debug("Failed to network rule !: " + exceptionText)
def getVifs(vmName):
vifs = []

View File

@ -0,0 +1,21 @@
# 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.
# Specific limits for the CloudStack management server which
# runs under the user 'cloud' by default
@MSUSER hard nofile 4096
@MSUSER soft nofile 4096

View File

@ -0,0 +1,22 @@
# 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.
# The CloudStack management server needs sudo permissions
# without a password.
@MSUSER ALL =NOPASSWD : ALL

View File

@ -75,12 +75,9 @@ public class DomainVO implements Domain {
@Column(name="uuid")
private String uuid;
@Column(name="region_id")
private int regionId;
public DomainVO() {}
public DomainVO(String name, long owner, Long parentId, String networkDomain, int regionId) {
public DomainVO(String name, long owner, Long parentId, String networkDomain) {
this.parent = parentId;
this.name = name;
this.accountId = owner;
@ -89,10 +86,9 @@ public class DomainVO implements Domain {
this.state = Domain.State.Active;
this.networkDomain = networkDomain;
this.uuid = UUID.randomUUID().toString();
this.regionId = regionId;
}
public DomainVO(String name, long owner, Long parentId, String networkDomain, String uuid, int regionId) {
public DomainVO(String name, long owner, Long parentId, String networkDomain, String uuid) {
this.parent = parentId;
this.name = name;
this.accountId = owner;
@ -101,7 +97,6 @@ public class DomainVO implements Domain {
this.state = Domain.State.Active;
this.networkDomain = networkDomain;
this.uuid = uuid;
this.regionId = regionId;
}
@Override
@ -216,12 +211,5 @@ public class DomainVO implements Domain {
this.uuid = uuid;
}
public int getRegionId() {
return regionId;
}
public void setRegionId(int regionId) {
this.regionId = regionId;
}
}

View File

@ -205,7 +205,7 @@ public class ProjectManagerImpl extends ManagerBase implements ProjectManager {
StringBuilder acctNm = new StringBuilder("PrjAcct-");
acctNm.append(name).append("-").append(owner.getDomainId());
Account projectAccount = _accountMgr.createAccount(acctNm.toString(), Account.ACCOUNT_TYPE_PROJECT, domainId, null, null, UUID.randomUUID().toString(), 0);
Account projectAccount = _accountMgr.createAccount(acctNm.toString(), Account.ACCOUNT_TYPE_PROJECT, domainId, null, null, UUID.randomUUID().toString());
Project project = _projectDao.persist(new ProjectVO(name, displayText, owner.getDomainId(), projectAccount.getId()));

View File

@ -88,30 +88,6 @@ public class Upgrade40to41 implements DbUpgrade {
pstmt.setInt(1, region_id);
pstmt.executeUpdate();
//Update regionId in account table
s_logger.debug("Updating account table with Id: "+region_id);
pstmt = conn.prepareStatement("update `cloud`.`account` set region_id = ?");
pstmt.setInt(1, region_id);
pstmt.executeUpdate();
//Update regionId in user table
s_logger.debug("Updating user table with Id: "+region_id);
pstmt = conn.prepareStatement("update `cloud`.`user` set region_id = ?");
pstmt.setInt(1, region_id);
pstmt.executeUpdate();
//Update regionId in domain table
s_logger.debug("Updating domain table with Id: "+region_id);
pstmt = conn.prepareStatement("update `cloud`.`domain` set region_id = ?");
pstmt.setInt(1, region_id);
pstmt.executeUpdate();
//Update regionId in cloud_usage account table
s_logger.debug("Updating cloud_usage account table with Id: "+region_id);
pstmt = conn.prepareStatement("update `cloud_usage`.`account` set region_id = ?");
pstmt.setInt(1, region_id);
pstmt.executeUpdate();
s_logger.debug("Successfully updated region entries with regionId: "+region_id);
} catch (SQLException e) {
throw new CloudRuntimeException("Error while updating region entries", e);
} finally {

View File

@ -51,9 +51,9 @@ public interface AccountManager extends AccountService {
Long checkAccessAndSpecifyAuthority(Account caller, Long zoneId);
Account createAccount(String accountName, short accountType, Long domainId, String networkDomain, Map details, String uuid, int regionId);
Account createAccount(String accountName, short accountType, Long domainId, String networkDomain, Map details, String uuid);
UserVO createUser(long accountId, String userName, String password, String firstName, String lastName, String email, String timezone);
UserVO createUser(long accountId, String userName, String password, String firstName, String lastName, String email, String timezone, String userUUID);
/**
* Logs out a user

View File

@ -54,9 +54,6 @@ import com.cloud.api.ApiDBUtils;
import com.cloud.api.query.dao.UserAccountJoinDao;
import com.cloud.api.query.vo.ControlledViewEntity;
import org.apache.cloudstack.region.RegionManager;
import com.cloud.configuration.Config;
import com.cloud.configuration.ConfigurationManager;
import com.cloud.configuration.ResourceLimit;
@ -217,8 +214,6 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
@Inject
private IPAddressDao _ipAddressDao;
@Inject
private RegionManager _regionMgr;
@Inject
private VpcManager _vpcMgr;
@Inject
private DomainRouterDao _routerDao;
@ -764,7 +759,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
@DB
@ActionEvent(eventType = EventTypes.EVENT_ACCOUNT_CREATE, eventDescription = "creating Account")
public UserAccount createUserAccount(String userName, String password, String firstName, String lastName, String email, String timezone, String accountName, short accountType,
Long domainId, String networkDomain, Map<String, String> details) {
Long domainId, String networkDomain, Map<String, String> details, String accountUUID, String userUUID) {
if (accountName == null) {
accountName = userName;
@ -810,11 +805,14 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
txn.start();
// create account
AccountVO account = createAccount(accountName, accountType, domainId, networkDomain, details, UUID.randomUUID().toString(), _regionMgr.getId());
if(accountUUID == null){
accountUUID = UUID.randomUUID().toString();
}
AccountVO account = createAccount(accountName, accountType, domainId, networkDomain, details, accountUUID);
long accountId = account.getId();
// create the first user for the account
UserVO user = createUser(accountId, userName, password, firstName, lastName, email, timezone);
UserVO user = createUser(accountId, userName, password, firstName, lastName, email, timezone, userUUID);
if (accountType == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) {
// set registration token
@ -829,7 +827,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
}
@Override
public UserVO createUser(String userName, String password, String firstName, String lastName, String email, String timeZone, String accountName, Long domainId) {
public UserVO createUser(String userName, String password, String firstName, String lastName, String email, String timeZone, String accountName, Long domainId, String userUUID) {
// default domain to ROOT if not specified
if (domainId == null) {
@ -858,7 +856,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
throw new CloudRuntimeException("The user " + userName + " already exists in domain " + domainId);
}
UserVO user = null;
user = createUser(account.getId(), userName, password, firstName, lastName, email, timeZone);
user = createUser(account.getId(), userName, password, firstName, lastName, email, timeZone, userUUID);
return user;
}
@ -1646,7 +1644,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
@Override
@DB
public AccountVO createAccount(String accountName, short accountType, Long domainId, String networkDomain, Map details, String uuid, int regionId) {
public AccountVO createAccount(String accountName, short accountType, Long domainId, String networkDomain, Map details, String uuid) {
// Validate domain
Domain domain = _domainMgr.getDomain(domainId);
if (domain == null) {
@ -1690,7 +1688,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
Transaction txn = Transaction.currentTxn();
txn.start();
AccountVO account = _accountDao.persist(new AccountVO(accountName, domainId, networkDomain, accountType, uuid, regionId));
AccountVO account = _accountDao.persist(new AccountVO(accountName, domainId, networkDomain, accountType, uuid));
if (account == null) {
throw new CloudRuntimeException("Failed to create account name " + accountName + " in domain id=" + domainId);
@ -1714,7 +1712,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
@Override
@ActionEvent(eventType = EventTypes.EVENT_USER_CREATE, eventDescription = "creating User")
public UserVO createUser(long accountId, String userName, String password, String firstName, String lastName, String email, String timezone) {
public UserVO createUser(long accountId, String userName, String password, String firstName, String lastName, String email, String timezone, String userUUID) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("Creating user: " + userName + ", accountId: " + accountId + " timezone:" + timezone);
}
@ -1730,30 +1728,10 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
throw new CloudRuntimeException("Failed to encode password");
}
UserVO user = _userDao.persist(new UserVO(accountId, userName, encodedPassword, firstName, lastName, email, timezone, UUID.randomUUID().toString(), _regionMgr.getId()));
return user;
}
//ToDo Add events??
public UserVO createUser(long accountId, String userName, String password, String firstName, String lastName, String email, String timezone, String uuid, int regionId) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("Creating user: " + userName + ", accountId: " + accountId + " timezone:" + timezone);
if(userUUID == null){
userUUID = UUID.randomUUID().toString();
}
String encodedPassword = null;
for (Iterator<UserAuthenticator> en = _userAuthenticators.iterator(); en.hasNext();) {
UserAuthenticator authenticator = en.next();
encodedPassword = authenticator.encode(password);
if (encodedPassword != null) {
break;
}
}
if (encodedPassword == null) {
throw new CloudRuntimeException("Failed to encode password");
}
UserVO user = _userDao.persist(new UserVO(accountId, userName, encodedPassword, firstName, lastName, email, timezone, uuid, regionId));
UserVO user = _userDao.persist(new UserVO(accountId, userName, encodedPassword, firstName, lastName, email, timezone, userUUID));
return user;
}
@ -1983,7 +1961,6 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
@Override @DB
public String[] createApiKeyAndSecretKey(RegisterCmd cmd) {
//Send keys to other Regions
Long userId = cmd.getId();
User user = getUserIncludingRemoved(userId);

View File

@ -27,7 +27,7 @@ import com.cloud.domain.DomainVO;
public interface DomainManager extends DomainService {
Set<Long> getDomainChildrenIds(String parentDomainPath);
Domain createDomain(String name, Long parentId, Long ownerId, String networkDomain);
Domain createDomain(String name, Long parentId, Long ownerId, String networkDomain, String domainUUID);
Set<Long> getDomainParentIds(long domainId);

View File

@ -16,10 +16,7 @@
// under the License.
package com.cloud.user;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import javax.ejb.Local;
import javax.inject.Inject;
@ -118,7 +115,7 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
@Override
@ActionEvent(eventType = EventTypes.EVENT_DOMAIN_CREATE, eventDescription = "creating Domain")
public Domain createDomain(String name, Long parentId, String networkDomain) {
public Domain createDomain(String name, Long parentId, String networkDomain, String domainUUID) {
Account caller = UserContext.current().getCaller();
if (parentId == null) {
@ -136,13 +133,13 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
_accountMgr.checkAccess(caller, parentDomain);
return createDomain(name, parentId, caller.getId(), networkDomain);
return createDomain(name, parentId, caller.getId(), networkDomain, domainUUID);
}
@Override
@DB
public Domain createDomain(String name, Long parentId, Long ownerId, String networkDomain) {
public Domain createDomain(String name, Long parentId, Long ownerId, String networkDomain, String domainUUID) {
// Verify network domain
if (networkDomain != null) {
if (!NetUtils.verifyDomainName(networkDomain)) {
@ -161,10 +158,13 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
throw new InvalidParameterValueException("Domain with name " + name + " already exists for the parent id=" + parentId);
}
if(domainUUID == null){
domainUUID = UUID.randomUUID().toString();
}
Transaction txn = Transaction.currentTxn();
txn.start();
DomainVO domain = _domainDao.create(new DomainVO(name, ownerId, parentId, networkDomain, _regionMgr.getId()));
DomainVO domain = _domainDao.create(new DomainVO(name, ownerId, parentId, networkDomain, domainUUID));
_resourceCountDao.createResourceCounts(domain.getId(), ResourceLimit.ResourceOwnerType.Domain);
txn.commit();
return domain;

View File

@ -43,11 +43,9 @@ public interface RegionManager {
* @param id
* @param name
* @param endPoint
* @param apiKey
* @param secretKey
* @return Returns added Region object
*/
Region addRegion(int id, String name, String endPoint, String apiKey, String secretKey);
Region addRegion(int id, String name, String endPoint);
/**
* Update details of the Region with specified Id
@ -59,7 +57,7 @@ public interface RegionManager {
* @param secretKey
* @return Returns update Region object
*/
Region updateRegion(int id, String name, String endPoint, String apiKey, String secretKey);
Region updateRegion(int id, String name, String endPoint);
/**
* @param id

View File

@ -17,30 +17,22 @@
package org.apache.cloudstack.region;
import com.cloud.domain.Domain;
import com.cloud.domain.DomainVO;
import com.cloud.domain.dao.DomainDao;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
import com.cloud.user.AccountVO;
import com.cloud.user.DomainManager;
import com.cloud.user.UserAccount;
import com.cloud.user.UserVO;
import com.cloud.user.dao.AccountDao;
import com.cloud.user.dao.UserAccountDao;
import com.cloud.user.dao.UserDao;
import com.cloud.utils.component.Manager;
import com.cloud.utils.component.ManagerBase;
import com.cloud.utils.exception.CloudRuntimeException;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd;
import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd;
import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd;
import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd;
import org.apache.cloudstack.region.dao.RegionDao;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
@ -63,13 +55,7 @@ public class RegionManagerImpl extends ManagerBase implements RegionManager, Man
@Inject
private AccountManager _accountMgr;
@Inject
private UserDao _userDao;
@Inject
private DomainDao _domainDao;
@Inject
private DomainManager _domainMgr;
@Inject
private UserAccountDao _userAccountDao;
private String _name;
private int _id;
@ -104,7 +90,7 @@ public class RegionManagerImpl extends ManagerBase implements RegionManager, Man
* {@inheritDoc}
*/
@Override
public Region addRegion(int id, String name, String endPoint, String apiKey, String secretKey) {
public Region addRegion(int id, String name, String endPoint) {
//Region Id should be unique
if( _regionDao.findById(id) != null ){
throw new InvalidParameterValueException("Region with id: "+id+" already exists");
@ -113,7 +99,7 @@ public class RegionManagerImpl extends ManagerBase implements RegionManager, Man
if( _regionDao.findByName(name) != null ){
throw new InvalidParameterValueException("Region with name: "+name+" already exists");
}
RegionVO region = new RegionVO(id, name, endPoint, apiKey, secretKey);
RegionVO region = new RegionVO(id, name, endPoint);
return _regionDao.persist(region);
}
@ -121,7 +107,7 @@ public class RegionManagerImpl extends ManagerBase implements RegionManager, Man
* {@inheritDoc}
*/
@Override
public Region updateRegion(int id, String name, String endPoint, String apiKey, String secretKey) {
public Region updateRegion(int id, String name, String endPoint) {
RegionVO region = _regionDao.findById(id);
if(region == null){
@ -144,14 +130,6 @@ public class RegionManagerImpl extends ManagerBase implements RegionManager, Man
region.setEndPoint(endPoint);
}
if(apiKey != null){
region.setApiKey(apiKey);
}
if(secretKey != null){
region.setSecretKey(secretKey);
}
_regionDao.update(id, region);
return _regionDao.findById(id);
}
@ -196,30 +174,7 @@ public class RegionManagerImpl extends ManagerBase implements RegionManager, Man
*/
@Override
public boolean deleteUserAccount(long accountId) {
AccountVO account = _accountDao.findById(accountId);
if(account == null){
throw new InvalidParameterValueException("The specified account does not exist in the system");
}
String accountUUID = account.getUuid();
int regionId = account.getRegionId();
String command = "deleteAccount";
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new NameValuePair(ApiConstants.ID, accountUUID));
if(getId() == regionId){
return _accountMgr.deleteUserAccount(accountId);
} else {
//First delete in the Region where account is created
Region region = _regionDao.findById(regionId);
if (RegionsApiUtil.makeAPICall(region, command, params)) {
s_logger.debug("Successfully deleted account :"+accountUUID+" in Region: "+region.getId());
return true;
} else {
s_logger.error("Error while deleting account :"+accountUUID+" in Region: "+region.getId());
return false;
}
}
return _accountMgr.deleteUserAccount(accountId);
}
/**
@ -227,51 +182,7 @@ public class RegionManagerImpl extends ManagerBase implements RegionManager, Man
*/
@Override
public Account updateAccount(UpdateAccountCmd cmd) {
Long accountId = cmd.getId();
Long domainId = cmd.getDomainId();
DomainVO domain = _domainDao.findById(domainId);
String accountName = cmd.getAccountName();
String newAccountName = cmd.getNewName();
String networkDomain = cmd.getNetworkDomain();
//ToDo send details
Map<String, String> details = cmd.getDetails();
Account account = null;
if (accountId != null) {
account = _accountDao.findById(accountId);
} else {
account = _accountDao.findEnabledAccount(accountName, domainId);
}
// Check if account exists
if (account == null || account.getType() == Account.ACCOUNT_TYPE_PROJECT) {
s_logger.error("Unable to find account by accountId: " + accountId + " OR by name: " + accountName + " in domain " + domainId);
throw new InvalidParameterValueException("Unable to find account by accountId: " + accountId + " OR by name: " + accountName + " in domain " + domainId);
}
String command = "updateAccount";
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new NameValuePair(ApiConstants.ID, account.getUuid()));
params.add(new NameValuePair(ApiConstants.ACCOUNT, accountName));
params.add(new NameValuePair(ApiConstants.DOMAIN_ID, domain.getUuid()));
params.add(new NameValuePair(ApiConstants.NETWORK_DOMAIN, networkDomain));
params.add(new NameValuePair(ApiConstants.NEW_NAME, newAccountName));
if(details != null){
params.add(new NameValuePair(ApiConstants.ACCOUNT_DETAILS, details.toString()));
}
int regionId = account.getRegionId();
if(getId() == regionId){
return _accountMgr.updateAccount(cmd);
} else {
//First update in the Region where account is created
Region region = _regionDao.findById(regionId);
if (RegionsApiUtil.makeAPICall(region, command, params)) {
s_logger.debug("Successfully updated account :"+account.getUuid()+" in source Region: "+region.getId());
return account;
} else {
throw new CloudRuntimeException("Error while updating account :"+account.getUuid()+" in source Region: "+region.getId());
}
}
return _accountMgr.updateAccount(cmd);
}
/**
@ -280,46 +191,12 @@ public class RegionManagerImpl extends ManagerBase implements RegionManager, Man
@Override
public Account disableAccount(String accountName, Long domainId, Long accountId, Boolean lockRequested) throws ConcurrentOperationException, ResourceUnavailableException {
Account account = null;
if (accountId != null) {
account = _accountDao.findById(accountId);
if(lockRequested){
account = _accountMgr.lockAccount(accountName, domainId, accountId);
} else {
account = _accountDao.findActiveAccount(accountName, domainId);
}
if (account == null || account.getType() == Account.ACCOUNT_TYPE_PROJECT) {
throw new InvalidParameterValueException("Unable to find active account by accountId: " + accountId + " OR by name: " + accountName + " in domain " + domainId);
}
String accountUUID = account.getUuid();
String command = "disableAccount";
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new NameValuePair(ApiConstants.LOCK, lockRequested.toString()));
params.add(new NameValuePair(ApiConstants.ID, accountUUID));
DomainVO domain = _domainDao.findById(domainId);
if(domain != null){
params.add(new NameValuePair(ApiConstants.DOMAIN_ID, domain.getUuid()));
}
int regionId = account.getRegionId();
if(getId() == regionId){
Account retAccount = null;
if(lockRequested){
retAccount = _accountMgr.lockAccount(accountName, domainId, accountId);
} else {
retAccount = _accountMgr.disableAccount(accountName, domainId, accountId);
}
return retAccount;
} else {
//First disable account in the Region where account is created
Region region = _regionDao.findById(regionId);
if (RegionsApiUtil.makeAPICall(region, command, params)) {
s_logger.debug("Successfully disabled account :"+accountUUID+" in source Region: "+region.getId());
return account;
} else {
throw new CloudRuntimeException("Error while disabling account :"+accountUUID+" in source Region: "+region.getId());
}
account = _accountMgr.disableAccount(accountName, domainId, accountId);
}
return account;
}
/**
@ -327,42 +204,7 @@ public class RegionManagerImpl extends ManagerBase implements RegionManager, Man
*/
@Override
public Account enableAccount(String accountName, Long domainId, Long accountId) {
// Check if account exists
Account account = null;
if (accountId != null) {
account = _accountDao.findById(accountId);
} else {
account = _accountDao.findActiveAccount(accountName, domainId);
}
if (account == null || account.getType() == Account.ACCOUNT_TYPE_PROJECT) {
throw new InvalidParameterValueException("Unable to find account by accountId: " + accountId + " OR by name: " + accountName + " in domain " + domainId);
}
String accountUUID = account.getUuid();
String command = "enableAccount";
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new NameValuePair(ApiConstants.ID, accountUUID));
params.add(new NameValuePair(ApiConstants.ACCOUNT, accountName));
DomainVO domain = _domainDao.findById(domainId);
if(domain != null){
params.add(new NameValuePair(ApiConstants.DOMAIN_ID, domain.getUuid()));
}
int regionId = account.getRegionId();
if(getId() == regionId){
return _accountMgr.enableAccount(accountName, domainId, accountId);
} else {
//First disable account in the Region where account is created
Region region = _regionDao.findById(regionId);
if (RegionsApiUtil.makeAPICall(region, command, params)) {
s_logger.debug("Successfully enabled account :"+accountUUID+" in source Region: "+region.getId());
return account;
} else {
throw new CloudRuntimeException("Error while enabling account :"+accountUUID+" in source Region: "+region.getId());
}
}
return _accountMgr.enableAccount(accountName, domainId, accountId);
}
/**
@ -370,34 +212,7 @@ public class RegionManagerImpl extends ManagerBase implements RegionManager, Man
*/
@Override
public boolean deleteUser(DeleteUserCmd cmd) {
long id = cmd.getId();
UserVO user = _userDao.findById(id);
if (user == null) {
throw new InvalidParameterValueException("The specified user doesn't exist in the system");
}
String userUUID = user.getUuid();
int regionId = user.getRegionId();
String command = "deleteUser";
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new NameValuePair(ApiConstants.ID, userUUID));
if(getId() == regionId){
return _accountMgr.deleteUser(cmd);
} else {
//First delete in the Region where user is created
Region region = _regionDao.findById(regionId);
if (RegionsApiUtil.makeAPICall(region, command, params)) {
s_logger.debug("Successfully deleted user :"+userUUID+" in source Region: "+region.getId());
return true;
} else {
s_logger.error("Error while deleting user :"+userUUID+" in source Region: "+region.getId());
return false;
}
}
return _accountMgr.deleteUser(cmd);
}
/**
@ -405,33 +220,7 @@ public class RegionManagerImpl extends ManagerBase implements RegionManager, Man
*/
@Override
public Domain updateDomain(UpdateDomainCmd cmd) {
long id = cmd.getId();
DomainVO domain = _domainDao.findById(id);
if(domain == null){
throw new InvalidParameterValueException("The specified domain doesn't exist in the system");
}
String domainUUID = domain.getUuid();
String command = "updateDomain";
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new NameValuePair(ApiConstants.ID, domainUUID));
params.add(new NameValuePair(ApiConstants.NAME, cmd.getDomainName()));
params.add(new NameValuePair(ApiConstants.NETWORK_DOMAIN, cmd.getNetworkDomain()));
int regionId = domain.getRegionId();
if(getId() == regionId){
return _domainMgr.updateDomain(cmd);
} else {
//First update in the Region where domain was created
Region region = _regionDao.findById(regionId);
if (RegionsApiUtil.makeAPICall(region, command, params)) {
s_logger.debug("Successfully updated user :"+domainUUID+" in source Region: "+region.getId());
return domain;
} else {
throw new CloudRuntimeException("Error while updating user :"+domainUUID+" in source Region: "+region.getId());
}
}
return _domainMgr.updateDomain(cmd);
}
/**
@ -439,32 +228,7 @@ public class RegionManagerImpl extends ManagerBase implements RegionManager, Man
*/
@Override
public boolean deleteDomain(Long id, Boolean cleanup) {
DomainVO domain = _domainDao.findById(id);
if(domain == null){
throw new InvalidParameterValueException("The specified domain doesn't exist in the system");
}
String domainUUID = domain.getUuid();
String command = "deleteDomain";
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new NameValuePair(ApiConstants.ID, domainUUID));
params.add(new NameValuePair(ApiConstants.CLEANUP, cleanup.toString()));
int regionId = domain.getRegionId();
if(getId() == regionId){
return _domainMgr.deleteDomain(id, cleanup);
} else {
//First delete in the Region where domain is created
Region region = _regionDao.findById(regionId);
if (RegionsApiUtil.makeAPICall(region, command, params)) {
s_logger.debug("Successfully deleted domain :"+domainUUID+" in Region: "+region.getId());
return true;
} else {
s_logger.error("Error while deleting domain :"+domainUUID+" in Region: "+region.getId());
return false;
}
}
return _domainMgr.deleteDomain(id, cleanup);
}
/**
@ -472,40 +236,7 @@ public class RegionManagerImpl extends ManagerBase implements RegionManager, Man
*/
@Override
public UserAccount updateUser(UpdateUserCmd cmd) {
long id = cmd.getId();
UserVO user = _userDao.findById(id);
if (user == null) {
throw new InvalidParameterValueException("The specified user doesn't exist in the system");
}
String userUUID = user.getUuid();
String command = "updateUser";
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new NameValuePair(ApiConstants.ID, userUUID));
params.add(new NameValuePair(ApiConstants.API_KEY, cmd.getApiKey()));
params.add(new NameValuePair(ApiConstants.EMAIL, cmd.getEmail()));
params.add(new NameValuePair(ApiConstants.FIRSTNAME, cmd.getFirstname()));
params.add(new NameValuePair(ApiConstants.LASTNAME, cmd.getLastname()));
params.add(new NameValuePair(ApiConstants.PASSWORD, cmd.getPassword()));
params.add(new NameValuePair(ApiConstants.SECRET_KEY, cmd.getSecretKey()));
params.add(new NameValuePair(ApiConstants.TIMEZONE, cmd.getTimezone()));
params.add(new NameValuePair(ApiConstants.USERNAME, cmd.getUsername()));
int regionId = user.getRegionId();
if(getId() == regionId){
return _accountMgr.updateUser(cmd);
} else {
//First update in the Region where user was created
Region region = _regionDao.findById(regionId);
if (RegionsApiUtil.makeAPICall(region, command, params)) {
s_logger.debug("Successfully updated user :"+userUUID+" in source Region: "+region.getId());
return _userAccountDao.findById(id);
} else {
throw new CloudRuntimeException("Error while updating user :"+userUUID+" in source Region: "+region.getId());
}
}
return _accountMgr.updateUser(cmd);
}
/**
@ -513,29 +244,7 @@ public class RegionManagerImpl extends ManagerBase implements RegionManager, Man
*/
@Override
public UserAccount disableUser(Long userId) {
UserVO user = _userDao.findById(userId);
if (user == null || user.getRemoved() != null) {
throw new InvalidParameterValueException("Unable to find active user by id " + userId);
}
int regionId = user.getRegionId();
String command = "disableUser";
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new NameValuePair(ApiConstants.ID, user.getUuid()));
if(getId() == regionId){
return _accountMgr.disableUser(userId);
} else {
//First disable in the Region where user was created
Region region = _regionDao.findById(regionId);
if (RegionsApiUtil.makeAPICall(region, command, params)) {
s_logger.debug("Successfully disabled user :"+user.getUuid()+" in source Region: "+region.getId());
return _userAccountDao.findById(userId);
} else {
throw new CloudRuntimeException("Error while disabling user :"+user.getUuid()+" in source Region: "+region.getId());
}
}
return _accountMgr.disableUser(userId);
}
/**
@ -543,29 +252,7 @@ public class RegionManagerImpl extends ManagerBase implements RegionManager, Man
*/
@Override
public UserAccount enableUser(long userId) {
UserVO user = _userDao.findById(userId);
if (user == null || user.getRemoved() != null) {
throw new InvalidParameterValueException("Unable to find active user by id " + userId);
}
int regionId = user.getRegionId();
String command = "enableUser";
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new NameValuePair(ApiConstants.ID, user.getUuid()));
if(getId() == regionId){
return _accountMgr.enableUser(userId);
} else {
//First enable in the Region where user was created
Region region = _regionDao.findById(regionId);
if (RegionsApiUtil.makeAPICall(region, command, params)) {
s_logger.debug("Successfully enabled user :"+user.getUuid()+" in source Region: "+region.getId());
return _userAccountDao.findById(userId);
} else {
throw new CloudRuntimeException("Error while enabling user :"+user.getUuid()+" in source Region: "+region.getId());
}
}
return _accountMgr.enableUser(userId);
}
}

View File

@ -78,20 +78,20 @@ public class RegionServiceImpl extends ManagerBase implements RegionService, Man
* {@inheritDoc}
*/
@Override
public Region addRegion(int id, String name, String endPoint, String apiKey, String secretKey) {
public Region addRegion(int id, String name, String endPoint) {
//Check for valid Name
//Check valid end_point url
return _regionMgr.addRegion(id, name, endPoint, apiKey, secretKey);
return _regionMgr.addRegion(id, name, endPoint);
}
/**
* {@inheritDoc}
*/
@Override
public Region updateRegion(int id, String name, String endPoint, String apiKey, String secretKey) {
public Region updateRegion(int id, String name, String endPoint) {
//Check for valid Name
//Check valid end_point url
return _regionMgr.updateRegion(id, name, endPoint, apiKey, secretKey);
return _regionMgr.updateRegion(id, name, endPoint);
}
/**

View File

@ -36,21 +36,13 @@ public class RegionVO implements Region{
@Column(name="end_point")
private String endPoint;
@Column(name="api_key")
private String apiKey;
@Column(name="secret_key")
private String secretKey;
public RegionVO() {
}
public RegionVO(int id, String name, String endPoint, String apiKey, String secretKey) {
public RegionVO(int id, String name, String endPoint) {
this.id = id;
this.name = name;
this.endPoint = endPoint;
this.apiKey = apiKey;
this.secretKey = secretKey;
}
public int getId() {
@ -73,21 +65,4 @@ public class RegionVO implements Region{
this.endPoint = endPoint;
}
public String getApiKey() {
return apiKey;
}
public void setApiKey(String apiKey) {
this.apiKey = apiKey;
}
public String getSecretKey() {
return secretKey;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
}

View File

@ -227,8 +227,8 @@ public class RegionsApiUtil {
*/
private static String buildUrl(String apiParams, Region region) {
String apiKey = region.getApiKey();
String secretKey = region.getSecretKey();
String apiKey = "";
String secretKey = "";
if (apiKey == null || secretKey == null) {

View File

@ -264,7 +264,7 @@ public class MockAccountManagerImpl extends ManagerBase implements Manager, Acco
}
@Override
public UserVO createUser(long accountId, String userName, String password, String firstName, String lastName, String email, String timezone) {
public UserVO createUser(long accountId, String userName, String password, String firstName, String lastName, String email, String timezone, String userUUID) {
return null;
}
@ -328,7 +328,7 @@ public class MockAccountManagerImpl extends ManagerBase implements Manager, Acco
public UserAccount createUserAccount(String userName, String password,
String firstName, String lastName, String email, String timezone,
String accountName, short accountType, Long domainId,
String networkDomain, Map<String, String> details) {
String networkDomain, Map<String, String> details, String accountUUID, String userUUID) {
// TODO Auto-generated method stub
return null;
}
@ -336,15 +336,14 @@ public class MockAccountManagerImpl extends ManagerBase implements Manager, Acco
@Override
public User createUser(String userName, String password, String firstName,
String lastName, String email, String timeZone, String accountName,
Long domainId) {
Long domainId, String userUUID) {
// TODO Auto-generated method stub
return null;
}
@Override
public Account createAccount(String accountName, short accountType,
Long domainId, String networkDomain, Map details, String uuid,
int regionId) {
Long domainId, String networkDomain, Map details, String uuid) {
// TODO Auto-generated method stub
return null;
}

View File

@ -139,7 +139,7 @@ public class MockDomainManagerImpl extends ManagerBase implements DomainManager,
@Override
public Domain createDomain(String name, Long parentId,
String networkDomain) {
String networkDomain, String domainUUID) {
// TODO Auto-generated method stub
return null;
}
@ -152,7 +152,7 @@ public class MockDomainManagerImpl extends ManagerBase implements DomainManager,
@Override
public Domain createDomain(String name, Long parentId, Long ownerId,
String networkDomain) {
String networkDomain, String domainUUID) {
// TODO Auto-generated method stub
return null;
}

View File

@ -48,27 +48,14 @@ public class RegionManagerTest extends TestCase {
public void testUniqueName() {
RegionManagerImpl regionMgr = new RegionManagerImpl();
RegionDao regionDao = Mockito.mock(RegionDao.class);
RegionVO region = new RegionVO(2, "APAC", "", null, null);
RegionVO region = new RegionVO(2, "APAC", "");
Mockito.when(regionDao.findByName(Mockito.anyString())).thenReturn(region);
regionMgr._regionDao = regionDao;
try {
regionMgr.addRegion(2, "APAC", "", null, null);
regionMgr.addRegion(2, "APAC", "");
} catch (InvalidParameterValueException e){
Assert.assertEquals("Region with name: APAC already exists", e.getMessage());
}
}
@Test
public void testUserDelete() {
RegionManagerImpl regionMgr = new RegionManagerImpl();
AccountDao accountDao = Mockito.mock(AccountDao.class);
Mockito.when(accountDao.findById(Mockito.anyLong())).thenReturn(null);
regionMgr._accountDao = accountDao;
try {
regionMgr.deleteUserAccount(5);
} catch (InvalidParameterValueException e){
Assert.assertEquals("The specified account does not exist in the system", e.getMessage());
}
}
}

View File

@ -257,7 +257,7 @@ for full help
self.runMysql(text, p, True)
self.info(None, True)
awsApiDbDir = '/usr/share/cloud/setup/bridge/db'
awsApiDbDir = '/usr/share/cloudstack-bridge/setup'
for f in ["cloudbridge_db.sql"]:
p = os.path.join(awsApiDbDir,f)
if not os.path.exists(p): continue

View File

@ -258,17 +258,10 @@ CREATE TABLE `cloud`.`region` (
`id` int unsigned NOT NULL UNIQUE,
`name` varchar(255) NOT NULL UNIQUE,
`end_point` varchar(255) NOT NULL,
`api_key` varchar(255),
`secret_key` varchar(255),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `cloud`.`region` values ('1','Local','http://localhost:8080/client/api','','');
ALTER TABLE `cloud`.`account` ADD COLUMN `region_id` int unsigned NOT NULL DEFAULT '1';
ALTER TABLE `cloud`.`user` ADD COLUMN `region_id` int unsigned NOT NULL DEFAULT '1';
ALTER TABLE `cloud`.`domain` ADD COLUMN `region_id` int unsigned NOT NULL DEFAULT '1';
INSERT INTO `cloud`.`region` values ('1','Local','http://localhost:8080/client/api');
INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Account Defaults', 'DEFAULT', 'management-server', 'max.account.cpus', '40', 'The default maximum number of cpu cores that can be used for an account');

View File

@ -0,0 +1,26 @@
#!/bin/bash
# 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.
for file in `find . -name org.eclipse.m2e.core.prefs | xargs`; do
if grep -q activeProfiles=eclipse $file; then
echo Skipping $file;
else
echo Replacing $file;
sed -i s/activeProfiles=/activeProfiles=eclipse/g $file;
fi;
done

View File

@ -16,6 +16,59 @@
// under the License.
cloudStack.docs = {
//Delete/archive events
helpEventsDeleteType:{
desc:'Delete all the events by specifying its TYPE eg . USER.LOGIN',
externalLink:''
},
helpEventsDeleteDate:{
desc:'Delete all the events which have been created after this date ',
externalLink:''
},
helpEventsArchiveType:{
desc:'Archive all the events by specifying its TYPE (integer number)',
externalLink:''
},
helpEventsArchiveDate:{
desc:'Archive all the events which have been created after this date',
externalLink:''
},
//Delete/archive Alerts
helpAlertsDeleteType:{
desc:'Delete all the alerts by specifying its TYPE eg . USER.LOGIN',
externalLink:''
},
helpAlertsDeleteDate:{
desc:'Delete all the alerts which have been created after this date ',
externalLink:''
},
helpAlertsArchiveType:{
desc:'Archive all the alerts by specifying its TYPE (integer number)',
externalLink:''
},
helpAlertsArchiveDate:{
desc:'Archive all the alerts which have been created after this date',
externalLink:''
},
//Ldap
helpLdapQueryFilter: {

View File

@ -42,6 +42,103 @@
created: { label: 'label.date', converter: cloudStack.converters.toLocalDate }
},
actions: {
// Remove multiple events
remove: {
label: 'Delete Events',
isHeader: true,
addRow: false,
messages: {
notification: function(args) {
return 'Events Deleted';
}
},
createForm: {
title:'Delete Events',
desc: '',
fields: {
type: { label: 'By event type' , docID:'helpEventsDeleteType'},
date: { label: 'By date (older than)' ,docID:'helpEventsDeleteDate'}
}
},
action: function(args) {
var data={};
if(args.data.type != "")
$.extend(data, { type:args.data.type });
if(args.data.date != "")
$.extend(data, {date:args.data.date });
$.ajax({
url:createURL("deleteEvents"),
data:data,
dataType:'json',
async: false,
success:function(data){
args.response.success();
}
});
// Reloads window with events removed
$(window).trigger('cloudStack.fullRefresh');
}
},
// Archive multiple events
archive: {
label: 'Archive Events',
isHeader: true,
addRow: false,
messages: {
notification: function(args) {
return 'Archive events';
}
},
createForm: {
title:'Archive Events',
desc: '',
fields: {
type: { label: 'By event type' , docID:'helpEventsArchiveType'},
date: { label: 'By date (older than)' , docID:'helpEventsArchiveDate'}
}
},
action: function(args) {
var data={};
if(args.data.type != "")
$.extend(data, { type:args.data.type });
if(args.data.date != "")
$.extend(data, {date:args.data.date });
$.ajax({
url:createURL("archiveEvents"),
data:data,
dataType:'json',
async: false,
success:function(data){
args.response.success();
}
});
// Reloads window with events removed
$(window).trigger('cloudStack.fullRefresh');
}
}
},
advSearchFields: {
level: {
label: 'label.level',
@ -132,6 +229,64 @@
},
detailView: {
name: 'label.details',
actions: {
// Remove single event
remove: {
label: 'Delete',
messages: {
notification: function(args) {
return 'Event Deleted';
},
confirm: function() {
return 'Are you sure you want to remove this event?';
}
},
action: function(args) {
$.ajax({
url:createURL("deleteEvents&ids=" +args.context.events[0].id),
success:function(json){
args.response.success();
}
});
$(window).trigger('cloudStack.fullRefresh');
}
},
// Archive single event
archive: {
label: 'Archive',
messages: {
notification: function(args) {
return 'Event Archived';
},
confirm: function() {
return 'Please confirm that you want to archive this event.';
}
},
action: function(args) {
$.ajax({
url:createURL("archiveEvents&ids=" +args.context.events[0].id),
success:function(json){
args.response.success();
}
});
// Reloads window with item archived
$(window).trigger('cloudStack.fullRefresh');
}
}
},
tabs: {
details: {
title: 'label.details',
@ -174,6 +329,102 @@
description: { label: 'label.description' },
sent: { label: 'label.date', converter: cloudStack.converters.toLocalDate }
},
actions: {
// Remove multiple Alerts
remove: {
label: 'Delete Alerts',
isHeader: true,
addRow: false,
messages: {
notification: function(args) {
return 'Alerts Deleted';
}
},
createForm: {
title:'Delete Alerts',
desc: '',
fields: {
type: { label: 'By event type' , docID:'helpAlertsDeleteType'},
date: { label: 'By date (older than)' ,docID:'helpAlertsDeleteDate' }
}
},
action: function(args) {
var data={};
if(args.data.type != "")
$.extend(data, { type:args.data.type });
if(args.data.date != "")
$.extend(data, {date:args.data.date });
$.ajax({
url:createURL("deleteAlerts"),
data:data,
dataType:'json',
async: false,
success:function(data){
args.response.success();
}
});
// Reloads window with events removed
$(window).trigger('cloudStack.fullRefresh');
}
},
// Archive multiple Alerts
archive: {
label: 'Archive Alerts',
isHeader: true,
addRow: false,
messages: {
notification: function(args) {
return 'Alerts Archived';
}
},
createForm: {
title:'Archive Alerts',
desc: '',
fields: {
type: { label: 'By event type', docID:'helpAlertsArchiveType' },
date: { label: 'By date (older than)' , docID:'helpAlertsArchiveDate'}
}
},
action: function(args) {
var data={};
if(args.data.type != "")
$.extend(data, { type:args.data.type });
if(args.data.date != "")
$.extend(data, {date:args.data.date });
$.ajax({
url:createURL("archiveAlerts"),
data:data,
dataType:'json',
async: false,
success:function(data){
args.response.success();
}
});
// Reloads window with events removed
$(window).trigger('cloudStack.fullRefresh');
}
}
},
dataProvider: function(args) {
var data = {};
listViewDataProvider(args, data);
@ -190,6 +441,65 @@
},
detailView: {
name: 'Alert details',
actions: {
// Remove single Alert
remove: {
label: 'Delete',
messages: {
notification: function(args) {
return 'Alert Deleted';
},
confirm: function() {
return 'Are you sure you want to delete this alert ?';
}
},
action: function(args) {
$.ajax({
url:createURL("deleteAlerts&ids=" +args.context.alerts[0].id),
success:function(json){
args.response.success();
}
});
$(window).trigger('cloudStack.fullRefresh');
}
},
archive: {
label: 'Archive',
messages: {
notification: function(args) {
return 'Alert Archived';
},
confirm: function() {
return 'Please confirm that you want to archive this alert.';
}
},
action: function(args) {
$.ajax({
url:createURL("archiveAlerts&ids=" +args.context.alerts[0].id),
success:function(json){
args.response.success();
}
});
// Reloads window with item archived
$(window).trigger('cloudStack.fullRefresh');
}
}
},
tabs: {
details: {
title: 'label.details',

View File

@ -0,0 +1,29 @@
# 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.
# usage database settings
db.usage.username=@DBUSER@
db.usage.password=@DBPW@
db.usage.host=@DBHOST@
db.usage.port=3306
db.usage.name=cloud_usage
# usage database tuning parameters
db.usage.maxActive=100
db.usage.maxIdle=30
db.usage.maxWait=10000
db.usage.autoReconnect=true

View File

@ -74,7 +74,7 @@
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>target/dependencies</outputDirectory>
<outputDirectory>${project.build.directory}/dependencies</outputDirectory>
<includeScope>runtime</includeScope>
</configuration>
</execution>
@ -127,24 +127,6 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/dependencies</outputDirectory>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>