mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Merge branch 'master' into ovfprops-and-vsphere-adv-together
This commit is contained in:
commit
d119a5d19f
@ -43,7 +43,21 @@ import com.cloud.utils.fsm.StateObject;
|
|||||||
public interface Network extends ControlledEntity, StateObject<Network.State>, InternalIdentity, Identity, Serializable, Displayable {
|
public interface Network extends ControlledEntity, StateObject<Network.State>, InternalIdentity, Identity, Serializable, Displayable {
|
||||||
|
|
||||||
enum GuestType {
|
enum GuestType {
|
||||||
Shared, Isolated, L2
|
Shared, Isolated, L2;
|
||||||
|
|
||||||
|
public static GuestType fromValue(String type) {
|
||||||
|
if (StringUtils.isBlank(type)) {
|
||||||
|
return null;
|
||||||
|
} else if (type.equalsIgnoreCase("Shared")) {
|
||||||
|
return Shared;
|
||||||
|
} else if (type.equalsIgnoreCase("Isolated")) {
|
||||||
|
return Isolated;
|
||||||
|
} else if (type.equalsIgnoreCase("L2")) {
|
||||||
|
return L2;
|
||||||
|
} else {
|
||||||
|
throw new InvalidParameterValueException("Unexpected Guest type : " + type);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum PVlanType {
|
enum PVlanType {
|
||||||
|
|||||||
@ -85,6 +85,44 @@ public class UpdateDiskOfferingCmd extends BaseCmd {
|
|||||||
since = "4.15")
|
since = "4.15")
|
||||||
private String tags;
|
private String tags;
|
||||||
|
|
||||||
|
@Parameter(name = ApiConstants.BYTES_READ_RATE, type = CommandType.LONG, description = "bytes read rate of the disk offering", since = "4.15")
|
||||||
|
private Long bytesReadRate;
|
||||||
|
|
||||||
|
@Parameter(name = ApiConstants.BYTES_READ_RATE_MAX, type = CommandType.LONG, description = "burst bytes read rate of the disk offering", since = "4.15")
|
||||||
|
private Long bytesReadRateMax;
|
||||||
|
|
||||||
|
@Parameter(name = ApiConstants.BYTES_READ_RATE_MAX_LENGTH, type = CommandType.LONG, description = "length (in seconds) of the burst", since = "4.15")
|
||||||
|
private Long bytesReadRateMaxLength;
|
||||||
|
|
||||||
|
@Parameter(name = ApiConstants.BYTES_WRITE_RATE, type = CommandType.LONG, description = "bytes write rate of the disk offering", since = "4.15")
|
||||||
|
private Long bytesWriteRate;
|
||||||
|
|
||||||
|
@Parameter(name = ApiConstants.BYTES_WRITE_RATE_MAX, type = CommandType.LONG, description = "burst bytes write rate of the disk offering", since = "4.15")
|
||||||
|
private Long bytesWriteRateMax;
|
||||||
|
|
||||||
|
@Parameter(name = ApiConstants.BYTES_WRITE_RATE_MAX_LENGTH, type = CommandType.LONG, description = "length (in seconds) of the burst", since = "4.15")
|
||||||
|
private Long bytesWriteRateMaxLength;
|
||||||
|
|
||||||
|
@Parameter(name = ApiConstants.IOPS_READ_RATE, type = CommandType.LONG, description = "io requests read rate of the disk offering", since = "4.15")
|
||||||
|
private Long iopsReadRate;
|
||||||
|
|
||||||
|
@Parameter(name = ApiConstants.IOPS_READ_RATE_MAX, type = CommandType.LONG, description = "burst requests read rate of the disk offering", since = "4.15")
|
||||||
|
private Long iopsReadRateMax;
|
||||||
|
|
||||||
|
@Parameter(name = ApiConstants.IOPS_READ_RATE_MAX_LENGTH, type = CommandType.LONG, description = "length (in seconds) of the burst", since = "4.15")
|
||||||
|
private Long iopsReadRateMaxLength;
|
||||||
|
|
||||||
|
@Parameter(name = ApiConstants.IOPS_WRITE_RATE, type = CommandType.LONG, description = "io requests write rate of the disk offering", since = "4.15")
|
||||||
|
private Long iopsWriteRate;
|
||||||
|
|
||||||
|
@Parameter(name = ApiConstants.IOPS_WRITE_RATE_MAX, type = CommandType.LONG, description = "burst io requests write rate of the disk offering", since = "4.15")
|
||||||
|
private Long iopsWriteRateMax;
|
||||||
|
|
||||||
|
@Parameter(name = ApiConstants.IOPS_WRITE_RATE_MAX_LENGTH, type = CommandType.LONG, description = "length (in seconds) of the burst", since = "4.15")
|
||||||
|
private Long iopsWriteRateMaxLength;
|
||||||
|
|
||||||
|
@Parameter(name = ApiConstants.CACHE_MODE, type = CommandType.STRING, description = "the cache mode to use for this disk offering", since = "4.15")
|
||||||
|
private String cacheMode;
|
||||||
|
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
/////////////////// Accessors ///////////////////////
|
/////////////////// Accessors ///////////////////////
|
||||||
@ -174,7 +212,59 @@ public class UpdateDiskOfferingCmd extends BaseCmd {
|
|||||||
return tags;
|
return tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////
|
public String getCacheMode() {
|
||||||
|
return cacheMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getBytesReadRate() {
|
||||||
|
return bytesReadRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getBytesReadRateMax() {
|
||||||
|
return bytesReadRateMax;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getBytesReadRateMaxLength() {
|
||||||
|
return bytesReadRateMaxLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getBytesWriteRate() {
|
||||||
|
return bytesWriteRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getBytesWriteRateMax() {
|
||||||
|
return bytesWriteRateMax;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getBytesWriteRateMaxLength() {
|
||||||
|
return bytesWriteRateMaxLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getIopsReadRate() {
|
||||||
|
return iopsReadRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getIopsReadRateMax() {
|
||||||
|
return iopsReadRateMax;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getIopsReadRateMaxLength() {
|
||||||
|
return iopsReadRateMaxLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getIopsWriteRate() {
|
||||||
|
return iopsWriteRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getIopsWriteRateMax() {
|
||||||
|
return iopsWriteRateMax;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getIopsWriteRateMaxLength() {
|
||||||
|
return iopsWriteRateMaxLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////
|
||||||
/////////////// API Implementation///////////////////
|
/////////////// API Implementation///////////////////
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|||||||
@ -37,6 +37,7 @@ import org.apache.cloudstack.api.response.ZoneResponse;
|
|||||||
|
|
||||||
import com.cloud.network.Network;
|
import com.cloud.network.Network;
|
||||||
import com.cloud.utils.Pair;
|
import com.cloud.utils.Pair;
|
||||||
|
import com.google.common.base.Strings;
|
||||||
|
|
||||||
@APICommand(name = "listNetworks", description = "Lists all available networks.", responseObject = NetworkResponse.class, responseView = ResponseView.Restricted, entityType = {Network.class},
|
@APICommand(name = "listNetworks", description = "Lists all available networks.", responseObject = NetworkResponse.class, responseView = ResponseView.Restricted, entityType = {Network.class},
|
||||||
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
|
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
|
||||||
@ -53,7 +54,7 @@ public class ListNetworksCmd extends BaseListTaggedResourcesCmd implements UserC
|
|||||||
@Parameter(name = ApiConstants.ZONE_ID, type = CommandType.UUID, entityType = ZoneResponse.class, description = "the zone ID of the network")
|
@Parameter(name = ApiConstants.ZONE_ID, type = CommandType.UUID, entityType = ZoneResponse.class, description = "the zone ID of the network")
|
||||||
private Long zoneId;
|
private Long zoneId;
|
||||||
|
|
||||||
@Parameter(name = ApiConstants.TYPE, type = CommandType.STRING, description = "the type of the network. Supported values are: isolated and shared")
|
@Parameter(name = ApiConstants.TYPE, type = CommandType.STRING, description = "the type of the network. Supported values are: isolated, l2, shared and all")
|
||||||
private String guestIpType;
|
private String guestIpType;
|
||||||
|
|
||||||
@Parameter(name = ApiConstants.IS_SYSTEM, type = CommandType.BOOLEAN, description = "true if network is system, false otherwise")
|
@Parameter(name = ApiConstants.IS_SYSTEM, type = CommandType.BOOLEAN, description = "true if network is system, false otherwise")
|
||||||
@ -105,7 +106,13 @@ public class ListNetworksCmd extends BaseListTaggedResourcesCmd implements UserC
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getGuestIpType() {
|
public String getGuestIpType() {
|
||||||
return guestIpType;
|
if (!Strings.isNullOrEmpty(guestIpType)) {
|
||||||
|
if (guestIpType.equalsIgnoreCase("all")) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return Network.GuestType.fromValue(guestIpType).toString();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getIsSystem() {
|
public Boolean getIsSystem() {
|
||||||
|
|||||||
@ -198,6 +198,10 @@ public class StoragePoolVO implements StoragePool {
|
|||||||
return updateTime;
|
return updateTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setUpdateTime(Date updateTime) {
|
||||||
|
this.updateTime = updateTime;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getDataCenterId() {
|
public long getDataCenterId() {
|
||||||
return dataCenterId;
|
return dataCenterId;
|
||||||
|
|||||||
@ -475,14 +475,19 @@ public class AsyncJobManagerImpl extends ManagerBase implements AsyncJobManager,
|
|||||||
return job;
|
return job;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String obfuscatePassword(String result, boolean hidePassword) {
|
public String obfuscatePassword(String result, boolean hidePassword) {
|
||||||
if (hidePassword) {
|
if (hidePassword) {
|
||||||
String pattern = "\"password\":";
|
String pattern = "\"password\":";
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
if (result.contains(pattern)) {
|
if (result.contains(pattern)) {
|
||||||
String[] resp = result.split(pattern);
|
String[] resp = result.split(pattern);
|
||||||
String psswd = resp[1].toString().split(",")[0];
|
String psswd = resp[1].toString().split(",")[0];
|
||||||
result = resp[0] + pattern + psswd.replace(psswd.substring(2, psswd.length() - 1), "*****") + "," + resp[1].split(",", 2)[1];
|
if (psswd.endsWith("}")) {
|
||||||
|
psswd = psswd.substring(0, psswd.length() - 1);
|
||||||
|
result = resp[0] + pattern + psswd.replace(psswd.substring(2, psswd.length() - 1), "*****") + "}," + resp[1].split(",", 2)[1];
|
||||||
|
} else {
|
||||||
|
result = resp[0] + pattern + psswd.replace(psswd.substring(2, psswd.length() - 1), "*****") + "," + resp[1].split(",", 2)[1];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,116 +16,67 @@
|
|||||||
// under the License.
|
// under the License.
|
||||||
package org.apache.cloudstack.framework.jobs;
|
package org.apache.cloudstack.framework.jobs;
|
||||||
|
|
||||||
/*
|
import org.apache.cloudstack.framework.jobs.impl.AsyncJobManagerImpl;
|
||||||
* This integration test requires real DB setup, it is not meant to run at per-build
|
import org.junit.Assert;
|
||||||
* basis, it can only be opened in developer's run
|
import org.junit.Test;
|
||||||
*
|
import org.junit.runner.RunWith;
|
||||||
*
|
import org.mockito.Spy;
|
||||||
|
import org.mockito.junit.MockitoJUnitRunner;
|
||||||
|
|
||||||
@RunWith(SpringJUnit4ClassRunner.class)
|
@RunWith (MockitoJUnitRunner.class)
|
||||||
@ContextConfiguration(locations = "classpath:/AsyncJobManagerTestContext.xml")
|
public class AsyncJobManagerTest {
|
||||||
public class AsyncJobManagerTest extends TestCase {
|
|
||||||
private static final Logger s_logger =
|
|
||||||
Logger.getLogger(AsyncJobManagerTest.class);
|
|
||||||
|
|
||||||
@Inject
|
@Spy
|
||||||
AsyncJobManager _jobMgr;
|
AsyncJobManagerImpl asyncJobManager;
|
||||||
|
|
||||||
@Inject
|
String input = "\"haprovider\":\"kvmhaprovider\"},\"outofbandmanagement\":{\"powerstate\":\"On\",\"enabled\":true,\"driver\":\"redfish\",\"address\":\"oob-address.com\",\"port\":\"80\",\"username\":\"root\",\"password\":\"password\"},\"resourcestate\":\"PrepareForMaintenance\",\"hahost\":false";
|
||||||
AsyncJobTestDashboard _testDashboard;
|
String expected = "\"haprovider\":\"kvmhaprovider\"},\"outofbandmanagement\":{\"powerstate\":\"On\",\"enabled\":true,\"driver\":\"redfish\",\"address\":\"oob-address.com\",\"port\":\"80\",\"username\":\"root\",\"password\":\"p*****\"},\"resourcestate\":\"PrepareForMaintenance\",\"hahost\":false";
|
||||||
|
String obfuscatedInput = "\"haprovider\":\"kvmhaprovider\"},\"outofbandmanagement\":{\"powerstate\":\"On\",\"enabled\":true,\"driver\":\"redfish\",\"address\":\"oob-address.com\",\"port\":\"80\",\"username\":\"root\",\"password\":\"p***\"},\"resourcestate\":\"PrepareForMaintenance\",\"hahost\":false";
|
||||||
|
String noPassword = "\"haprovider\":\"kvmhaprovider\"},\"outofbandmanagement\":{\"powerstate\":\"On\",\"enabled\":true,\"driver\":\"redfish\",\"address\":\"oob-address.com\",\"port\":\"80\",\"username\":\"root\"},\"resourcestate\":\"PrepareForMaintenance\",\"hahost\":false";
|
||||||
|
|
||||||
@Override
|
String inputNoBraces = "\"password\":\"password\"\",\"action\":\"OFF\"";
|
||||||
@Before
|
String expectedNoBraces = "\"password\":\"p*****\",\"action\":\"OFF\"";
|
||||||
public void setUp() throws Exception {
|
|
||||||
try {
|
|
||||||
ComponentContext.initComponentsLifeCycle();
|
|
||||||
} catch (Exception ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
s_logger.error(ex.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Test
|
||||||
@After
|
public void obfuscatePasswordTest() {
|
||||||
public void tearDown() throws Exception {
|
String result = asyncJobManager.obfuscatePassword(input, true);
|
||||||
}
|
Assert.assertEquals(expected, result);
|
||||||
|
|
||||||
public void testWaitBehave() {
|
|
||||||
|
|
||||||
final Object me = this;
|
|
||||||
new Thread(new Runnable() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
s_logger.info("Sleeping...");
|
|
||||||
try {
|
|
||||||
Thread.sleep(3000);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
s_logger.debug("[ignored] .");
|
|
||||||
}
|
|
||||||
|
|
||||||
s_logger.info("wakeup");
|
|
||||||
synchronized (me) {
|
|
||||||
me.notifyAll();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}).start();
|
|
||||||
|
|
||||||
s_logger.info("First wait");
|
|
||||||
synchronized (me) {
|
|
||||||
try {
|
|
||||||
wait(5000);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
s_logger.info("First wait done");
|
|
||||||
|
|
||||||
s_logger.info("Second wait");
|
|
||||||
synchronized (me) {
|
|
||||||
try {
|
|
||||||
wait(5000);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
s_logger.info("Second wait done");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void test() {
|
public void obfuscatePasswordTestNoBraces() {
|
||||||
final int TOTAL_JOBS_PER_QUEUE = 5;
|
String result = asyncJobManager.obfuscatePassword(inputNoBraces, true);
|
||||||
final int TOTAL_QUEUES = 100;
|
Assert.assertEquals(expectedNoBraces, result);
|
||||||
|
|
||||||
for (int i = 0; i < TOTAL_QUEUES; i++) {
|
|
||||||
for (int j = 0; j < TOTAL_JOBS_PER_QUEUE; j++) {
|
|
||||||
AsyncJobVO job = new AsyncJobVO();
|
|
||||||
job.setCmd("TestCmd");
|
|
||||||
job.setDispatcher("TestJobDispatcher");
|
|
||||||
job.setCmdInfo("TestCmd info");
|
|
||||||
|
|
||||||
_jobMgr.submitAsyncJob(job, "fakequeue", i);
|
|
||||||
|
|
||||||
s_logger.info("Job submitted. job " + job.getId() + ", queue: " + i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
if (_testDashboard.getCompletedJobCount() == TOTAL_JOBS_PER_QUEUE * TOTAL_QUEUES)
|
|
||||||
break;
|
|
||||||
|
|
||||||
try {
|
|
||||||
Thread.sleep(1000);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
s_logger.debug("[ignored] .");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
s_logger.info("Test done with " + _testDashboard.getCompletedJobCount() + " job executed");
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
@Test
|
||||||
|
public void obfuscatePasswordTestHidePasswordFalse() {
|
||||||
|
String result = asyncJobManager.obfuscatePassword(input, false);
|
||||||
|
Assert.assertEquals(input, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void obfuscatePasswordTestObfuscatedInput() {
|
||||||
|
String result = asyncJobManager.obfuscatePassword(obfuscatedInput, true);
|
||||||
|
Assert.assertEquals(expected, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void obfuscatePasswordTestHidePasswordFalseObfuscatedInput() {
|
||||||
|
String result = asyncJobManager.obfuscatePassword(obfuscatedInput, false);
|
||||||
|
Assert.assertEquals(obfuscatedInput, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void obfuscatePasswordTestNoPassword() {
|
||||||
|
String result = asyncJobManager.obfuscatePassword(noPassword, true);
|
||||||
|
Assert.assertEquals(noPassword, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void obfuscatePasswordTestHidePasswordNoPassword() {
|
||||||
|
String result = asyncJobManager.obfuscatePassword(noPassword, false);
|
||||||
|
Assert.assertEquals(noPassword, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@ -1187,11 +1187,10 @@ public class KubernetesClusterManagerImpl extends ManagerBase implements Kuberne
|
|||||||
if (clusterDetailsVO != null && !Strings.isNullOrEmpty(clusterDetailsVO.getValue())) {
|
if (clusterDetailsVO != null && !Strings.isNullOrEmpty(clusterDetailsVO.getValue())) {
|
||||||
configData = new String(Base64.decodeBase64(clusterDetailsVO.getValue()));
|
configData = new String(Base64.decodeBase64(clusterDetailsVO.getValue()));
|
||||||
} else {
|
} else {
|
||||||
if (KubernetesCluster.State.Starting.equals(kubernetesCluster.getState())) {
|
String exceptionMessage = KubernetesCluster.State.Starting.equals(kubernetesCluster.getState()) ?
|
||||||
throw new CloudRuntimeException(String.format("Setup is in progress for Kubernetes cluster ID: %s, config not available at this moment", kubernetesCluster.getUuid()));
|
String.format("Setup is in progress for Kubernetes cluster : %s, config not available at this moment", kubernetesCluster.getName()) :
|
||||||
} else {
|
String.format("Config not found for Kubernetes cluster : %s", kubernetesCluster.getName());
|
||||||
throw new CloudRuntimeException((String.format("Config not found for Kubernetes cluster ID: %s", kubernetesCluster.getUuid())));
|
throw new CloudRuntimeException(exceptionMessage);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
response.setConfigData(configData);
|
response.setConfigData(configData);
|
||||||
response.setObjectName("clusterconfig");
|
response.setObjectName("clusterconfig");
|
||||||
|
|||||||
@ -579,22 +579,22 @@ public class KubernetesClusterStartWorker extends KubernetesClusterResourceModif
|
|||||||
try {
|
try {
|
||||||
InetAddress address = InetAddress.getByName(new URL(kubernetesCluster.getEndpoint()).getHost());
|
InetAddress address = InetAddress.getByName(new URL(kubernetesCluster.getEndpoint()).getHost());
|
||||||
} catch (MalformedURLException | UnknownHostException ex) {
|
} catch (MalformedURLException | UnknownHostException ex) {
|
||||||
logTransitStateAndThrow(Level.ERROR, String.format("Kubernetes cluster ID: %s has invalid API endpoint. Can not verify if cluster is in ready state", kubernetesCluster.getUuid()), kubernetesCluster.getId(), KubernetesCluster.Event.OperationFailed);
|
logTransitStateAndThrow(Level.ERROR, String.format("Kubernetes cluster : %s has invalid API endpoint. Can not verify if cluster is in ready state", kubernetesCluster.getName()), kubernetesCluster.getId(), KubernetesCluster.Event.OperationFailed);
|
||||||
}
|
}
|
||||||
Pair<String, Integer> sshIpPort = getKubernetesClusterServerIpSshPort(null);
|
Pair<String, Integer> sshIpPort = getKubernetesClusterServerIpSshPort(null);
|
||||||
publicIpAddress = sshIpPort.first();
|
publicIpAddress = sshIpPort.first();
|
||||||
sshPort = sshIpPort.second();
|
sshPort = sshIpPort.second();
|
||||||
if (Strings.isNullOrEmpty(publicIpAddress)) {
|
if (Strings.isNullOrEmpty(publicIpAddress)) {
|
||||||
logTransitStateAndThrow(Level.ERROR, String.format("Failed to start Kubernetes cluster ID: %s as no public IP found for the cluster" , kubernetesCluster.getUuid()), kubernetesCluster.getId(), KubernetesCluster.Event.OperationFailed);
|
logTransitStateAndThrow(Level.ERROR, String.format("Failed to start Kubernetes cluster : %s as no public IP found for the cluster" , kubernetesCluster.getName()), kubernetesCluster.getId(), KubernetesCluster.Event.OperationFailed);
|
||||||
}
|
}
|
||||||
if (!KubernetesClusterUtil.isKubernetesClusterServerRunning(kubernetesCluster, publicIpAddress, CLUSTER_API_PORT, startTimeoutTime, 15000)) {
|
if (!KubernetesClusterUtil.isKubernetesClusterServerRunning(kubernetesCluster, publicIpAddress, CLUSTER_API_PORT, startTimeoutTime, 15000)) {
|
||||||
logTransitStateAndThrow(Level.ERROR, String.format("Failed to start Kubernetes cluster ID: %s in usable state", kubernetesCluster.getUuid()), kubernetesCluster.getId(), KubernetesCluster.Event.OperationFailed);
|
logTransitStateAndThrow(Level.ERROR, String.format("Failed to start Kubernetes cluster : %s in usable state", kubernetesCluster.getName()), kubernetesCluster.getId(), KubernetesCluster.Event.OperationFailed);
|
||||||
}
|
}
|
||||||
if (!isKubernetesClusterKubeConfigAvailable(startTimeoutTime)) {
|
if (!isKubernetesClusterKubeConfigAvailable(startTimeoutTime)) {
|
||||||
logTransitStateAndThrow(Level.ERROR, String.format("Failed to start Kubernetes cluster ID: %s in usable state as unable to retrieve kube-config for the cluster", kubernetesCluster.getUuid()), kubernetesCluster.getId(), KubernetesCluster.Event.OperationFailed);
|
logTransitStateAndThrow(Level.ERROR, String.format("Failed to start Kubernetes cluster : %s in usable state as unable to retrieve kube-config for the cluster", kubernetesCluster.getName()), kubernetesCluster.getId(), KubernetesCluster.Event.OperationFailed);
|
||||||
}
|
}
|
||||||
if (!isKubernetesClusterDashboardServiceRunning(false, startTimeoutTime)) {
|
if (!isKubernetesClusterDashboardServiceRunning(false, startTimeoutTime)) {
|
||||||
logTransitStateAndThrow(Level.ERROR, String.format("Failed to start Kubernetes cluster ID: %s in usable state as unable to get Dashboard service running for the cluster", kubernetesCluster.getUuid()), kubernetesCluster.getId(), KubernetesCluster.Event.OperationFailed);
|
logTransitStateAndThrow(Level.ERROR, String.format("Failed to start Kubernetes cluster : %s in usable state as unable to get Dashboard service running for the cluster", kubernetesCluster.getName()), kubernetesCluster.getId(), KubernetesCluster.Event.OperationFailed);
|
||||||
}
|
}
|
||||||
stateTransitTo(kubernetesCluster.getId(), KubernetesCluster.Event.OperationSucceeded);
|
stateTransitTo(kubernetesCluster.getId(), KubernetesCluster.Event.OperationSucceeded);
|
||||||
if (LOGGER.isInfoEnabled()) {
|
if (LOGGER.isInfoEnabled()) {
|
||||||
|
|||||||
@ -2548,42 +2548,9 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||||||
offering.setMinIops(minIops);
|
offering.setMinIops(minIops);
|
||||||
offering.setMaxIops(maxIops);
|
offering.setMaxIops(maxIops);
|
||||||
|
|
||||||
if (bytesReadRate != null && bytesReadRate > 0) {
|
setBytesRate(offering, bytesReadRate, bytesReadRateMax, bytesReadRateMaxLength, bytesWriteRate, bytesWriteRateMax, bytesWriteRateMaxLength);
|
||||||
offering.setBytesReadRate(bytesReadRate);
|
setIopsRate(offering, iopsReadRate, iopsReadRateMax, iopsReadRateMaxLength, iopsWriteRate, iopsWriteRateMax, iopsWriteRateMaxLength);
|
||||||
}
|
|
||||||
if (bytesReadRateMax != null && bytesReadRateMax > 0) {
|
|
||||||
offering.setBytesReadRateMax(bytesReadRateMax);
|
|
||||||
}
|
|
||||||
if (bytesReadRateMaxLength != null && bytesReadRateMaxLength > 0) {
|
|
||||||
offering.setBytesReadRateMaxLength(bytesReadRateMaxLength);
|
|
||||||
}
|
|
||||||
if (bytesWriteRate != null && bytesWriteRate > 0) {
|
|
||||||
offering.setBytesWriteRate(bytesWriteRate);
|
|
||||||
}
|
|
||||||
if (bytesWriteRateMax != null && bytesWriteRateMax > 0) {
|
|
||||||
offering.setBytesWriteRateMax(bytesWriteRateMax);
|
|
||||||
}
|
|
||||||
if (bytesWriteRateMaxLength != null && bytesWriteRateMaxLength > 0) {
|
|
||||||
offering.setBytesWriteRateMaxLength(bytesWriteRateMaxLength);
|
|
||||||
}
|
|
||||||
if (iopsReadRate != null && iopsReadRate > 0) {
|
|
||||||
offering.setIopsReadRate(iopsReadRate);
|
|
||||||
}
|
|
||||||
if (iopsReadRateMax != null && iopsReadRateMax > 0) {
|
|
||||||
offering.setIopsReadRateMax(iopsReadRateMax);
|
|
||||||
}
|
|
||||||
if (iopsReadRateMaxLength != null && iopsReadRateMaxLength > 0) {
|
|
||||||
offering.setIopsReadRateMaxLength(iopsReadRateMaxLength);
|
|
||||||
}
|
|
||||||
if (iopsWriteRate != null && iopsWriteRate > 0) {
|
|
||||||
offering.setIopsWriteRate(iopsWriteRate);
|
|
||||||
}
|
|
||||||
if (iopsWriteRateMax != null && iopsWriteRateMax > 0) {
|
|
||||||
offering.setIopsWriteRateMax(iopsWriteRateMax);
|
|
||||||
}
|
|
||||||
if (iopsWriteRateMaxLength != null && iopsWriteRateMaxLength > 0) {
|
|
||||||
offering.setIopsWriteRateMaxLength(iopsWriteRateMaxLength);
|
|
||||||
}
|
|
||||||
if(cacheMode != null) {
|
if(cacheMode != null) {
|
||||||
offering.setCacheMode(DiskOffering.DiskCacheMode.valueOf(cacheMode.toUpperCase()));
|
offering.setCacheMode(DiskOffering.DiskCacheMode.valueOf(cacheMode.toUpperCase()));
|
||||||
}
|
}
|
||||||
@ -2653,6 +2620,48 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setIopsRate(DiskOffering offering, Long iopsReadRate, Long iopsReadRateMax, Long iopsReadRateMaxLength, Long iopsWriteRate, Long iopsWriteRateMax, Long iopsWriteRateMaxLength) {
|
||||||
|
if (iopsReadRate != null && iopsReadRate > 0) {
|
||||||
|
offering.setIopsReadRate(iopsReadRate);
|
||||||
|
}
|
||||||
|
if (iopsReadRateMax != null && iopsReadRateMax > 0) {
|
||||||
|
offering.setIopsReadRateMax(iopsReadRateMax);
|
||||||
|
}
|
||||||
|
if (iopsReadRateMaxLength != null && iopsReadRateMaxLength > 0) {
|
||||||
|
offering.setIopsReadRateMaxLength(iopsReadRateMaxLength);
|
||||||
|
}
|
||||||
|
if (iopsWriteRate != null && iopsWriteRate > 0) {
|
||||||
|
offering.setIopsWriteRate(iopsWriteRate);
|
||||||
|
}
|
||||||
|
if (iopsWriteRateMax != null && iopsWriteRateMax > 0) {
|
||||||
|
offering.setIopsWriteRateMax(iopsWriteRateMax);
|
||||||
|
}
|
||||||
|
if (iopsWriteRateMaxLength != null && iopsWriteRateMaxLength > 0) {
|
||||||
|
offering.setIopsWriteRateMaxLength(iopsWriteRateMaxLength);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setBytesRate(DiskOffering offering, Long bytesReadRate, Long bytesReadRateMax, Long bytesReadRateMaxLength, Long bytesWriteRate, Long bytesWriteRateMax, Long bytesWriteRateMaxLength) {
|
||||||
|
if (bytesReadRate != null && bytesReadRate > 0) {
|
||||||
|
offering.setBytesReadRate(bytesReadRate);
|
||||||
|
}
|
||||||
|
if (bytesReadRateMax != null && bytesReadRateMax > 0) {
|
||||||
|
offering.setBytesReadRateMax(bytesReadRateMax);
|
||||||
|
}
|
||||||
|
if (bytesReadRateMaxLength != null && bytesReadRateMaxLength > 0) {
|
||||||
|
offering.setBytesReadRateMaxLength(bytesReadRateMaxLength);
|
||||||
|
}
|
||||||
|
if (bytesWriteRate != null && bytesWriteRate > 0) {
|
||||||
|
offering.setBytesWriteRate(bytesWriteRate);
|
||||||
|
}
|
||||||
|
if (bytesWriteRateMax != null && bytesWriteRateMax > 0) {
|
||||||
|
offering.setBytesWriteRateMax(bytesWriteRateMax);
|
||||||
|
}
|
||||||
|
if (bytesWriteRateMaxLength != null && bytesWriteRateMaxLength > 0) {
|
||||||
|
offering.setBytesWriteRateMaxLength(bytesWriteRateMaxLength);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ActionEvent(eventType = EventTypes.EVENT_SERVICE_OFFERING_EDIT, eventDescription = "updating service offering")
|
@ActionEvent(eventType = EventTypes.EVENT_SERVICE_OFFERING_EDIT, eventDescription = "updating service offering")
|
||||||
public ServiceOffering updateServiceOffering(final UpdateServiceOfferingCmd cmd) {
|
public ServiceOffering updateServiceOffering(final UpdateServiceOfferingCmd cmd) {
|
||||||
@ -2919,42 +2928,9 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||||||
newDiskOffering.setUseLocalStorage(localStorageRequired);
|
newDiskOffering.setUseLocalStorage(localStorageRequired);
|
||||||
newDiskOffering.setDisplayOffering(isDisplayOfferingEnabled);
|
newDiskOffering.setDisplayOffering(isDisplayOfferingEnabled);
|
||||||
|
|
||||||
if (bytesReadRate != null && bytesReadRate > 0) {
|
setBytesRate(newDiskOffering, bytesReadRate, bytesReadRateMax, bytesReadRateMaxLength, bytesWriteRate, bytesWriteRateMax, bytesWriteRateMaxLength);
|
||||||
newDiskOffering.setBytesReadRate(bytesReadRate);
|
setIopsRate(newDiskOffering, iopsReadRate, iopsReadRateMax, iopsReadRateMaxLength, iopsWriteRate, iopsWriteRateMax, iopsWriteRateMaxLength);
|
||||||
}
|
|
||||||
if (bytesReadRateMax != null && bytesReadRateMax > 0) {
|
|
||||||
newDiskOffering.setBytesReadRateMax(bytesReadRateMax);
|
|
||||||
}
|
|
||||||
if (bytesReadRateMaxLength != null && bytesReadRateMaxLength > 0) {
|
|
||||||
newDiskOffering.setBytesReadRateMaxLength(bytesReadRateMaxLength);
|
|
||||||
}
|
|
||||||
if (bytesWriteRate != null && bytesWriteRate > 0) {
|
|
||||||
newDiskOffering.setBytesWriteRate(bytesWriteRate);
|
|
||||||
}
|
|
||||||
if (bytesWriteRateMax != null && bytesWriteRateMax > 0) {
|
|
||||||
newDiskOffering.setBytesWriteRateMax(bytesWriteRateMax);
|
|
||||||
}
|
|
||||||
if (bytesWriteRateMaxLength != null && bytesWriteRateMaxLength > 0) {
|
|
||||||
newDiskOffering.setBytesWriteRateMaxLength(bytesWriteRateMaxLength);
|
|
||||||
}
|
|
||||||
if (iopsReadRate != null && iopsReadRate > 0) {
|
|
||||||
newDiskOffering.setIopsReadRate(iopsReadRate);
|
|
||||||
}
|
|
||||||
if (iopsReadRateMax != null && iopsReadRateMax > 0) {
|
|
||||||
newDiskOffering.setIopsReadRateMax(iopsReadRateMax);
|
|
||||||
}
|
|
||||||
if (iopsReadRateMaxLength != null && iopsReadRateMaxLength > 0) {
|
|
||||||
newDiskOffering.setIopsReadRateMaxLength(iopsReadRateMaxLength);
|
|
||||||
}
|
|
||||||
if (iopsWriteRate != null && iopsWriteRate > 0) {
|
|
||||||
newDiskOffering.setIopsWriteRate(iopsWriteRate);
|
|
||||||
}
|
|
||||||
if (iopsWriteRateMax != null && iopsWriteRateMax > 0) {
|
|
||||||
newDiskOffering.setIopsWriteRateMax(iopsWriteRateMax);
|
|
||||||
}
|
|
||||||
if (iopsWriteRateMaxLength != null && iopsWriteRateMaxLength > 0) {
|
|
||||||
newDiskOffering.setIopsWriteRateMaxLength(iopsWriteRateMaxLength);
|
|
||||||
}
|
|
||||||
if (cacheMode != null) {
|
if (cacheMode != null) {
|
||||||
newDiskOffering.setCacheMode(DiskOffering.DiskCacheMode.valueOf(cacheMode.toUpperCase()));
|
newDiskOffering.setCacheMode(DiskOffering.DiskCacheMode.valueOf(cacheMode.toUpperCase()));
|
||||||
}
|
}
|
||||||
@ -3143,6 +3119,20 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||||||
final List<Long> zoneIds = cmd.getZoneIds();
|
final List<Long> zoneIds = cmd.getZoneIds();
|
||||||
final String tags = cmd.getTags();
|
final String tags = cmd.getTags();
|
||||||
|
|
||||||
|
Long bytesReadRate = cmd.getBytesReadRate();
|
||||||
|
Long bytesReadRateMax = cmd.getBytesReadRateMax();
|
||||||
|
Long bytesReadRateMaxLength = cmd.getBytesReadRateMaxLength();
|
||||||
|
Long bytesWriteRate = cmd.getBytesWriteRate();
|
||||||
|
Long bytesWriteRateMax = cmd.getBytesWriteRateMax();
|
||||||
|
Long bytesWriteRateMaxLength = cmd.getBytesWriteRateMaxLength();
|
||||||
|
Long iopsReadRate = cmd.getIopsReadRate();
|
||||||
|
Long iopsReadRateMax = cmd.getIopsReadRateMax();
|
||||||
|
Long iopsReadRateMaxLength = cmd.getIopsReadRateMaxLength();
|
||||||
|
Long iopsWriteRate = cmd.getIopsWriteRate();
|
||||||
|
Long iopsWriteRateMax = cmd.getIopsWriteRateMax();
|
||||||
|
Long iopsWriteRateMaxLength = cmd.getIopsWriteRateMaxLength();
|
||||||
|
String cacheMode = cmd.getCacheMode();
|
||||||
|
|
||||||
// Check if diskOffering exists
|
// Check if diskOffering exists
|
||||||
final DiskOffering diskOfferingHandle = _entityMgr.findById(DiskOffering.class, diskOfferingId);
|
final DiskOffering diskOfferingHandle = _entityMgr.findById(DiskOffering.class, diskOfferingId);
|
||||||
if (diskOfferingHandle == null) {
|
if (diskOfferingHandle == null) {
|
||||||
@ -3223,7 +3213,10 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||||||
throw new InvalidParameterValueException(String.format("Unable to update disk offering: %s by id user: %s because it is not root-admin or domain-admin", diskOfferingHandle.getUuid(), user.getUuid()));
|
throw new InvalidParameterValueException(String.format("Unable to update disk offering: %s by id user: %s because it is not root-admin or domain-admin", diskOfferingHandle.getUuid(), user.getUuid()));
|
||||||
}
|
}
|
||||||
|
|
||||||
final boolean updateNeeded = shouldUpdateDiskOffering(name, displayText, sortKey, displayDiskOffering, tags);
|
boolean updateNeeded = shouldUpdateDiskOffering(name, displayText, sortKey, displayDiskOffering, tags, cacheMode) ||
|
||||||
|
shouldUpdateIopsRateParameters(iopsReadRate, iopsReadRateMax, iopsReadRateMaxLength, iopsWriteRate, iopsWriteRateMax, iopsWriteRateMaxLength) ||
|
||||||
|
shouldUpdateBytesRateParameters(bytesReadRate, bytesReadRateMax, bytesReadRateMaxLength, bytesWriteRate, bytesWriteRateMax, bytesWriteRateMaxLength);
|
||||||
|
|
||||||
final boolean detailsUpdateNeeded = !filteredDomainIds.equals(existingDomainIds) || !filteredZoneIds.equals(existingZoneIds);
|
final boolean detailsUpdateNeeded = !filteredDomainIds.equals(existingDomainIds) || !filteredZoneIds.equals(existingZoneIds);
|
||||||
if (!updateNeeded && !detailsUpdateNeeded) {
|
if (!updateNeeded && !detailsUpdateNeeded) {
|
||||||
return _diskOfferingDao.findById(diskOfferingId);
|
return _diskOfferingDao.findById(diskOfferingId);
|
||||||
@ -3249,6 +3242,20 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||||||
|
|
||||||
updateDiskOfferingTagsIfIsNotNull(tags, diskOffering);
|
updateDiskOfferingTagsIfIsNotNull(tags, diskOffering);
|
||||||
|
|
||||||
|
validateMaxRateEqualsOrGreater(iopsReadRate, iopsReadRateMax, IOPS_READ_RATE);
|
||||||
|
validateMaxRateEqualsOrGreater(iopsWriteRate, iopsWriteRateMax, IOPS_WRITE_RATE);
|
||||||
|
validateMaxRateEqualsOrGreater(bytesReadRate, bytesReadRateMax, BYTES_READ_RATE);
|
||||||
|
validateMaxRateEqualsOrGreater(bytesWriteRate, bytesWriteRateMax, BYTES_WRITE_RATE);
|
||||||
|
validateMaximumIopsAndBytesLength(iopsReadRateMaxLength, iopsWriteRateMaxLength, bytesReadRateMaxLength, bytesWriteRateMaxLength);
|
||||||
|
|
||||||
|
setBytesRate(diskOffering, bytesReadRate, bytesReadRateMax, bytesReadRateMaxLength, bytesWriteRate, bytesWriteRateMax, bytesWriteRateMaxLength);
|
||||||
|
setIopsRate(diskOffering, iopsReadRate, iopsReadRateMax, iopsReadRateMaxLength, iopsWriteRate, iopsWriteRateMax, iopsWriteRateMaxLength);
|
||||||
|
|
||||||
|
if (cacheMode != null) {
|
||||||
|
validateCacheMode(cacheMode);
|
||||||
|
diskOffering.setCacheMode(DiskOffering.DiskCacheMode.valueOf(cacheMode.toUpperCase()));
|
||||||
|
}
|
||||||
|
|
||||||
if (updateNeeded && !_diskOfferingDao.update(diskOfferingId, diskOffering)) {
|
if (updateNeeded && !_diskOfferingDao.update(diskOfferingId, diskOffering)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -3305,8 +3312,17 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||||||
* Check if it needs to update any parameter when updateDiskoffering is called
|
* Check if it needs to update any parameter when updateDiskoffering is called
|
||||||
* Verify if name or displayText are not blank, tags is not null, sortkey and displayDiskOffering is not null
|
* Verify if name or displayText are not blank, tags is not null, sortkey and displayDiskOffering is not null
|
||||||
*/
|
*/
|
||||||
protected boolean shouldUpdateDiskOffering(String name, String displayText, Integer sortKey, Boolean displayDiskOffering, String tags) {
|
protected boolean shouldUpdateDiskOffering(String name, String displayText, Integer sortKey, Boolean displayDiskOffering, String tags, String cacheMode) {
|
||||||
return StringUtils.isNotBlank(name) || StringUtils.isNotBlank(displayText) || tags != null || sortKey != null || displayDiskOffering != null;
|
return StringUtils.isNotBlank(name) || StringUtils.isNotBlank(displayText) || tags != null || sortKey != null || displayDiskOffering != null || StringUtils.isNotBlank(cacheMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean shouldUpdateBytesRateParameters(Long bytesReadRate, Long bytesReadRateMax, Long bytesReadRateMaxLength, Long bytesWriteRate, Long bytesWriteRateMax, Long bytesWriteRateMaxLength) {
|
||||||
|
return bytesReadRate != null || bytesReadRateMax != null || bytesReadRateMaxLength != null || bytesWriteRate != null ||
|
||||||
|
bytesWriteRateMax != null || bytesWriteRateMaxLength != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean shouldUpdateIopsRateParameters(Long iopsReadRate, Long iopsReadRateMax, Long iopsReadRateMaxLength, Long iopsWriteRate, Long iopsWriteRateMax, Long iopsWriteRateMaxLength) {
|
||||||
|
return iopsReadRate != null || iopsReadRateMax != null || iopsReadRateMaxLength != null || iopsWriteRate != null || iopsWriteRateMax != null || iopsWriteRateMaxLength != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -44,6 +44,7 @@ public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkA
|
|||||||
static final String RouterTemplateOvm3CK = "router.template.ovm3";
|
static final String RouterTemplateOvm3CK = "router.template.ovm3";
|
||||||
static final String SetServiceMonitorCK = "network.router.EnableServiceMonitoring";
|
static final String SetServiceMonitorCK = "network.router.EnableServiceMonitoring";
|
||||||
static final String RouterAlertsCheckIntervalCK = "router.alerts.check.interval";
|
static final String RouterAlertsCheckIntervalCK = "router.alerts.check.interval";
|
||||||
|
static final String VirtualRouterServiceOfferingCK = "router.service.offering";
|
||||||
|
|
||||||
static final String RouterHealthChecksConfigRefreshIntervalCK = "router.health.checks.config.refresh.interval";
|
static final String RouterHealthChecksConfigRefreshIntervalCK = "router.health.checks.config.refresh.interval";
|
||||||
static final String RouterHealthChecksResultFetchIntervalCK = "router.health.checks.results.fetch.interval";
|
static final String RouterHealthChecksResultFetchIntervalCK = "router.health.checks.results.fetch.interval";
|
||||||
@ -74,6 +75,9 @@ public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkA
|
|||||||
static final ConfigKey<Boolean> ExposeDnsAndBootpServer = new ConfigKey<Boolean>(Boolean.class, "expose.dns.externally", "Advanced", "true",
|
static final ConfigKey<Boolean> ExposeDnsAndBootpServer = new ConfigKey<Boolean>(Boolean.class, "expose.dns.externally", "Advanced", "true",
|
||||||
"open dns, dhcp and bootp on the public interface", true, ConfigKey.Scope.Zone, null);
|
"open dns, dhcp and bootp on the public interface", true, ConfigKey.Scope.Zone, null);
|
||||||
|
|
||||||
|
static final ConfigKey<String> VirtualRouterServiceOffering = new ConfigKey<String>(String.class, VirtualRouterServiceOfferingCK, "Advanced", "",
|
||||||
|
"Uuid of the service offering used by virtual routers; if NULL - system offering will be used", true, ConfigKey.Scope.Account, null);
|
||||||
|
|
||||||
// Health checks
|
// Health checks
|
||||||
static final ConfigKey<Boolean> RouterHealthChecksEnabled = new ConfigKey<Boolean>(Boolean.class, "router.health.checks.enabled", "Advanced", "true",
|
static final ConfigKey<Boolean> RouterHealthChecksEnabled = new ConfigKey<Boolean>(Boolean.class, "router.health.checks.enabled", "Advanced", "true",
|
||||||
"If true, router health checks are allowed to be executed and read. If false, all scheduled checks and API calls for on demand checks are disabled.",
|
"If true, router health checks are allowed to be executed and read. If false, all scheduled checks and API calls for on demand checks are disabled.",
|
||||||
|
|||||||
@ -3256,6 +3256,7 @@ Configurable, StateListener<VirtualMachine.State, VirtualMachine.Event, VirtualM
|
|||||||
UseExternalDnsServers,
|
UseExternalDnsServers,
|
||||||
RouterVersionCheckEnabled,
|
RouterVersionCheckEnabled,
|
||||||
SetServiceMonitor,
|
SetServiceMonitor,
|
||||||
|
VirtualRouterServiceOffering,
|
||||||
RouterAlertsCheckInterval,
|
RouterAlertsCheckInterval,
|
||||||
RouterHealthChecksEnabled,
|
RouterHealthChecksEnabled,
|
||||||
RouterHealthChecksBasicInterval,
|
RouterHealthChecksBasicInterval,
|
||||||
|
|||||||
@ -1177,8 +1177,8 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
|
|||||||
final Object resourceState = cmd.getResourceState();
|
final Object resourceState = cmd.getResourceState();
|
||||||
final Object haHosts = cmd.getHaHost();
|
final Object haHosts = cmd.getHaHost();
|
||||||
|
|
||||||
final Pair<List<HostVO>, Integer> result = searchForServers(cmd.getStartIndex(), cmd.getPageSizeVal(), name, type, state, zoneId, pod, cluster, id, keyword, resourceState, haHosts, null,
|
final Pair<List<HostVO>, Integer> result = searchForServers(cmd.getStartIndex(), cmd.getPageSizeVal(), name, type, state, zoneId, pod,
|
||||||
null);
|
cluster, id, keyword, resourceState, haHosts, null, null);
|
||||||
return new Pair<List<? extends Host>, Integer>(result.first(), result.second());
|
return new Pair<List<? extends Host>, Integer>(result.first(), result.second());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1280,19 +1280,20 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
|
|||||||
final Type hostType = srcHost.getType();
|
final Type hostType = srcHost.getType();
|
||||||
Pair<List<HostVO>, Integer> allHostsPair = null;
|
Pair<List<HostVO>, Integer> allHostsPair = null;
|
||||||
List<HostVO> allHosts = null;
|
List<HostVO> allHosts = null;
|
||||||
|
List<HostVO> hostsForMigrationWithStorage = null;
|
||||||
final Map<Host, Boolean> requiresStorageMotion = new HashMap<Host, Boolean>();
|
final Map<Host, Boolean> requiresStorageMotion = new HashMap<Host, Boolean>();
|
||||||
DataCenterDeployment plan = null;
|
DataCenterDeployment plan = null;
|
||||||
if (canMigrateWithStorage) {
|
if (canMigrateWithStorage) {
|
||||||
allHostsPair = searchForServers(startIndex, pageSize, null, hostType, null, srcHost.getDataCenterId(), null, null, null, keyword, null, null, srcHost.getHypervisorType(),
|
allHostsPair = searchForServers(startIndex, pageSize, null, hostType, null, srcHost.getDataCenterId(), null, null, null, keyword,
|
||||||
srcHost.getHypervisorVersion());
|
null, null, srcHost.getHypervisorType(), srcHost.getHypervisorVersion(), srcHost.getId());
|
||||||
allHosts = allHostsPair.first();
|
allHosts = allHostsPair.first();
|
||||||
allHosts.remove(srcHost);
|
hostsForMigrationWithStorage = new ArrayList<>(allHosts);
|
||||||
|
|
||||||
for (final VolumeVO volume : volumes) {
|
for (final VolumeVO volume : volumes) {
|
||||||
StoragePool storagePool = _poolDao.findById(volume.getPoolId());
|
StoragePool storagePool = _poolDao.findById(volume.getPoolId());
|
||||||
Long volClusterId = storagePool.getClusterId();
|
Long volClusterId = storagePool.getClusterId();
|
||||||
|
|
||||||
for (Iterator<HostVO> iterator = allHosts.iterator(); iterator.hasNext();) {
|
for (Iterator<HostVO> iterator = hostsForMigrationWithStorage.iterator(); iterator.hasNext();) {
|
||||||
final Host host = iterator.next();
|
final Host host = iterator.next();
|
||||||
|
|
||||||
if (volClusterId != null) {
|
if (volClusterId != null) {
|
||||||
@ -1331,10 +1332,9 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
|
|||||||
if (s_logger.isDebugEnabled()) {
|
if (s_logger.isDebugEnabled()) {
|
||||||
s_logger.debug("Searching for all hosts in cluster " + cluster + " for migrating VM " + vm);
|
s_logger.debug("Searching for all hosts in cluster " + cluster + " for migrating VM " + vm);
|
||||||
}
|
}
|
||||||
allHostsPair = searchForServers(startIndex, pageSize, null, hostType, null, null, null, cluster, null, keyword, null, null, null, null);
|
allHostsPair = searchForServers(startIndex, pageSize, null, hostType, null, null, null, cluster, null, keyword, null, null, null,
|
||||||
// Filter out the current host.
|
null, srcHost.getId());
|
||||||
allHosts = allHostsPair.first();
|
allHosts = allHostsPair.first();
|
||||||
allHosts.remove(srcHost);
|
|
||||||
plan = new DataCenterDeployment(srcHost.getDataCenterId(), srcHost.getPodId(), srcHost.getClusterId(), null, null, null);
|
plan = new DataCenterDeployment(srcHost.getDataCenterId(), srcHost.getPodId(), srcHost.getClusterId(), null, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1363,7 +1363,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
|
|||||||
|
|
||||||
for (final HostAllocator allocator : hostAllocators) {
|
for (final HostAllocator allocator : hostAllocators) {
|
||||||
if (canMigrateWithStorage) {
|
if (canMigrateWithStorage) {
|
||||||
suitableHosts = allocator.allocateTo(vmProfile, plan, Host.Type.Routing, excludes, allHosts, HostAllocator.RETURN_UPTO_ALL, false);
|
suitableHosts = allocator.allocateTo(vmProfile, plan, Host.Type.Routing, excludes, hostsForMigrationWithStorage, HostAllocator.RETURN_UPTO_ALL, false);
|
||||||
} else {
|
} else {
|
||||||
suitableHosts = allocator.allocateTo(vmProfile, plan, Host.Type.Routing, excludes, HostAllocator.RETURN_UPTO_ALL, false);
|
suitableHosts = allocator.allocateTo(vmProfile, plan, Host.Type.Routing, excludes, HostAllocator.RETURN_UPTO_ALL, false);
|
||||||
}
|
}
|
||||||
@ -1576,12 +1576,14 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
|
|||||||
return suitablePools;
|
return suitablePools;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Pair<List<HostVO>, Integer> searchForServers(final Long startIndex, final Long pageSize, final Object name, final Object type, final Object state, final Object zone, final Object pod,
|
private Pair<List<HostVO>, Integer> searchForServers(final Long startIndex, final Long pageSize, final Object name, final Object type,
|
||||||
final Object cluster, final Object id, final Object keyword, final Object resourceState, final Object haHosts, final Object hypervisorType, final Object hypervisorVersion) {
|
final Object state, final Object zone, final Object pod, final Object cluster, final Object id, final Object keyword,
|
||||||
|
final Object resourceState, final Object haHosts, final Object hypervisorType, final Object hypervisorVersion, final Object... excludes) {
|
||||||
final Filter searchFilter = new Filter(HostVO.class, "id", Boolean.TRUE, startIndex, pageSize);
|
final Filter searchFilter = new Filter(HostVO.class, "id", Boolean.TRUE, startIndex, pageSize);
|
||||||
|
|
||||||
final SearchBuilder<HostVO> sb = _hostDao.createSearchBuilder();
|
final SearchBuilder<HostVO> sb = _hostDao.createSearchBuilder();
|
||||||
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
|
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
|
||||||
|
sb.and("idsNotIn", sb.entity().getId(), SearchCriteria.Op.NOTIN);
|
||||||
sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE);
|
sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE);
|
||||||
sb.and("type", sb.entity().getType(), SearchCriteria.Op.LIKE);
|
sb.and("type", sb.entity().getType(), SearchCriteria.Op.LIKE);
|
||||||
sb.and("status", sb.entity().getStatus(), SearchCriteria.Op.EQ);
|
sb.and("status", sb.entity().getStatus(), SearchCriteria.Op.EQ);
|
||||||
@ -1622,6 +1624,10 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
|
|||||||
sc.setParameters("id", id);
|
sc.setParameters("id", id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (excludes != null && excludes.length > 0) {
|
||||||
|
sc.setParameters("idsNotIn", excludes);
|
||||||
|
}
|
||||||
|
|
||||||
if (name != null) {
|
if (name != null) {
|
||||||
sc.setParameters("name", "%" + name + "%");
|
sc.setParameters("name", "%" + name + "%");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,6 +36,7 @@ import javax.inject.Inject;
|
|||||||
|
|
||||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
|
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
|
||||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
|
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
|
||||||
|
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider;
|
||||||
import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
|
import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
|
||||||
import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
|
import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
|
||||||
import org.apache.cloudstack.framework.config.ConfigKey;
|
import org.apache.cloudstack.framework.config.ConfigKey;
|
||||||
@ -1027,8 +1028,13 @@ public class StatsCollector extends ManagerBase implements ComponentMethodInterc
|
|||||||
storagePoolStats.put(pool.getId(), (StorageStats)answer);
|
storagePoolStats.put(pool.getId(), (StorageStats)answer);
|
||||||
|
|
||||||
// Seems like we have dynamically updated the pool size since the prev. size and the current do not match
|
// Seems like we have dynamically updated the pool size since the prev. size and the current do not match
|
||||||
if (_storagePoolStats.get(poolId) != null && _storagePoolStats.get(poolId).getCapacityBytes() != ((StorageStats)answer).getCapacityBytes()) {
|
if (pool.getCapacityBytes() != ((StorageStats)answer).getCapacityBytes() ||
|
||||||
|
pool.getUsedBytes() != ((StorageStats)answer).getByteUsed()) {
|
||||||
pool.setCapacityBytes(((StorageStats)answer).getCapacityBytes());
|
pool.setCapacityBytes(((StorageStats)answer).getCapacityBytes());
|
||||||
|
if (pool.getStorageProviderName().equalsIgnoreCase(DataStoreProvider.DEFAULT_PRIMARY)) {
|
||||||
|
pool.setUsedBytes(((StorageStats) answer).getByteUsed());
|
||||||
|
pool.setUpdateTime(new Date());
|
||||||
|
}
|
||||||
_storagePoolDao.update(pool.getId(), pool);
|
_storagePoolDao.update(pool.getId(), pool);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -159,7 +159,6 @@ import com.cloud.org.Grouping.AllocationState;
|
|||||||
import com.cloud.resource.ResourceState;
|
import com.cloud.resource.ResourceState;
|
||||||
import com.cloud.server.ConfigurationServer;
|
import com.cloud.server.ConfigurationServer;
|
||||||
import com.cloud.server.ManagementServer;
|
import com.cloud.server.ManagementServer;
|
||||||
import com.cloud.server.StatsCollector;
|
|
||||||
import com.cloud.storage.Storage.ImageFormat;
|
import com.cloud.storage.Storage.ImageFormat;
|
||||||
import com.cloud.storage.Storage.StoragePoolType;
|
import com.cloud.storage.Storage.StoragePoolType;
|
||||||
import com.cloud.storage.Volume.Type;
|
import com.cloud.storage.Volume.Type;
|
||||||
@ -1852,31 +1851,21 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
StatsCollector sc = StatsCollector.getInstance();
|
|
||||||
double storageUsedThreshold = CapacityManager.StorageCapacityDisableThreshold.valueIn(pool.getDataCenterId());
|
double storageUsedThreshold = CapacityManager.StorageCapacityDisableThreshold.valueIn(pool.getDataCenterId());
|
||||||
if (sc != null) {
|
long totalSize = pool.getCapacityBytes();
|
||||||
long totalSize = pool.getCapacityBytes();
|
double usedPercentage = ((double)pool.getUsedBytes() / (double)totalSize);
|
||||||
StorageStats stats = sc.getStoragePoolStats(pool.getId());
|
if (s_logger.isDebugEnabled()) {
|
||||||
if (stats == null) {
|
s_logger.debug("Checking pool " + pool.getId() + " for storage, totalSize: " + pool.getCapacityBytes() + ", usedBytes: " + pool.getUsedBytes() +
|
||||||
stats = sc.getStorageStats(pool.getId());
|
", usedPct: " + usedPercentage + ", disable threshold: " + storageUsedThreshold);
|
||||||
}
|
|
||||||
if (stats != null) {
|
|
||||||
double usedPercentage = ((double)stats.getByteUsed() / (double)totalSize);
|
|
||||||
if (s_logger.isDebugEnabled()) {
|
|
||||||
s_logger.debug("Checking pool " + pool.getId() + " for storage, totalSize: " + toHumanReadableSize(pool.getCapacityBytes()) + ", usedBytes: " + toHumanReadableSize(stats.getByteUsed()) + ", usedPct: " + usedPercentage
|
|
||||||
+ ", disable threshold: " + storageUsedThreshold);
|
|
||||||
}
|
|
||||||
if (usedPercentage >= storageUsedThreshold) {
|
|
||||||
if (s_logger.isDebugEnabled()) {
|
|
||||||
s_logger.debug("Insufficient space on pool: " + pool.getId() + " since its usage percentage: " + usedPercentage + " has crossed the pool.storage.capacity.disablethreshold: "
|
|
||||||
+ storageUsedThreshold);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
return false;
|
if (usedPercentage >= storageUsedThreshold) {
|
||||||
|
if (s_logger.isDebugEnabled()) {
|
||||||
|
s_logger.debug("Insufficient space on pool: " + pool.getId() + " since its usage percentage: " + usedPercentage +
|
||||||
|
" has crossed the pool.storage.capacity.disablethreshold: " + storageUsedThreshold);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -54,6 +54,7 @@ import com.cloud.network.dao.PhysicalNetworkServiceProviderDao;
|
|||||||
import com.cloud.network.dao.UserIpv6AddressDao;
|
import com.cloud.network.dao.UserIpv6AddressDao;
|
||||||
import com.cloud.network.dao.VirtualRouterProviderDao;
|
import com.cloud.network.dao.VirtualRouterProviderDao;
|
||||||
import com.cloud.network.router.NetworkHelper;
|
import com.cloud.network.router.NetworkHelper;
|
||||||
|
import com.cloud.network.router.VirtualNetworkApplianceManager;
|
||||||
import com.cloud.network.router.VirtualRouter.Role;
|
import com.cloud.network.router.VirtualRouter.Role;
|
||||||
import com.cloud.network.vpc.Vpc;
|
import com.cloud.network.vpc.Vpc;
|
||||||
import com.cloud.offering.ServiceOffering;
|
import com.cloud.offering.ServiceOffering;
|
||||||
@ -389,8 +390,34 @@ public class RouterDeploymentDefinition {
|
|||||||
serviceOfferingId = serviceOffering.getId();
|
serviceOfferingId = serviceOffering.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void findAccountServiceOfferingId(long accountId) {
|
||||||
|
String accountRouterOffering = VirtualNetworkApplianceManager.VirtualRouterServiceOffering.valueIn(accountId);
|
||||||
|
String globalRouterOffering = VirtualNetworkApplianceManager.VirtualRouterServiceOffering.value();
|
||||||
|
if (accountRouterOffering != null) {
|
||||||
|
verifyServiceOfferingByUuid(accountRouterOffering);
|
||||||
|
}
|
||||||
|
if (serviceOfferingId == null && globalRouterOffering != accountRouterOffering) {
|
||||||
|
verifyServiceOfferingByUuid(globalRouterOffering);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void verifyServiceOfferingByUuid(String offeringUuid) {
|
||||||
|
logger.debug("Verifying router service offering with uuid : " + offeringUuid);
|
||||||
|
ServiceOfferingVO serviceOffering = serviceOfferingDao.findByUuid(offeringUuid);
|
||||||
|
if (serviceOffering != null && serviceOffering.isSystemUse()) {
|
||||||
|
boolean isLocalStorage = ConfigurationManagerImpl.SystemVMUseLocalStorage.valueIn(dest.getDataCenter().getId());
|
||||||
|
if (isLocalStorage == serviceOffering.isUseLocalStorage()) {
|
||||||
|
logger.debug(String.format("Service offering %s (uuid: %s) will be used on virtual router", serviceOffering.getName(), serviceOffering.getUuid()));
|
||||||
|
serviceOfferingId = serviceOffering.getId();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected void findServiceOfferingId() {
|
protected void findServiceOfferingId() {
|
||||||
serviceOfferingId = networkOfferingDao.findById(guestNetwork.getNetworkOfferingId()).getServiceOfferingId();
|
serviceOfferingId = networkOfferingDao.findById(guestNetwork.getNetworkOfferingId()).getServiceOfferingId();
|
||||||
|
if (serviceOfferingId == null) {
|
||||||
|
findAccountServiceOfferingId(guestNetwork.getAccountId());
|
||||||
|
}
|
||||||
if (serviceOfferingId == null) {
|
if (serviceOfferingId == null) {
|
||||||
findDefaultServiceOfferingId();
|
findDefaultServiceOfferingId();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -159,6 +159,9 @@ public class VpcRouterDeploymentDefinition extends RouterDeploymentDefinition {
|
|||||||
@Override
|
@Override
|
||||||
protected void findServiceOfferingId() {
|
protected void findServiceOfferingId() {
|
||||||
serviceOfferingId = vpcOffDao.findById(vpc.getVpcOfferingId()).getServiceOfferingId();
|
serviceOfferingId = vpcOffDao.findById(vpc.getVpcOfferingId()).getServiceOfferingId();
|
||||||
|
if (serviceOfferingId == null) {
|
||||||
|
findAccountServiceOfferingId(vpc.getAccountId());
|
||||||
|
}
|
||||||
if (serviceOfferingId == null) {
|
if (serviceOfferingId == null) {
|
||||||
findDefaultServiceOfferingId();
|
findDefaultServiceOfferingId();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -946,17 +946,47 @@ public class ConfigurationManagerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldUpdateDiskOfferingTests(){
|
public void shouldUpdateDiskOfferingTests(){
|
||||||
Assert.assertTrue(configurationMgr.shouldUpdateDiskOffering(Mockito.anyString(), Mockito.anyString(), Mockito.anyInt(), Mockito.anyBoolean(), Mockito.anyString()));
|
Assert.assertTrue(configurationMgr.shouldUpdateDiskOffering(Mockito.anyString(), Mockito.anyString(), Mockito.anyInt(), Mockito.anyBoolean(), Mockito.anyString(), Mockito.anyString()));
|
||||||
Assert.assertTrue(configurationMgr.shouldUpdateDiskOffering(Mockito.anyString(), nullable(String.class), nullable(Integer.class), nullable(Boolean.class), nullable(String.class)));
|
Assert.assertTrue(configurationMgr.shouldUpdateDiskOffering(Mockito.anyString(), nullable(String.class), nullable(Integer.class), nullable(Boolean.class), nullable(String.class), nullable(String.class)));
|
||||||
Assert.assertTrue(configurationMgr.shouldUpdateDiskOffering(nullable(String.class), Mockito.anyString(), nullable(Integer.class), nullable(Boolean.class), nullable(String.class)));
|
Assert.assertTrue(configurationMgr.shouldUpdateDiskOffering(nullable(String.class), Mockito.anyString(), nullable(Integer.class), nullable(Boolean.class), nullable(String.class), nullable(String.class)));
|
||||||
Assert.assertTrue(configurationMgr.shouldUpdateDiskOffering(nullable(String.class), nullable(String.class), Mockito.anyInt(), nullable(Boolean.class), nullable(String.class)));
|
Assert.assertTrue(configurationMgr.shouldUpdateDiskOffering(nullable(String.class), nullable(String.class), Mockito.anyInt(), nullable(Boolean.class), nullable(String.class), nullable(String.class)));
|
||||||
Assert.assertTrue(configurationMgr.shouldUpdateDiskOffering(nullable(String.class), nullable(String.class), nullable(int.class), Mockito.anyBoolean(), nullable(String.class)));
|
Assert.assertTrue(configurationMgr.shouldUpdateDiskOffering(nullable(String.class), nullable(String.class), nullable(int.class), Mockito.anyBoolean(), nullable(String.class), nullable(String.class)));
|
||||||
Assert.assertTrue(configurationMgr.shouldUpdateDiskOffering(nullable(String.class), nullable(String.class), nullable(int.class), nullable(Boolean.class), Mockito.anyString()));
|
Assert.assertTrue(configurationMgr.shouldUpdateDiskOffering(nullable(String.class), nullable(String.class), nullable(int.class), nullable(Boolean.class), Mockito.anyString(), Mockito.anyString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldUpdateDiskOfferingTestFalse(){
|
public void shouldUpdateDiskOfferingTestFalse(){
|
||||||
Assert.assertFalse(configurationMgr.shouldUpdateDiskOffering(null, null, null, null, null));
|
Assert.assertFalse(configurationMgr.shouldUpdateDiskOffering(null, null, null, null, null, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldUpdateIopsRateParametersTestFalse() {
|
||||||
|
Assert.assertFalse(configurationMgr.shouldUpdateIopsRateParameters(null, null, null, null, null, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldUpdateIopsRateParametersTests(){
|
||||||
|
Assert.assertTrue(configurationMgr.shouldUpdateIopsRateParameters(Mockito.anyLong(), Mockito.anyLong(), Mockito.anyLong(), Mockito.anyLong(), Mockito.anyLong(), Mockito.anyLong()));
|
||||||
|
Assert.assertTrue(configurationMgr.shouldUpdateIopsRateParameters(nullable(Long.class), Mockito.anyLong(), nullable(Long.class), nullable(Long.class), nullable(Long.class), nullable(Long.class)));
|
||||||
|
Assert.assertTrue(configurationMgr.shouldUpdateIopsRateParameters(nullable(Long.class), nullable(Long.class), Mockito.anyLong(), nullable(Long.class), nullable(Long.class), nullable(Long.class)));
|
||||||
|
Assert.assertTrue(configurationMgr.shouldUpdateIopsRateParameters(nullable(Long.class), nullable(Long.class), nullable(Long.class), Mockito.anyLong(), nullable(Long.class), nullable(Long.class)));
|
||||||
|
Assert.assertTrue(configurationMgr.shouldUpdateIopsRateParameters(nullable(Long.class), nullable(Long.class), nullable(Long.class), nullable(Long.class), Mockito.anyLong(), nullable(Long.class)));
|
||||||
|
Assert.assertTrue(configurationMgr.shouldUpdateIopsRateParameters(nullable(Long.class), nullable(Long.class), nullable(Long.class), nullable(Long.class), nullable(Long.class), Mockito.anyLong()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldUpdateBytesRateParametersTestFalse() {
|
||||||
|
Assert.assertFalse(configurationMgr.shouldUpdateBytesRateParameters(null, null, null, null, null, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldUpdateBytesRateParametersTests(){
|
||||||
|
Assert.assertTrue(configurationMgr.shouldUpdateBytesRateParameters(Mockito.anyLong(), Mockito.anyLong(), Mockito.anyLong(), Mockito.anyLong(), Mockito.anyLong(), Mockito.anyLong()));
|
||||||
|
Assert.assertTrue(configurationMgr.shouldUpdateBytesRateParameters(nullable(Long.class), Mockito.anyLong(), nullable(Long.class), nullable(Long.class), nullable(Long.class), nullable(Long.class)));
|
||||||
|
Assert.assertTrue(configurationMgr.shouldUpdateBytesRateParameters(nullable(Long.class), nullable(Long.class), Mockito.anyLong(), nullable(Long.class), nullable(Long.class), nullable(Long.class)));
|
||||||
|
Assert.assertTrue(configurationMgr.shouldUpdateBytesRateParameters(nullable(Long.class), nullable(Long.class), nullable(Long.class), Mockito.anyLong(), nullable(Long.class), nullable(Long.class)));
|
||||||
|
Assert.assertTrue(configurationMgr.shouldUpdateBytesRateParameters(nullable(Long.class), nullable(Long.class), nullable(Long.class), nullable(Long.class), Mockito.anyLong(), nullable(Long.class)));
|
||||||
|
Assert.assertTrue(configurationMgr.shouldUpdateBytesRateParameters(nullable(Long.class), nullable(Long.class), nullable(Long.class), nullable(Long.class), nullable(Long.class), Mockito.anyLong()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@ -17,7 +17,6 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
import os
|
import os
|
||||||
from CsFile import CsFile
|
from CsFile import CsFile
|
||||||
from CsProcess import CsProcess
|
|
||||||
import CsHelper
|
import CsHelper
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -40,9 +40,9 @@ class CsProcess(object):
|
|||||||
|
|
||||||
def find_pid(self):
|
def find_pid(self):
|
||||||
self.pid = []
|
self.pid = []
|
||||||
|
items = len(self.search)
|
||||||
for i in CsHelper.execute("ps aux"):
|
for i in CsHelper.execute("ps aux"):
|
||||||
items = len(self.search)
|
proc = re.split(r"\s+", i)[10:]
|
||||||
proc = re.split(r"\s+", i)[items*-1:]
|
|
||||||
matches = len([m for m in proc if m in self.search])
|
matches = len([m for m in proc if m in self.search])
|
||||||
if matches == items:
|
if matches == items:
|
||||||
self.pid.append(re.split(r"\s+", i)[1])
|
self.pid.append(re.split(r"\s+", i)[1])
|
||||||
|
|||||||
@ -451,34 +451,53 @@ class VirtualMachine:
|
|||||||
@classmethod
|
@classmethod
|
||||||
def access_ssh_over_nat(
|
def access_ssh_over_nat(
|
||||||
cls, apiclient, services, virtual_machine, allow_egress=False,
|
cls, apiclient, services, virtual_machine, allow_egress=False,
|
||||||
networkid=None):
|
networkid=None, vpcid=None):
|
||||||
"""
|
"""
|
||||||
Program NAT and PF rules to open up ssh access to deployed guest
|
Program NAT and PF rules to open up ssh access to deployed guest
|
||||||
@return:
|
@return:
|
||||||
"""
|
"""
|
||||||
public_ip = PublicIPAddress.create(
|
# VPCs have ACLs managed differently
|
||||||
apiclient=apiclient,
|
if vpcid:
|
||||||
accountid=virtual_machine.account,
|
public_ip = PublicIPAddress.create(
|
||||||
zoneid=virtual_machine.zoneid,
|
apiclient=apiclient,
|
||||||
domainid=virtual_machine.domainid,
|
accountid=virtual_machine.account,
|
||||||
services=services,
|
zoneid=virtual_machine.zoneid,
|
||||||
networkid=networkid
|
domainid=virtual_machine.domainid,
|
||||||
)
|
services=services,
|
||||||
FireWallRule.create(
|
vpcid=vpcid
|
||||||
apiclient=apiclient,
|
)
|
||||||
ipaddressid=public_ip.ipaddress.id,
|
|
||||||
protocol='TCP',
|
nat_rule = NATRule.create(
|
||||||
cidrlist=['0.0.0.0/0'],
|
apiclient=apiclient,
|
||||||
startport=22,
|
virtual_machine=virtual_machine,
|
||||||
endport=22
|
services=services,
|
||||||
)
|
ipaddressid=public_ip.ipaddress.id,
|
||||||
nat_rule = NATRule.create(
|
networkid=networkid)
|
||||||
apiclient=apiclient,
|
else:
|
||||||
virtual_machine=virtual_machine,
|
public_ip = PublicIPAddress.create(
|
||||||
services=services,
|
apiclient=apiclient,
|
||||||
ipaddressid=public_ip.ipaddress.id
|
accountid=virtual_machine.account,
|
||||||
)
|
zoneid=virtual_machine.zoneid,
|
||||||
if allow_egress:
|
domainid=virtual_machine.domainid,
|
||||||
|
services=services,
|
||||||
|
networkid=networkid,
|
||||||
|
)
|
||||||
|
|
||||||
|
FireWallRule.create(
|
||||||
|
apiclient=apiclient,
|
||||||
|
ipaddressid=public_ip.ipaddress.id,
|
||||||
|
protocol='TCP',
|
||||||
|
cidrlist=['0.0.0.0/0'],
|
||||||
|
startport=22,
|
||||||
|
endport=22
|
||||||
|
)
|
||||||
|
nat_rule = NATRule.create(
|
||||||
|
apiclient=apiclient,
|
||||||
|
virtual_machine=virtual_machine,
|
||||||
|
services=services,
|
||||||
|
ipaddressid=public_ip.ipaddress.id)
|
||||||
|
|
||||||
|
if allow_egress and not vpcid:
|
||||||
try:
|
try:
|
||||||
EgressFireWallRule.create(
|
EgressFireWallRule.create(
|
||||||
apiclient=apiclient,
|
apiclient=apiclient,
|
||||||
@ -502,7 +521,7 @@ class VirtualMachine:
|
|||||||
hostid=None, keypair=None, ipaddress=None, mode='default',
|
hostid=None, keypair=None, ipaddress=None, mode='default',
|
||||||
method='GET', hypervisor=None, customcpunumber=None,
|
method='GET', hypervisor=None, customcpunumber=None,
|
||||||
customcpuspeed=None, custommemory=None, rootdisksize=None,
|
customcpuspeed=None, custommemory=None, rootdisksize=None,
|
||||||
rootdiskcontroller=None, macaddress=None, datadisktemplate_diskoffering_list={},
|
rootdiskcontroller=None, vpcid=None, macaddress=None, datadisktemplate_diskoffering_list={},
|
||||||
properties=None, nicnetworklist=None):
|
properties=None, nicnetworklist=None):
|
||||||
"""Create the instance"""
|
"""Create the instance"""
|
||||||
|
|
||||||
@ -661,7 +680,8 @@ class VirtualMachine:
|
|||||||
services,
|
services,
|
||||||
virtual_machine,
|
virtual_machine,
|
||||||
allow_egress=allow_egress,
|
allow_egress=allow_egress,
|
||||||
networkid=cmd.networkids[0] if cmd.networkids else None)
|
networkid=cmd.networkids[0] if cmd.networkids else None,
|
||||||
|
vpcid=vpcid)
|
||||||
elif mode.lower() == 'basic':
|
elif mode.lower() == 'basic':
|
||||||
if virtual_machine.publicip is not None:
|
if virtual_machine.publicip is not None:
|
||||||
# EIP/ELB (netscaler) enabled zone
|
# EIP/ELB (netscaler) enabled zone
|
||||||
@ -1049,7 +1069,7 @@ class Volume:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create_custom_disk(cls, apiclient, services, account=None,
|
def create_custom_disk(cls, apiclient, services, account=None,
|
||||||
domainid=None, diskofferingid=None):
|
domainid=None, diskofferingid=None, projectid=None):
|
||||||
"""Create Volume from Custom disk offering"""
|
"""Create Volume from Custom disk offering"""
|
||||||
cmd = createVolume.createVolumeCmd()
|
cmd = createVolume.createVolumeCmd()
|
||||||
cmd.name = services["diskname"]
|
cmd.name = services["diskname"]
|
||||||
@ -1072,19 +1092,22 @@ class Volume:
|
|||||||
|
|
||||||
if account:
|
if account:
|
||||||
cmd.account = account
|
cmd.account = account
|
||||||
else:
|
elif "account" in services:
|
||||||
cmd.account = services["account"]
|
cmd.account = services["account"]
|
||||||
|
|
||||||
if domainid:
|
if domainid:
|
||||||
cmd.domainid = domainid
|
cmd.domainid = domainid
|
||||||
else:
|
elif "domainid" in services:
|
||||||
cmd.domainid = services["domainid"]
|
cmd.domainid = services["domainid"]
|
||||||
|
|
||||||
|
if projectid:
|
||||||
|
cmd.projectid = projectid
|
||||||
|
|
||||||
return Volume(apiclient.createVolume(cmd).__dict__)
|
return Volume(apiclient.createVolume(cmd).__dict__)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create_from_snapshot(cls, apiclient, snapshot_id, services,
|
def create_from_snapshot(cls, apiclient, snapshot_id, services,
|
||||||
account=None, domainid=None):
|
account=None, domainid=None, projectid=None):
|
||||||
"""Create Volume from snapshot"""
|
"""Create Volume from snapshot"""
|
||||||
cmd = createVolume.createVolumeCmd()
|
cmd = createVolume.createVolumeCmd()
|
||||||
cmd.name = "-".join([services["diskname"], random_gen()])
|
cmd.name = "-".join([services["diskname"], random_gen()])
|
||||||
@ -1098,12 +1121,16 @@ class Volume:
|
|||||||
cmd.ispublic = False
|
cmd.ispublic = False
|
||||||
if account:
|
if account:
|
||||||
cmd.account = account
|
cmd.account = account
|
||||||
else:
|
elif "account" in services:
|
||||||
cmd.account = services["account"]
|
cmd.account = services["account"]
|
||||||
if domainid:
|
if domainid:
|
||||||
cmd.domainid = domainid
|
cmd.domainid = domainid
|
||||||
else:
|
elif "domainid" in services:
|
||||||
cmd.domainid = services["domainid"]
|
cmd.domainid = services["domainid"]
|
||||||
|
|
||||||
|
if projectid:
|
||||||
|
cmd.projectid = projectid
|
||||||
|
|
||||||
return Volume(apiclient.createVolume(cmd).__dict__)
|
return Volume(apiclient.createVolume(cmd).__dict__)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -1454,8 +1481,8 @@ class Template:
|
|||||||
return Template(apiclient.createTemplate(cmd).__dict__)
|
return Template(apiclient.createTemplate(cmd).__dict__)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create_from_snapshot(cls, apiclient, snapshot, services,
|
def create_from_snapshot(cls, apiclient, snapshot, services, account=None,
|
||||||
random_name=True):
|
domainid=None, projectid=None, random_name=True):
|
||||||
"""Create Template from snapshot"""
|
"""Create Template from snapshot"""
|
||||||
# Create template from Snapshot ID
|
# Create template from Snapshot ID
|
||||||
cmd = createTemplate.createTemplateCmd()
|
cmd = createTemplate.createTemplateCmd()
|
||||||
@ -1494,6 +1521,17 @@ class Template:
|
|||||||
raise Exception(
|
raise Exception(
|
||||||
"Unable to find Ostype is required for creating template")
|
"Unable to find Ostype is required for creating template")
|
||||||
|
|
||||||
|
cmd.snapshotid = snapshot.id
|
||||||
|
|
||||||
|
if account:
|
||||||
|
cmd.account = account
|
||||||
|
if domainid:
|
||||||
|
cmd.domainid = domainid
|
||||||
|
if projectid:
|
||||||
|
cmd.projectid = projectid
|
||||||
|
|
||||||
|
return Template(apiclient.createTemplate(cmd).__dict__)
|
||||||
|
|
||||||
def delete(self, apiclient, zoneid=None):
|
def delete(self, apiclient, zoneid=None):
|
||||||
"""Delete Template"""
|
"""Delete Template"""
|
||||||
|
|
||||||
@ -3930,7 +3968,7 @@ class VpnCustomerGateway:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, apiclient, services, name, gateway, cidrlist,
|
def create(cls, apiclient, services, name, gateway, cidrlist,
|
||||||
account=None, domainid=None):
|
account=None, domainid=None, projectid=None):
|
||||||
"""Create VPN Customer Gateway"""
|
"""Create VPN Customer Gateway"""
|
||||||
cmd = createVpnCustomerGateway.createVpnCustomerGatewayCmd()
|
cmd = createVpnCustomerGateway.createVpnCustomerGatewayCmd()
|
||||||
cmd.name = name
|
cmd.name = name
|
||||||
@ -3954,6 +3992,9 @@ class VpnCustomerGateway:
|
|||||||
cmd.account = account
|
cmd.account = account
|
||||||
if domainid:
|
if domainid:
|
||||||
cmd.domainid = domainid
|
cmd.domainid = domainid
|
||||||
|
if projectid:
|
||||||
|
cmd.projectid = projectid
|
||||||
|
|
||||||
return VpnCustomerGateway(
|
return VpnCustomerGateway(
|
||||||
apiclient.createVpnCustomerGateway(cmd).__dict__)
|
apiclient.createVpnCustomerGateway(cmd).__dict__)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user