Commit 90df0ed0 authored by Spiros Koulouzis's avatar Spiros Koulouzis

Merge origin/package into package

parents fb608589 a984715a
...@@ -49,9 +49,9 @@ def handleDelivery(message): ...@@ -49,9 +49,9 @@ def handleDelivery(message):
for j in json1: for j in json1:
if not json1[j]['type'] == "Switch.nodes.Application.Connection": if not json1[j]['type'] == "Switch.nodes.Application.Connection":
print j, json1[j] print j, json1[j]
nodeDic[j] = i nodeDic[j] = i
nodeDic1[i] = j nodeDic1[i] = j
i = i + 1 i = i + 1
#get the links from the json #get the links from the json
links = [] links = []
...@@ -105,8 +105,10 @@ def handleDelivery(message): ...@@ -105,8 +105,10 @@ def handleDelivery(message):
# convert the json to the file required # convert the json to the file required
res1 = {} res1 = {}
for key, value in sorted_nodeDic: for key, value in sorted_nodeDic:
print value, res[str(value)] res1_value = {}
res1[nodeDic1[value]] = res[str(value)] res1_value["size"] = res[str(value)]
res1_value["docker"] = json1[nodeDic1[value]].get('artifacts').get('docker_image').get('file')
res1[str(nodeDic1[value])] = res1_value
print res1 print res1
# generate the json files in the corresponding format as the # generate the json files in the corresponding format as the
outcontent = {} outcontent = {}
......
...@@ -33,7 +33,7 @@ def main(argv): ...@@ -33,7 +33,7 @@ def main(argv):
SDI_file = arg SDI_file = arg
data = {} data = {}
print workflow_file #print workflow_file
with open(workflow_file) as data_file: with open(workflow_file) as data_file:
data = json.load(data_file) data = json.load(data_file)
#print data #print data
...@@ -58,13 +58,14 @@ def main(argv): ...@@ -58,13 +58,14 @@ def main(argv):
#get the nodes from the json #get the nodes from the json
nodeDic = {} nodeDic = {}
nodeDic1 = {} nodeDic1 = {}
i = 1 i = 1
for j in json1: for j in json1:
if not json1[j]['type'] == "Switch.nodes.Application.Connection": if not json1[j]['type'] == "Switch.nodes.Application.Connection":
print j, json1[j] print j, json1[j]
nodeDic[j] = i nodeDic[j] = i
nodeDic1[i] = j nodeDic1[i] = j
i = i + 1 i = i + 1
#get the links from the json #get the links from the json
links = [] links = []
...@@ -118,7 +119,11 @@ def main(argv): ...@@ -118,7 +119,11 @@ def main(argv):
res1 = {} res1 = {}
for key, value in sorted_nodeDic: for key, value in sorted_nodeDic:
print value, res[str(value)] print value, res[str(value)]
res1[nodeDic1[value]] = res[str(value)]
res1_value = {}
res1_value["size"] = res[str(value)]
res1_value["docker"] = json1[nodeDic1[value]].get('artifacts').get('docker_image').get('file')
res1[str(nodeDic1[value])] = res1_value
print res1 print res1
# generate the json files in the corresponding format as the # generate the json files in the corresponding format as the
outcontent = {} outcontent = {}
...@@ -130,6 +135,7 @@ def main(argv): ...@@ -130,6 +135,7 @@ def main(argv):
par1["value"] = res1 par1["value"] = res1
par1["attributes"] = "null" par1["attributes"] = "null"
outcontent["parameters"].append(par1) outcontent["parameters"].append(par1)
#print outcontent
return outcontent return outcontent
......
{
"creationDate": 1488459287833,
"parameters": [
{
"url": null,
"attributes": null,
"value": [
{
"name": "2d13d708e3a9441ab8336ce874e08dd1",
"size": "Small",
"docker": "mogswitch/InputDistributor"
},
{
"name": "8fcc1788d9ee462c826572c79fdb2a6a",
"size": "Small",
"docker": "mogswitch/InputDistributor"
},
{
"name": "5e0add703c8a43938a39301f572e46c0",
"size": "Small",
"docker": "mogswitch/InputDistributor"
}
],
"encoding": "UTF-8"
}
]
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>nl.uva.sne.drip</groupId>
<artifactId>drip-planner2provisioner</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<!--mvn clean compile assembly:single-->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass></mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import plannerOut.Parameter;
import plannerOut.PlannerOutput;
import plannerOut.Value;
import provisionerIn.Eth;
import provisionerIn.SubTopology;
import provisionerIn.SubTopologyInfo;
import provisionerIn.Subnet;
import provisionerIn.TopTopology;
import provisionerIn.VM;
public class P2PConverter {
public static SimplePlanContainer transfer(String plannerOutputJson, String userName, String OStype, String clusterType) throws JsonParseException, JsonMappingException, IOException{
Parameter plannerOutput = getInfoFromPlanner(plannerOutputJson);
TopTopology topTopology = new TopTopology();
SubTopology subTopology = new SubTopology();
SubTopologyInfo sti = new SubTopologyInfo();
sti.cloudProvider = "EC2";
sti.topology = UUID.randomUUID().toString();
subTopology.publicKeyPath = null;
subTopology.userName = userName;
Subnet s = new Subnet();
s.name = "s1";
s.subnet = "192.168.10.0";
s.netmask = "255.255.255.0";
subTopology.subnets = new ArrayList<Subnet>();
subTopology.subnets.add(s);
subTopology.components = new ArrayList<VM>();
boolean firstVM = true;
for(int vi = 0 ; vi < plannerOutput.value.size() ; vi++){
Value curValue = plannerOutput.value.get(vi);
VM curVM = new VM();
curVM.name = curValue.name;
curVM.type = "Switch.nodes.Compute";
curVM.OStype = OStype;
curVM.domain = "ec2.us-east-1.amazonaws.com";
curVM.clusterType = clusterType;
curVM.dockers = curValue.docker;
curVM.public_address = curValue.name;
if(curValue.size.trim().toLowerCase().equals("small"))
curVM.nodeType = "t2.small";
else if(curValue.size.trim().toLowerCase().equals("medium"))
curVM.nodeType = "t2.medium";
else if(curValue.size.trim().toLowerCase().equals("large"))
curVM.nodeType = "t2.large";
else{
throw new IllegalArgumentException("Invalid value for field 'size' in input JSON String");
}
Eth eth = new Eth();
eth.name = "p1";
eth.subnet_name = "s1";
int hostNum = 10+vi;
String priAddress = "192.168.10."+hostNum;
eth.address = priAddress;
curVM.ethernet_port = new ArrayList<Eth>();
curVM.ethernet_port.add(eth);
if(firstVM){
curVM.role = "master";
firstVM = false;
}else
curVM.role = "slave";
subTopology.components.add(curVM);
}
sti.subTopology = subTopology;
topTopology.topologies = new ArrayList<SubTopologyInfo>();
topTopology.topologies.add(sti);
SimplePlanContainer spc = generateInfo(topTopology);
return spc;
}
private static Parameter getInfoFromPlanner(String json) throws JsonParseException, JsonMappingException, IOException{
ObjectMapper mapper = new ObjectMapper();
PlannerOutput po = mapper.readValue(json, PlannerOutput.class);
System.out.println("");
return po.parameters.get(0);
}
private static SimplePlanContainer generateInfo(TopTopology topTopology) throws JsonProcessingException{
SimplePlanContainer spc = new SimplePlanContainer();
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
String yamlString = mapper.writeValueAsString(topTopology);
spc.topLevelContents = yamlString.substring(4);
Map<String, String> output = new HashMap<String, String>();
for(int i = 0 ; i<topTopology.topologies.size() ; i++){
String key = topTopology.topologies.get(i).topology;
String value = mapper.writeValueAsString(topTopology.topologies.get(i).subTopology);
output.put(key, value.substring(4));
}
spc.lowerLevelContents = output;
return spc;
}
}
import java.util.Map;
public class SimplePlanContainer {
public String topLevelContents;
public Map<String, String> lowerLevelContents;
}
package plannerOut;
import java.util.ArrayList;
public class Parameter {
public String url;
public String attributes;
public ArrayList<Value> value;
public String encoding;
}
package plannerOut;
import java.util.ArrayList;
public class PlannerOutput {
public String creationDate;
public ArrayList<Parameter> parameters;
}
package plannerOut;
public class Value {
public String name;
public String size;
public String docker;
}
package provisionerIn;
public class Eth {
public String name;
public String subnet_name;
public String address;
}
package provisionerIn;
import java.util.ArrayList;
public class SubTopology {
public String publicKeyPath;
public String userName;
//Indicate a subnet that several can be put in.
public ArrayList<Subnet> subnets;
public ArrayList<VM> components;
}
package provisionerIn;
import com.fasterxml.jackson.annotation.JsonIgnore;
public class SubTopologyInfo {
//The name of the topology. It is also the file name of the low level description.
public String topology;
//Currently, only support "EC2" and "ExoGENI"/"GENI". This is not case sensitive.
public String cloudProvider;
//Point to the detailed description of the sub-topology.
@JsonIgnore
public SubTopology subTopology;
}
package provisionerIn;
public class Subnet {
//The name of the subnet. Two subnets cannot have same name in one subnet.
public String name;
public String subnet;
public String netmask;
}
package provisionerIn;
import java.util.ArrayList;
public class TopTopology {
public ArrayList<SubTopologyInfo> topologies;
}
package provisionerIn;
import java.util.ArrayList;
public class VM {
public String name;
public String type;
public String nodeType;
public String OStype;
//Currently, the SIDE subsystem uses this field for GUI.
public String script;
public String domain;
public String installation;
public String clusterType;
//The role of this node in docker cluster.
//The possible value can only be "null", "slave" and "master".
//This is not case sensitive.
public String role;
//The name of the docker in repository, which can be "null".
public String dockers;
//Do not need to be the same with the node name any more.
//The initial value should be "null", which means the public is not determined.
//When the status of the sub-topology is stopped, deleted or failed, this field should also be "null".
public String public_address;
public ArrayList<Eth> ethernet_port;
}
import java.io.File;
import java.io.IOException;
import java.util.Map;
import org.apache.commons.io.FileUtils;
public class testConverter {
public static void main(String[] args) {
File jsonFile = new File("input.json");
String json = "";
try {
json = FileUtils.readFileToString(jsonFile, "UTF-8");
} catch (IOException e1) {
e1.printStackTrace();
}
try {
SimplePlanContainer spc = P2PConverter.transfer(json, "zh9314", "Ubuntu 16.04", "kubernetes");
System.out.println("--topLevel:\n"+spc.topLevelContents);
System.out.println("--lowLevel:");
for (Map.Entry<String, String> entry : spc.lowerLevelContents.entrySet()){
System.out.println(entry.getKey()+":\n"+entry.getValue());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
...@@ -2,16 +2,57 @@ ...@@ -2,16 +2,57 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>nl.uva.sne.drip</groupId> <groupId>nl.uva.sne.drip</groupId>
<artifactId>drip</artifactId> <artifactId>drip-planner2provisioner</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
<packaging>pom</packaging> <packaging>jar</packaging>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties> </properties>
<modules>
<module>drip-api</module> <dependencies>
<module>drip-commons</module>
<module>drip-simple_planner</module> <dependency>
<module>drip-provisioner</module> <groupId>com.fasterxml.jackson.dataformat</groupId>
</modules> <artifactId>jackson-dataformat-yaml</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<!--mvn clean compile assembly:single-->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass></mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project> </project>
\ No newline at end of file
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