mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Inject hypervisor type and volume format on Quota tariffs (#8138)
This commit is contained in:
parent
05b9b6e2e7
commit
df4cd2aae4
@ -455,7 +455,7 @@ public class QuotaManagerImpl extends ManagerBase implements QuotaManager {
|
||||
|
||||
}
|
||||
|
||||
jsInterpreter.injectVariable("resourceType", presetVariables.getResourceType());
|
||||
jsInterpreter.injectStringVariable("resourceType", presetVariables.getResourceType());
|
||||
jsInterpreter.injectVariable("value", presetVariables.getValue().toString());
|
||||
jsInterpreter.injectVariable("zone", presetVariables.getZone().toString());
|
||||
}
|
||||
|
||||
@ -27,6 +27,7 @@ import java.util.stream.Collectors;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import com.cloud.hypervisor.Hypervisor;
|
||||
import org.apache.cloudstack.acl.RoleVO;
|
||||
import org.apache.cloudstack.acl.dao.RoleDao;
|
||||
import org.apache.cloudstack.backup.BackupOfferingVO;
|
||||
@ -65,6 +66,7 @@ import com.cloud.storage.DiskOfferingVO;
|
||||
import com.cloud.storage.GuestOSVO;
|
||||
import com.cloud.storage.Snapshot;
|
||||
import com.cloud.storage.SnapshotVO;
|
||||
import com.cloud.storage.Storage.ImageFormat;
|
||||
import com.cloud.storage.VMTemplateVO;
|
||||
import com.cloud.storage.VolumeVO;
|
||||
import com.cloud.storage.dao.DiskOfferingDao;
|
||||
@ -318,6 +320,10 @@ public class PresetVariableHelper {
|
||||
|
||||
value.setTags(getPresetVariableValueResourceTags(vmId, ResourceObjectType.UserVm));
|
||||
value.setTemplate(getPresetVariableValueTemplate(vmVo.getTemplateId()));
|
||||
Hypervisor.HypervisorType hypervisorType = vmVo.getHypervisorType();
|
||||
if (hypervisorType != null) {
|
||||
value.setHypervisorType(hypervisorType.name());
|
||||
}
|
||||
}
|
||||
|
||||
protected void logNotLoadingMessageInTrace(String resource, int usageType) {
|
||||
@ -470,6 +476,11 @@ public class PresetVariableHelper {
|
||||
|
||||
value.setTags(getPresetVariableValueResourceTags(volumeId, ResourceObjectType.Volume));
|
||||
value.setSize(ByteScaleUtils.bytesToMebibytes(volumeVo.getSize()));
|
||||
|
||||
ImageFormat format = volumeVo.getFormat();
|
||||
if (format != null) {
|
||||
value.setVolumeFormat(format.name());
|
||||
}
|
||||
}
|
||||
|
||||
protected GenericPresetVariable getPresetVariableValueDiskOffering(Long diskOfferingId) {
|
||||
@ -558,6 +569,10 @@ public class PresetVariableHelper {
|
||||
value.setSnapshotType(Snapshot.Type.values()[snapshotVo.getSnapshotType()]);
|
||||
value.setStorage(getPresetVariableValueStorage(getSnapshotDataStoreId(snapshotId, usageRecord.getZoneId()), usageType));
|
||||
value.setTags(getPresetVariableValueResourceTags(snapshotId, ResourceObjectType.Snapshot));
|
||||
Hypervisor.HypervisorType hypervisorType = snapshotVo.getHypervisorType();
|
||||
if (hypervisorType != null) {
|
||||
value.setHypervisorType(hypervisorType.name());
|
||||
}
|
||||
}
|
||||
|
||||
protected SnapshotDataStoreVO getSnapshotImageStoreRef(long snapshotId, long zoneId) {
|
||||
@ -621,6 +636,11 @@ public class PresetVariableHelper {
|
||||
value.setName(vmSnapshotVo.getName());
|
||||
value.setTags(getPresetVariableValueResourceTags(vmSnapshotId, ResourceObjectType.VMSnapshot));
|
||||
value.setVmSnapshotType(vmSnapshotVo.getType());
|
||||
|
||||
VMInstanceVO vmVo = vmInstanceDao.findByIdIncludingRemoved(vmSnapshotVo.getVmId());
|
||||
if (vmVo != null && vmVo.getHypervisorType() != null) {
|
||||
value.setHypervisorType(vmVo.getHypervisorType().name());
|
||||
}
|
||||
}
|
||||
|
||||
protected void loadPresetVariableValueForBackup(UsageVO usageRecord, Value value) {
|
||||
|
||||
@ -41,6 +41,8 @@ public class Value extends GenericPresetVariable {
|
||||
private Storage storage;
|
||||
private ComputingResources computingResources;
|
||||
private BackupOffering backupOffering;
|
||||
private String hypervisorType;
|
||||
private String volumeFormat;
|
||||
|
||||
public Host getHost() {
|
||||
return host;
|
||||
@ -185,4 +187,22 @@ public class Value extends GenericPresetVariable {
|
||||
this.backupOffering = backupOffering;
|
||||
fieldNamesToIncludeInToString.add("backupOffering");
|
||||
}
|
||||
|
||||
public void setHypervisorType(String hypervisorType) {
|
||||
this.hypervisorType = hypervisorType;
|
||||
fieldNamesToIncludeInToString.add("hypervisorType");
|
||||
}
|
||||
|
||||
public String getHypervisorType() {
|
||||
return hypervisorType;
|
||||
}
|
||||
|
||||
public void setVolumeFormat(String volumeFormat) {
|
||||
this.volumeFormat = volumeFormat;
|
||||
fieldNamesToIncludeInToString.add("volumeFormat");
|
||||
}
|
||||
|
||||
public String getVolumeFormat() {
|
||||
return volumeFormat;
|
||||
}
|
||||
}
|
||||
|
||||
@ -267,7 +267,7 @@ public class QuotaManagerImplTest {
|
||||
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("account"), Mockito.anyString());
|
||||
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("domain"), Mockito.anyString());
|
||||
Mockito.verify(jsInterpreterMock, Mockito.never()).injectVariable(Mockito.eq("project"), Mockito.anyString());
|
||||
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("resourceType"), Mockito.anyString());
|
||||
Mockito.verify(jsInterpreterMock).injectStringVariable(Mockito.eq("resourceType"), Mockito.anyString());
|
||||
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("value"), Mockito.anyString());
|
||||
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("zone"), Mockito.anyString());
|
||||
}
|
||||
@ -288,7 +288,7 @@ public class QuotaManagerImplTest {
|
||||
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("account"), Mockito.anyString());
|
||||
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("domain"), Mockito.anyString());
|
||||
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("project"), Mockito.anyString());
|
||||
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("resourceType"), Mockito.anyString());
|
||||
Mockito.verify(jsInterpreterMock).injectStringVariable(Mockito.eq("resourceType"), Mockito.anyString());
|
||||
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("value"), Mockito.anyString());
|
||||
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("zone"), Mockito.anyString());
|
||||
}
|
||||
|
||||
@ -27,6 +27,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.cloud.hypervisor.Hypervisor;
|
||||
import org.apache.cloudstack.acl.RoleType;
|
||||
import org.apache.cloudstack.acl.RoleVO;
|
||||
import org.apache.cloudstack.acl.dao.RoleDao;
|
||||
@ -70,6 +71,7 @@ import com.cloud.storage.GuestOSVO;
|
||||
import com.cloud.storage.ScopeType;
|
||||
import com.cloud.storage.Snapshot;
|
||||
import com.cloud.storage.SnapshotVO;
|
||||
import com.cloud.storage.Storage.ImageFormat;
|
||||
import com.cloud.storage.Storage.ProvisioningType;
|
||||
import com.cloud.storage.VMTemplateVO;
|
||||
import com.cloud.storage.VolumeVO;
|
||||
@ -485,6 +487,7 @@ public class PresetVariableHelperTest {
|
||||
|
||||
@Test
|
||||
public void loadPresetVariableValueForRunningAndAllocatedVmTestRecordIsRunningOrAllocatedVmSetFields() {
|
||||
for (Hypervisor.HypervisorType hypervisorType : Hypervisor.HypervisorType.values()) {
|
||||
Value expected = getValueForTests();
|
||||
|
||||
Mockito.doReturn(vmInstanceVoMock).when(vmInstanceDaoMock).findByIdIncludingRemoved(Mockito.anyLong());
|
||||
@ -500,6 +503,7 @@ public class PresetVariableHelperTest {
|
||||
Mockito.doNothing().when(presetVariableHelperSpy).setPresetVariableValueServiceOfferingAndComputingResources(Mockito.any(), Mockito.anyInt(), Mockito.any());
|
||||
Mockito.doReturn(expected.getTags()).when(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.any(ResourceObjectType.class));
|
||||
Mockito.doReturn(expected.getTemplate()).when(presetVariableHelperSpy).getPresetVariableValueTemplate(Mockito.anyLong());
|
||||
Mockito.doReturn(hypervisorType).when(vmInstanceVoMock).getHypervisorType();
|
||||
|
||||
runningAndAllocatedVmUsageTypes.forEach(type -> {
|
||||
Mockito.doReturn(type).when(usageVoMock).getUsageType();
|
||||
@ -511,12 +515,14 @@ public class PresetVariableHelperTest {
|
||||
Assert.assertEquals(expected.getOsName(), result.getOsName());
|
||||
Assert.assertEquals(expected.getTags(), result.getTags());
|
||||
Assert.assertEquals(expected.getTemplate(), result.getTemplate());
|
||||
Assert.assertEquals(hypervisorType.name(), result.getHypervisorType());
|
||||
|
||||
validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", "osName", "tags", "template"), result);
|
||||
validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", "osName", "tags", "template", "hypervisorType"), result);
|
||||
});
|
||||
}
|
||||
|
||||
Mockito.verify(presetVariableHelperSpy, Mockito.times(runningAndAllocatedVmUsageTypes.size())).getPresetVariableValueResourceTags(Mockito.anyLong(),
|
||||
Mockito.eq(ResourceObjectType.UserVm));
|
||||
Mockito.verify(presetVariableHelperSpy, Mockito.times(runningAndAllocatedVmUsageTypes.size() * Hypervisor.HypervisorType.values().length))
|
||||
.getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.eq(ResourceObjectType.UserVm));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -636,6 +642,7 @@ public class PresetVariableHelperTest {
|
||||
|
||||
@Test
|
||||
public void loadPresetVariableValueForVolumeTestRecordIsVolumeAndHasStorageSetFields() {
|
||||
for (ImageFormat imageFormat : ImageFormat.values()) {
|
||||
Value expected = getValueForTests();
|
||||
|
||||
VolumeVO volumeVoMock = Mockito.mock(VolumeVO.class);
|
||||
@ -651,6 +658,7 @@ public class PresetVariableHelperTest {
|
||||
Mockito.doReturn(expected.getStorage()).when(presetVariableHelperSpy).getPresetVariableValueStorage(Mockito.anyLong(), Mockito.anyInt());
|
||||
Mockito.doReturn(expected.getTags()).when(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.any(ResourceObjectType.class));
|
||||
Mockito.doReturn(expected.getSize()).when(volumeVoMock).getSize();
|
||||
Mockito.doReturn(imageFormat).when(volumeVoMock).getFormat();
|
||||
|
||||
Mockito.doReturn(UsageTypes.VOLUME).when(usageVoMock).getUsageType();
|
||||
|
||||
@ -665,14 +673,18 @@ public class PresetVariableHelperTest {
|
||||
Assert.assertEquals(expected.getStorage(), result.getStorage());
|
||||
Assert.assertEquals(expected.getTags(), result.getTags());
|
||||
Assert.assertEquals(expectedSize, result.getSize());
|
||||
Assert.assertEquals(imageFormat.name(), result.getVolumeFormat());
|
||||
|
||||
validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", "diskOffering", "provisioningType", "storage", "tags", "size"), result);
|
||||
validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", "diskOffering", "provisioningType", "storage", "tags", "size", "volumeFormat"), result);
|
||||
}
|
||||
|
||||
Mockito.verify(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.eq(ResourceObjectType.Volume));
|
||||
Mockito.verify(presetVariableHelperSpy, Mockito.times(ImageFormat.values().length)).getPresetVariableValueResourceTags(Mockito.anyLong(),
|
||||
Mockito.eq(ResourceObjectType.Volume));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void loadPresetVariableValueForVolumeTestRecordIsVolumeAndDoesNotHaveStorageSetFields() {
|
||||
for (ImageFormat imageFormat : ImageFormat.values()) {
|
||||
Value expected = getValueForTests();
|
||||
|
||||
VolumeVO volumeVoMock = Mockito.mock(VolumeVO.class);
|
||||
@ -687,6 +699,7 @@ public class PresetVariableHelperTest {
|
||||
Mockito.doReturn(expected.getProvisioningType()).when(volumeVoMock).getProvisioningType();
|
||||
Mockito.doReturn(expected.getTags()).when(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.any(ResourceObjectType.class));
|
||||
Mockito.doReturn(expected.getSize()).when(volumeVoMock).getSize();
|
||||
Mockito.doReturn(imageFormat).when(volumeVoMock).getFormat();
|
||||
|
||||
Mockito.doReturn(UsageTypes.VOLUME).when(usageVoMock).getUsageType();
|
||||
|
||||
@ -698,13 +711,16 @@ public class PresetVariableHelperTest {
|
||||
assertPresetVariableIdAndName(expected, result);
|
||||
Assert.assertEquals(expected.getDiskOffering(), result.getDiskOffering());
|
||||
Assert.assertEquals(expected.getProvisioningType(), result.getProvisioningType());
|
||||
Assert.assertEquals(null, result.getStorage());
|
||||
Assert.assertNull(result.getStorage());
|
||||
Assert.assertEquals(expected.getTags(), result.getTags());
|
||||
Assert.assertEquals(expectedSize, result.getSize());
|
||||
Assert.assertEquals(imageFormat.name(), result.getVolumeFormat());
|
||||
|
||||
validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", "diskOffering", "provisioningType", "tags", "size"), result);
|
||||
validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", "diskOffering", "provisioningType", "tags", "size", "volumeFormat"), result);
|
||||
}
|
||||
|
||||
Mockito.verify(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.eq(ResourceObjectType.Volume));
|
||||
Mockito.verify(presetVariableHelperSpy, Mockito.times(ImageFormat.values().length)).getPresetVariableValueResourceTags(Mockito.anyLong(),
|
||||
Mockito.eq(ResourceObjectType.Volume));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -852,6 +868,7 @@ public class PresetVariableHelperTest {
|
||||
|
||||
@Test
|
||||
public void loadPresetVariableValueForSnapshotTestRecordIsSnapshotSetFields() {
|
||||
for (Hypervisor.HypervisorType hypervisorType : Hypervisor.HypervisorType.values()) {
|
||||
Value expected = getValueForTests();
|
||||
|
||||
SnapshotVO snapshotVoMock = Mockito.mock(SnapshotVO.class);
|
||||
@ -866,6 +883,7 @@ public class PresetVariableHelperTest {
|
||||
Mockito.doReturn(1l).when(presetVariableHelperSpy).getSnapshotDataStoreId(Mockito.anyLong(), Mockito.anyLong());
|
||||
Mockito.doReturn(expected.getStorage()).when(presetVariableHelperSpy).getPresetVariableValueStorage(Mockito.anyLong(), Mockito.anyInt());
|
||||
Mockito.doReturn(expected.getTags()).when(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.any(ResourceObjectType.class));
|
||||
Mockito.doReturn(hypervisorType).when(snapshotVoMock).getHypervisorType();
|
||||
|
||||
Mockito.doReturn(UsageTypes.SNAPSHOT).when(usageVoMock).getUsageType();
|
||||
|
||||
@ -879,10 +897,13 @@ public class PresetVariableHelperTest {
|
||||
Assert.assertEquals(expected.getStorage(), result.getStorage());
|
||||
Assert.assertEquals(expected.getTags(), result.getTags());
|
||||
Assert.assertEquals(expectedSize, result.getSize());
|
||||
Assert.assertEquals(hypervisorType.name(), result.getHypervisorType());
|
||||
|
||||
validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", "snapshotType", "storage", "tags", "size"), result);
|
||||
validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", "snapshotType", "storage", "tags", "size", "hypervisorType"), result);
|
||||
}
|
||||
|
||||
Mockito.verify(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.eq(ResourceObjectType.Snapshot));
|
||||
Mockito.verify(presetVariableHelperSpy, Mockito.times(Hypervisor.HypervisorType.values().length)).getPresetVariableValueResourceTags(Mockito.anyLong(),
|
||||
Mockito.eq(ResourceObjectType.Snapshot));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -136,4 +136,18 @@ public class ValueTest {
|
||||
variable.setBackupOffering(null);
|
||||
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("backupOffering"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setHypervisorTypeTestAddFieldHypervisorTypeToCollection() {
|
||||
Value variable = new Value();
|
||||
variable.setHypervisorType(null);
|
||||
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("hypervisorType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setVolumeFormatTestAddFieldVolumeFormatToCollection() {
|
||||
Value variable = new Value();
|
||||
variable.setVolumeFormat(null);
|
||||
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("volumeFormat"));
|
||||
}
|
||||
}
|
||||
|
||||
@ -78,7 +78,7 @@ public class JsInterpreter implements Closeable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the parameters to a Map that will be converted to JS variables right before executing the scripts..
|
||||
* Adds the parameters to a Map that will be converted to JS variables right before executing the script.
|
||||
* @param key The name of the variable.
|
||||
* @param value The value of the variable.
|
||||
*/
|
||||
@ -87,6 +87,21 @@ public class JsInterpreter implements Closeable {
|
||||
variables.put(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the parameter, surrounded by double quotes, to a Map that will be converted to a JS variable right before executing the script.
|
||||
* @param key The name of the variable.
|
||||
* @param value The value of the variable.
|
||||
*/
|
||||
public void injectStringVariable(String key, String value) {
|
||||
if (value == null) {
|
||||
logger.trace(String.format("Not injecting [%s] because its value is null.", key));
|
||||
return;
|
||||
}
|
||||
value = String.format("\"%s\"", value);
|
||||
logger.trace(String.format(injectingLogMessage, key, value));
|
||||
variables.put(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Injects the variables to the script and execute it.
|
||||
* @param script Code to be executed.
|
||||
|
||||
@ -179,4 +179,22 @@ public class JsInterpreterTest {
|
||||
Assert.assertEquals(scriptEngineMock, jsInterpreterSpy.interpreter);
|
||||
Mockito.verify(nashornScriptEngineFactoryMock).getScriptEngine("--no-java");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void injectStringVariableTestNullValueDoNothing() {
|
||||
jsInterpreterSpy.variables = new LinkedHashMap<>();
|
||||
|
||||
jsInterpreterSpy.injectStringVariable("a", null);
|
||||
|
||||
Assert.assertTrue(jsInterpreterSpy.variables.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void injectStringVariableTestNotNullValueSurroundWithDoubleQuotes() {
|
||||
jsInterpreterSpy.variables = new LinkedHashMap<>();
|
||||
|
||||
jsInterpreterSpy.injectStringVariable("a", "b");
|
||||
|
||||
Assert.assertEquals(jsInterpreterSpy.variables.get("a"), "\"b\"");
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user