Commit 46ef9c49 authored by Spiros Koulouzis's avatar Spiros Koulouzis

try to match VM types

parent b17d26c0
...@@ -13,7 +13,7 @@ topology_template: ...@@ -13,7 +13,7 @@ topology_template:
disk_size: 50000 MB disk_size: 50000 MB
mem_size: 6000 MB mem_size: 6000 MB
num_cores: 2 num_cores: 2
os: ubuntu 16 os: ubuntu 16.04
type: tosca.nodes.ARTICONF.VM.Compute type: tosca.nodes.ARTICONF.VM.Compute
compute_1: compute_1:
interfaces: interfaces:
...@@ -23,7 +23,7 @@ topology_template: ...@@ -23,7 +23,7 @@ topology_template:
disk_size: 50000 MB disk_size: 50000 MB
mem_size: 6000 MB mem_size: 6000 MB
num_cores: 2 num_cores: 2
os: ubuntu 16 os: ubuntu 16.04
type: tosca.nodes.ARTICONF.VM.Compute type: tosca.nodes.ARTICONF.VM.Compute
compute_2: compute_2:
interfaces: interfaces:
...@@ -33,7 +33,7 @@ topology_template: ...@@ -33,7 +33,7 @@ topology_template:
disk_size: 50000 MB disk_size: 50000 MB
mem_size: 6000 MB mem_size: 6000 MB
num_cores: 2 num_cores: 2
os: ubuntu 16 os: ubuntu 16.04.04
type: tosca.nodes.ARTICONF.VM.Compute type: tosca.nodes.ARTICONF.VM.Compute
kubernetes: kubernetes:
interfaces: interfaces:
......
...@@ -44,7 +44,7 @@ topology_template: ...@@ -44,7 +44,7 @@ topology_template:
required: true required: true
type: integer type: integer
os: os:
default: ubuntu 16 default: ubuntu 16.04
required: true required: true
type: string type: string
private_ip: private_ip:
...@@ -74,7 +74,7 @@ topology_template: ...@@ -74,7 +74,7 @@ topology_template:
host_name: vm host_name: vm
mem_size: 6000 MB mem_size: 6000 MB
num_cores: 2 num_cores: 2
os: ubuntu 16 os: ubuntu 16.04
role: worker role: worker
user_name: vm_user user_name: vm_user
type: tosca.nodes.ARTICONF.VM.Compute type: tosca.nodes.ARTICONF.VM.Compute
...@@ -87,7 +87,7 @@ topology_template: ...@@ -87,7 +87,7 @@ topology_template:
host_name: vm host_name: vm
mem_size: 6000 MB mem_size: 6000 MB
num_cores: 2 num_cores: 2
os: ubuntu 16 os: ubuntu 16.04
role: worker role: worker
user_name: vm_user user_name: vm_user
type: tosca.nodes.ARTICONF.VM.Compute type: tosca.nodes.ARTICONF.VM.Compute
......
...@@ -42,6 +42,10 @@ public class ToscaHelper { ...@@ -42,6 +42,10 @@ public class ToscaHelper {
private final ObjectMapper objectMapper; private final ObjectMapper objectMapper;
public static final String VM_CAPABILITY = "tosca.capabilities.ARTICONF.VM"; public static final String VM_CAPABILITY = "tosca.capabilities.ARTICONF.VM";
private static final String VM_TYPE = "tosca.nodes.ARTICONF.VM.Compute";
private static final String VM_NUM_OF_CORES = "num_cores";
private static final String MEM_SIZE = "mem_size";
private static final String VM_OS = "os";
/** /**
* @return the id * @return the id
...@@ -101,4 +105,47 @@ public class ToscaHelper { ...@@ -101,4 +105,47 @@ public class ToscaHelper {
} }
public Double getVMNumOfCores(NodeTemplate vm) throws Exception {
if (vm.getType().equals(VM_TYPE)) {
return (Double) vm.getProperties().get(VM_NUM_OF_CORES);
} else {
throw new Exception("NodeTemplate is not of type: " + VM_TYPE + " it is of type: " + vm.getType());
}
}
public Double getVMNMemSize(NodeTemplate vm) throws Exception {
if (vm.getType().equals(VM_TYPE)) {
String memScalar = (String) vm.getProperties().get(MEM_SIZE);
String[] memScalarArray = memScalar.split(" ");
String memSize = memScalarArray[0];
String memUnit = memScalarArray[1];
Double memSizeInGB = convertToGB(Integer.valueOf(memSize), memUnit);
return memSizeInGB;
} else {
throw new Exception("NodeTemplate is not of type: " + VM_TYPE + " it is of type: " + vm.getType());
}
}
public String getVMNOS(NodeTemplate vm) throws Exception {
if (vm.getType().equals(VM_TYPE)) {
return (String) vm.getProperties().get(VM_OS);
} else {
throw new Exception("NodeTemplate is not of type: " + VM_TYPE + " it is of type: " + vm.getType());
}
}
private Double convertToGB(Integer value, String memUnit) {
switch (memUnit) {
case "GB":
return Double.valueOf(value);
case "MB":
return value * 0.001;
case "KB":
return value * 0.000001;
default:
return null;
}
}
} }
...@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; ...@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonCreator;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import nl.uva.sne.drip.model.cloud.storm.DCMetaInfo; import nl.uva.sne.drip.model.cloud.storm.DCMetaInfo;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import javax.validation.Valid; import javax.validation.Valid;
...@@ -16,93 +17,95 @@ import javax.validation.constraints.*; ...@@ -16,93 +17,95 @@ import javax.validation.constraints.*;
@Validated @Validated
@javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "2019-12-11T15:13:55.016Z") @javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "2019-12-11T15:13:55.016Z")
public class DBInfo { public class DBInfo {
@JsonProperty("GlobalEntry")
private String globalEntry = null;
@JsonProperty("DCMetaInfo") @JsonProperty("GlobalEntry")
private DCMetaInfo dcMetaInfo = null; private String globalEntry = null;
public DBInfo globalEntry(String globalEntry) { @JsonProperty("DCMetaInfo")
this.globalEntry = globalEntry; private List<DCMetaInfo> dcMetaInfo = null;
return this;
}
/** public DBInfo globalEntry(String globalEntry) {
* Get globalEntry this.globalEntry = globalEntry;
* @return globalEntry return this;
**/ }
@ApiModelProperty(value = "")
/**
* Get globalEntry
*
* @return globalEntry
*
*/
@ApiModelProperty(value = "")
public String getGlobalEntry() { public String getGlobalEntry() {
return globalEntry; return globalEntry;
} }
public void setGlobalEntry(String globalEntry) { public void setGlobalEntry(String globalEntry) {
this.globalEntry = globalEntry; this.globalEntry = globalEntry;
} }
public DBInfo dcMetaInfo(DCMetaInfo dcMetaInfo) { public DBInfo dcMetaInfo(List<DCMetaInfo> dcMetaInfo) {
this.dcMetaInfo = dcMetaInfo; this.dcMetaInfo = dcMetaInfo;
return this; return this;
} }
/** /**
* Get dcMetaInfo * Get dcMetaInfo
* @return dcMetaInfo *
**/ * @return dcMetaInfo
@ApiModelProperty(value = "") *
*/
@ApiModelProperty(value = "")
@Valid @Valid
public DCMetaInfo getDcMetaInfo() { public List<DCMetaInfo> getDcMetaInfo() {
return dcMetaInfo; return dcMetaInfo;
} }
public void setDcMetaInfo(DCMetaInfo dcMetaInfo) { public void setDcMetaInfo(List<DCMetaInfo> dcMetaInfo) {
this.dcMetaInfo = dcMetaInfo; this.dcMetaInfo = dcMetaInfo;
} }
@Override
public boolean equals(java.lang.Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
DBInfo dbInfo = (DBInfo) o;
return Objects.equals(this.globalEntry, dbInfo.globalEntry)
&& Objects.equals(this.dcMetaInfo, dbInfo.dcMetaInfo);
}
@Override @Override
public boolean equals(java.lang.Object o) { public int hashCode() {
if (this == o) { return Objects.hash(globalEntry, dcMetaInfo);
return true;
} }
if (o == null || getClass() != o.getClass()) {
return false; @Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class DBInfo {\n");
sb.append(" globalEntry: ").append(toIndentedString(globalEntry)).append("\n");
sb.append(" dcMetaInfo: ").append(toIndentedString(dcMetaInfo)).append("\n");
sb.append("}");
return sb.toString();
} }
DBInfo dbInfo = (DBInfo) o;
return Objects.equals(this.globalEntry, dbInfo.globalEntry) && /**
Objects.equals(this.dcMetaInfo, dbInfo.dcMetaInfo); * Convert the given object to string with each line indented by 4 spaces
} * (except the first line).
*/
@Override private String toIndentedString(java.lang.Object o) {
public int hashCode() { if (o == null) {
return Objects.hash(globalEntry, dcMetaInfo); return "null";
} }
return o.toString().replace("\n", "\n ");
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class DBInfo {\n");
sb.append(" globalEntry: ").append(toIndentedString(globalEntry)).append("\n");
sb.append(" dcMetaInfo: ").append(toIndentedString(dcMetaInfo)).append("\n");
sb.append("}");
return sb.toString();
}
/**
* Convert the given object to string with each line indented by 4 spaces
* (except the first line).
*/
private String toIndentedString(java.lang.Object o) {
if (o == null) {
return "null";
} }
return o.toString().replace("\n", "\n ");
}
} }
...@@ -19,8 +19,25 @@ import javax.validation.constraints.*; ...@@ -19,8 +19,25 @@ import javax.validation.constraints.*;
@javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "2019-12-11T15:13:55.016Z") @javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "2019-12-11T15:13:55.016Z")
public class VMMetaInfo { public class VMMetaInfo {
/**
* @return the vmType
*/
public String getVmType() {
return vmType;
}
/**
* @param vmType the vmType to set
*/
public void setVmType(String vmType) {
this.vmType = vmType;
}
@JsonProperty("OS") @JsonProperty("OS")
private String OS = null; private String OS = null;
@JsonProperty("VMType")
private String vmType = null;
@JsonProperty("CPU") @JsonProperty("CPU")
private String CPU = null; private String CPU = null;
......
...@@ -11,10 +11,14 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; ...@@ -11,10 +11,14 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator; import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import nl.uva.sne.drip.model.cloud.storm.CloudDB; import nl.uva.sne.drip.model.cloud.storm.CloudDB;
import nl.uva.sne.drip.model.cloud.storm.DB; import nl.uva.sne.drip.model.cloud.storm.DB;
import nl.uva.sne.drip.model.cloud.storm.DBInfo; import nl.uva.sne.drip.model.cloud.storm.DBInfo;
import nl.uva.sne.drip.model.cloud.storm.DCMetaInfo;
import nl.uva.sne.drip.model.cloud.storm.VMMetaInfo; import nl.uva.sne.drip.model.cloud.storm.VMMetaInfo;
/** /**
...@@ -32,7 +36,8 @@ class CloudStormDAO { ...@@ -32,7 +36,8 @@ class CloudStormDAO {
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
} }
VMMetaInfo findVmMetaInfoByProvider(String provider) throws IOException { List<VMMetaInfo> findVmMetaInfoByProvider(String provider) throws IOException {
DB db = objectMapper.readValue(new File(cloudStormDBPath + File.separator + "db.yml"), DB.class); DB db = objectMapper.readValue(new File(cloudStormDBPath + File.separator + "db.yml"), DB.class);
List<CloudDB> cloudDBs = db.getCloudDBs(); List<CloudDB> cloudDBs = db.getCloudDBs();
...@@ -44,10 +49,18 @@ class CloudStormDAO { ...@@ -44,10 +49,18 @@ class CloudStormDAO {
} }
} }
if (targetCloudDB != null) { if (targetCloudDB != null) {
List<VMMetaInfo> vMMetaInfos = new ArrayList<>();
DBInfo dbInfo = objectMapper.readValue(new File(cloudStormDBPath + File.separator + targetCloudDB.getDbInfoFile()), DBInfo.class); DBInfo dbInfo = objectMapper.readValue(new File(cloudStormDBPath + File.separator + targetCloudDB.getDbInfoFile()), DBInfo.class);
return dbInfo.getDcMetaInfo().getVmMetaInfo(); List<DCMetaInfo> metaInfos = dbInfo.getDcMetaInfo();
for (DCMetaInfo metaInfo : metaInfos) {
vMMetaInfos.addAll(metaInfo.getVmMetaInfo());
}
return vMMetaInfos;
} }
return null; return null;
} }
} }
...@@ -15,6 +15,7 @@ import java.io.IOException; ...@@ -15,6 +15,7 @@ import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.Properties; import java.util.Properties;
import nl.uva.sne.drip.commons.utils.ToscaHelper; import nl.uva.sne.drip.commons.utils.ToscaHelper;
import nl.uva.sne.drip.model.cloud.storm.CloudsStormVM; import nl.uva.sne.drip.model.cloud.storm.CloudsStormVM;
...@@ -46,7 +47,7 @@ class CloudStormService { ...@@ -46,7 +47,7 @@ class CloudStormService {
this.helper = new ToscaHelper(toscaTemplate, sureToscaBasePath); this.helper = new ToscaHelper(toscaTemplate, sureToscaBasePath);
} }
public ToscaTemplate execute() throws FileNotFoundException, JSchException, IOException, ApiException { public ToscaTemplate execute() throws FileNotFoundException, JSchException, IOException, ApiException, Exception {
tempInputDirPath = System.getProperty("java.io.tmpdir") + File.separator + "Input-" + Long.toString(System.nanoTime()) + File.separator; tempInputDirPath = System.getProperty("java.io.tmpdir") + File.separator + "Input-" + Long.toString(System.nanoTime()) + File.separator;
File tempInputDir = new File(tempInputDirPath); File tempInputDir = new File(tempInputDirPath);
if (!(tempInputDir.mkdirs())) { if (!(tempInputDir.mkdirs())) {
...@@ -58,7 +59,7 @@ class CloudStormService { ...@@ -58,7 +59,7 @@ class CloudStormService {
return toscaTemplate; return toscaTemplate;
} }
private CloudsStormTopTopology buildCloudStormTopTopology(ToscaTemplate toscaTemplate) throws JSchException, IOException, ApiException { private CloudsStormTopTopology buildCloudStormTopTopology(ToscaTemplate toscaTemplate) throws JSchException, IOException, ApiException, Exception {
CloudsStormTopTopology topTopology = new CloudsStormTopTopology(); CloudsStormTopTopology topTopology = new CloudsStormTopTopology();
String publicKeyPath = buildSSHKeyPair(); String publicKeyPath = buildSSHKeyPair();
topTopology.setPublicKeyPath(publicKeyPath); topTopology.setPublicKeyPath(publicKeyPath);
...@@ -86,7 +87,7 @@ class CloudStormService { ...@@ -86,7 +87,7 @@ class CloudStormService {
return "vm_user"; return "vm_user";
} }
private List<CloudsStormSubTopology> getCloudsStormSubTopologies(ToscaTemplate toscaTemplate) throws ApiException, IOException { private List<CloudsStormSubTopology> getCloudsStormSubTopologies(ToscaTemplate toscaTemplate) throws ApiException, IOException, Exception {
List<NodeTemplate> vmTopologyTemplates = helper.getVMTopologyTemplates(); List<NodeTemplate> vmTopologyTemplates = helper.getVMTopologyTemplates();
List<CloudsStormSubTopology> cloudsStormSubTopologies = new ArrayList<>(); List<CloudsStormSubTopology> cloudsStormSubTopologies = new ArrayList<>();
int i = 0; int i = 0;
...@@ -115,15 +116,20 @@ class CloudStormService { ...@@ -115,15 +116,20 @@ class CloudStormService {
return cloudsStormSubTopologies; return cloudsStormSubTopologies;
} }
private String getVMType(NodeTemplate vm, String provider) throws IOException { private String getVMType(NodeTemplate vm, String provider) throws IOException, Exception {
VMMetaInfo vmInfo = cloudStormDAO.findVmMetaInfoByProvider(provider); Double numOfCores = helper.getVMNumOfCores(vm);
String cpu = vmInfo.getCPU(); Double memSize = helper.getVMNMemSize(vm);
String mem = vmInfo.getMEM(); String os = helper.getVMNOS(vm);
vmInfo.get List<VMMetaInfo> vmInfos = cloudStormDAO.findVmMetaInfoByProvider(provider);
int numOfCores = helper.getVMNumOfCores(vm); for (VMMetaInfo vmInfo : vmInfos) {
int memSize = helper.getVMNMemSize(vm); System.err.println("numOfCores: " + numOfCores + " = " + vmInfo.getCPU());
System.err.println("memSize: " + numOfCores + " = " + vmInfo.getMEM());
System.err.println("os: " + os + " = " + vmInfo.getOS());
if (Objects.equals(numOfCores, Double.valueOf(vmInfo.getCPU())) && Objects.equals(memSize, Double.valueOf(vmInfo.getMEM())) && os.toLowerCase().equals(vmInfo.getOS().toLowerCase())) {
return vmInfo.getVmType();
}
}
return null; return null;
} }
......
...@@ -4,4 +4,6 @@ ...@@ -4,4 +4,6 @@
GlobalEntry: GlobalEntry:
type: "string" type: "string"
DCMetaInfo: DCMetaInfo:
$ref: "https://raw.githubusercontent.com/skoulouzis/CONF/DRIP_3.0/openAPI/schema/CloudStorm/DCMetaInfo.yml#/DCMetaInfo" type: "array"
items:
$ref: "https://raw.githubusercontent.com/skoulouzis/CONF/DRIP_3.0/openAPI/schema/CloudStorm/DCMetaInfo.yml#/DCMetaInfo"
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
type: "string" type: "string"
MEM: MEM:
type: "string" type: "string"
VMType:
type: "string"
Price: Price:
type: "string" type: "string"
DefaultSSHAccount: DefaultSSHAccount:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment