Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
CONF
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
UvA
CONF
Commits
2a9b1fb1
Commit
2a9b1fb1
authored
Jan 12, 2020
by
Spiros Koulouzis
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
merge VMmetainfo with cloudstormVM
parent
9a0cdb1a
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
398 additions
and
490 deletions
+398
-490
nodes.yaml
TOSCA/types/nodes.yaml
+6
-0
CloudsStormSubTopology.java
...va/sne/drip/model/cloud/storm/CloudsStormSubTopology.java
+61
-41
CloudsStormTopTopology.java
...va/sne/drip/model/cloud/storm/CloudsStormTopTopology.java
+173
-150
CloudsStormVM.java
...java/nl/uva/sne/drip/model/cloud/storm/CloudsStormVM.java
+54
-0
CloudsStormVMs.java
...ava/nl/uva/sne/drip/model/cloud/storm/CloudsStormVMs.java
+5
-0
DCMetaInfo.java
...in/java/nl/uva/sne/drip/model/cloud/storm/DCMetaInfo.java
+12
-12
VMMetaInfo.java
...in/java/nl/uva/sne/drip/model/cloud/storm/VMMetaInfo.java
+0
-265
CloudStormDAO.java
.../main/java/nl/uva/sne/drip/provisioner/CloudStormDAO.java
+5
-8
CloudStormService.java
...n/java/nl/uva/sne/drip/provisioner/CloudStormService.java
+54
-8
CloudsStormSubTopology.yml
openAPI/schema/CloudStorm/CloudsStormSubTopology.yml
+1
-5
CloudsStormTopTopology.yml
openAPI/schema/CloudStorm/CloudsStormTopTopology.yml
+4
-0
CloudsStormVM.yml
openAPI/schema/CloudStorm/CloudsStormVM.yml
+22
-0
DCMetaInfo.yml
openAPI/schema/CloudStorm/DCMetaInfo.yml
+1
-1
No files found.
TOSCA/types/nodes.yaml
View file @
2a9b1fb1
...
...
@@ -196,6 +196,12 @@ node_types:
type
:
string
required
:
true
default
:
"
vm"
root_key_pair
:
type
:
tosca.datatypes.ARTICONF.Credential
required
:
false
user_key_pair
:
type
:
tosca.datatypes.ARTICONF.Credential
required
:
false
interfaces
:
Standard
:
create
:
dumy.yaml
...
...
drip-commons/src/main/java/nl/uva/sne/drip/model/cloud/storm/CloudsStormSubTopology.java
View file @
2a9b1fb1
...
...
@@ -4,17 +4,20 @@ import java.util.Objects;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
com.fasterxml.jackson.annotation.JsonCreator
;
import
com.fasterxml.jackson.annotation.JsonValue
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
org.springframework.validation.annotation.Validated
;
import
javax.validation.Valid
;
import
javax.validation.constraints.*
;
/**
* CloudsStormSubTopology
*/
@Validated
@javax
.
annotation
.
Generated
(
value
=
"io.swagger.codegen.languages.SpringCodegen"
,
date
=
"2020-01-12T17:
15:38.998
Z"
)
@javax
.
annotation
.
Generated
(
value
=
"io.swagger.codegen.languages.SpringCodegen"
,
date
=
"2020-01-12T17:
21:29.940
Z"
)
public
class
CloudsStormSubTopology
{
...
...
@@ -67,14 +70,16 @@ public class CloudsStormSubTopology {
@Valid
private
Map
<
String
,
Object
>
logsInfo
=
null
;
@JsonProperty
(
"subTopologyClass"
)
private
String
subTopologyClass
=
null
;
@JsonProperty
(
"sshKeyPairId"
)
private
String
sshKeyPairId
=
null
;
@JsonProperty
(
"scaledFrom"
)
@Valid
private
Map
<
String
,
Object
>
scaledFrom
=
null
;
@JsonProperty
(
"connections"
)
@Valid
private
Map
<
String
,
Object
>
connections
=
null
;
public
CloudsStormSubTopology
topology
(
String
topology
)
{
this
.
topology
=
topology
;
return
this
;
...
...
@@ -84,7 +89,7 @@ public class CloudsStormSubTopology {
* Get topology
*
* @return topology
*
*
*/
@ApiModelProperty
(
value
=
""
)
...
...
@@ -105,7 +110,7 @@ public class CloudsStormSubTopology {
* Get cloudProvider
*
* @return cloudProvider
*
*
*/
@ApiModelProperty
(
value
=
""
)
...
...
@@ -126,7 +131,7 @@ public class CloudsStormSubTopology {
* Get domain
*
* @return domain
*
*
*/
@ApiModelProperty
(
value
=
""
)
...
...
@@ -147,7 +152,7 @@ public class CloudsStormSubTopology {
* Get status
*
* @return status
*
*
*/
@ApiModelProperty
(
value
=
""
)
...
...
@@ -176,7 +181,7 @@ public class CloudsStormSubTopology {
* Get logsInfo
*
* @return logsInfo
*
*
*/
@ApiModelProperty
(
value
=
""
)
...
...
@@ -188,62 +193,75 @@ public class CloudsStormSubTopology {
this
.
logsInfo
=
logsInfo
;
}
public
CloudsStormSubTopology
s
caledFrom
(
Map
<
String
,
Object
>
scaledFrom
)
{
this
.
s
caledFrom
=
scaledFrom
;
public
CloudsStormSubTopology
s
ubTopologyClass
(
String
subTopologyClass
)
{
this
.
s
ubTopologyClass
=
subTopologyClass
;
return
this
;
}
public
CloudsStormSubTopology
putScaledFromItem
(
String
key
,
Object
scaledFromItem
)
{
if
(
this
.
scaledFrom
==
null
)
{
this
.
scaledFrom
=
new
HashMap
<
String
,
Object
>();
}
this
.
scaledFrom
.
put
(
key
,
scaledFromItem
);
/**
* Get subTopologyClass
*
* @return subTopologyClass
*
*/
@ApiModelProperty
(
value
=
""
)
public
String
getSubTopologyClass
()
{
return
subTopologyClass
;
}
public
void
setSubTopologyClass
(
String
subTopologyClass
)
{
this
.
subTopologyClass
=
subTopologyClass
;
}
public
CloudsStormSubTopology
sshKeyPairId
(
String
sshKeyPairId
)
{
this
.
sshKeyPairId
=
sshKeyPairId
;
return
this
;
}
/**
* Get scaledFrom
* Get sshKeyPairId
*
* @return sshKeyPairId
*
* @return scaledFrom
*
*/
@ApiModelProperty
(
value
=
""
)
public
Map
<
String
,
Object
>
getScaledFrom
()
{
return
s
caledFrom
;
public
String
getSshKeyPairId
()
{
return
s
shKeyPairId
;
}
public
void
setS
caledFrom
(
Map
<
String
,
Object
>
scaledFrom
)
{
this
.
s
caledFrom
=
scaledFrom
;
public
void
setS
shKeyPairId
(
String
sshKeyPairId
)
{
this
.
s
shKeyPairId
=
sshKeyPairId
;
}
public
CloudsStormSubTopology
connections
(
Map
<
String
,
Object
>
connections
)
{
this
.
connections
=
connections
;
public
CloudsStormSubTopology
scaledFrom
(
Map
<
String
,
Object
>
scaledFrom
)
{
this
.
scaledFrom
=
scaledFrom
;
return
this
;
}
public
CloudsStormSubTopology
put
ConnectionsItem
(
String
key
,
Object
connections
Item
)
{
if
(
this
.
connections
==
null
)
{
this
.
connections
=
new
HashMap
<
String
,
Object
>();
public
CloudsStormSubTopology
put
ScaledFromItem
(
String
key
,
Object
scaledFrom
Item
)
{
if
(
this
.
scaledFrom
==
null
)
{
this
.
scaledFrom
=
new
HashMap
<
String
,
Object
>();
}
this
.
connections
.
put
(
key
,
connections
Item
);
this
.
scaledFrom
.
put
(
key
,
scaledFrom
Item
);
return
this
;
}
/**
* Get connections
* Get scaledFrom
*
* @return scaledFrom
*
* @return connections
*
*/
@ApiModelProperty
(
value
=
""
)
public
Map
<
String
,
Object
>
get
Connections
()
{
return
connections
;
public
Map
<
String
,
Object
>
get
ScaledFrom
()
{
return
scaledFrom
;
}
public
void
set
Connections
(
Map
<
String
,
Object
>
connections
)
{
this
.
connections
=
connections
;
public
void
set
ScaledFrom
(
Map
<
String
,
Object
>
scaledFrom
)
{
this
.
scaledFrom
=
scaledFrom
;
}
@Override
...
...
@@ -260,13 +278,14 @@ public class CloudsStormSubTopology {
&&
Objects
.
equals
(
this
.
domain
,
cloudsStormSubTopology
.
domain
)
&&
Objects
.
equals
(
this
.
status
,
cloudsStormSubTopology
.
status
)
&&
Objects
.
equals
(
this
.
logsInfo
,
cloudsStormSubTopology
.
logsInfo
)
&&
Objects
.
equals
(
this
.
scaledFrom
,
cloudsStormSubTopology
.
scaledFrom
)
&&
Objects
.
equals
(
this
.
connections
,
cloudsStormSubTopology
.
connections
);
&&
Objects
.
equals
(
this
.
subTopologyClass
,
cloudsStormSubTopology
.
subTopologyClass
)
&&
Objects
.
equals
(
this
.
sshKeyPairId
,
cloudsStormSubTopology
.
sshKeyPairId
)
&&
Objects
.
equals
(
this
.
scaledFrom
,
cloudsStormSubTopology
.
scaledFrom
);
}
@Override
public
int
hashCode
()
{
return
Objects
.
hash
(
topology
,
cloudProvider
,
domain
,
status
,
logsInfo
,
s
caledFrom
,
connections
);
return
Objects
.
hash
(
topology
,
cloudProvider
,
domain
,
status
,
logsInfo
,
s
ubTopologyClass
,
sshKeyPairId
,
scaledFrom
);
}
@Override
...
...
@@ -279,8 +298,9 @@ public class CloudsStormSubTopology {
sb
.
append
(
" domain: "
).
append
(
toIndentedString
(
domain
)).
append
(
"\n"
);
sb
.
append
(
" status: "
).
append
(
toIndentedString
(
status
)).
append
(
"\n"
);
sb
.
append
(
" logsInfo: "
).
append
(
toIndentedString
(
logsInfo
)).
append
(
"\n"
);
sb
.
append
(
" subTopologyClass: "
).
append
(
toIndentedString
(
subTopologyClass
)).
append
(
"\n"
);
sb
.
append
(
" sshKeyPairId: "
).
append
(
toIndentedString
(
sshKeyPairId
)).
append
(
"\n"
);
sb
.
append
(
" scaledFrom: "
).
append
(
toIndentedString
(
scaledFrom
)).
append
(
"\n"
);
sb
.
append
(
" connections: "
).
append
(
toIndentedString
(
connections
)).
append
(
"\n"
);
sb
.
append
(
"}"
);
return
sb
.
toString
();
}
...
...
drip-commons/src/main/java/nl/uva/sne/drip/model/cloud/storm/CloudsStormTopTopology.java
View file @
2a9b1fb1
...
...
@@ -10,6 +10,7 @@ import nl.uva.sne.drip.model.cloud.storm.CloudsStormSubTopology;
import
nl.uva.sne.drip.model.cloud.storm.CloudsStormSubnets
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
org.springframework.validation.annotation.Validated
;
import
javax.validation.Valid
;
import
javax.validation.constraints.*
;
...
...
@@ -20,162 +21,184 @@ import javax.validation.constraints.*;
@Validated
@javax
.
annotation
.
Generated
(
value
=
"io.swagger.codegen.languages.SpringCodegen"
,
date
=
"2019-12-11T15:13:55.016Z"
)
@JsonInclude
(
JsonInclude
.
Include
.
NON_NULL
)
public
class
CloudsStormTopTopology
{
@JsonProperty
(
"userName"
)
private
String
userName
=
null
;
@JsonProperty
(
"publicKeyPath"
)
private
String
publicKeyPath
=
null
;
public
class
CloudsStormTopTopology
{
@JsonProperty
(
"topologies"
)
@Valid
private
List
<
CloudsStormSubTopology
>
topologies
=
null
;
/**
* @return the connections
*/
public
Map
<
String
,
Object
>
getConnections
()
{
return
connections
;
}
/**
* @param connections the connections to set
*/
public
void
setConnections
(
Map
<
String
,
Object
>
connections
)
{
this
.
connections
=
connections
;
}
@JsonProperty
(
"userName"
)
private
String
userName
=
null
;
@JsonProperty
(
"subnets"
)
@Valid
private
List
<
CloudsStormSubnets
>
subnets
=
null
;
@JsonProperty
(
"publicKeyPath"
)
private
String
publicKeyPath
=
null
;
public
CloudsStormTopTopology
userName
(
String
userName
)
{
this
.
userName
=
userName
;
return
this
;
}
@JsonProperty
(
"topologies"
)
@Valid
private
List
<
CloudsStormSubTopology
>
topologies
=
null
;
/**
* Get userName
* @return userName
**/
@ApiModelProperty
(
value
=
""
)
@JsonProperty
(
"subnets"
)
@Valid
private
List
<
CloudsStormSubnets
>
subnets
=
null
;
@JsonProperty
(
"connections"
)
@Valid
private
Map
<
String
,
Object
>
connections
=
null
;
public
String
getUserName
()
{
return
userName
;
}
public
CloudsStormTopTopology
userName
(
String
userName
)
{
this
.
userName
=
userName
;
return
this
;
}
public
void
setUserName
(
String
userName
)
{
this
.
userName
=
userName
;
}
/**
* Get userName
*
* @return userName
*
*/
@ApiModelProperty
(
value
=
""
)
public
CloudsStormTopTopology
publicKeyPath
(
String
publicKeyPath
)
{
this
.
publicKeyPath
=
publicKeyPath
;
return
this
;
}
/**
* Get publicKeyPath
* @return publicKeyPath
**/
@ApiModelProperty
(
value
=
""
)
public
String
getPublicKeyPath
()
{
return
publicKeyPath
;
}
public
void
setPublicKeyPath
(
String
publicKeyPath
)
{
this
.
publicKeyPath
=
publicKeyPath
;
}
public
CloudsStormTopTopology
topologies
(
List
<
CloudsStormSubTopology
>
topologies
)
{
this
.
topologies
=
topologies
;
return
this
;
}
public
CloudsStormTopTopology
addTopologiesItem
(
CloudsStormSubTopology
topologiesItem
)
{
if
(
this
.
topologies
==
null
)
{
this
.
topologies
=
new
ArrayList
<
CloudsStormSubTopology
>();
}
this
.
topologies
.
add
(
topologiesItem
);
return
this
;
}
/**
* Get topologies
* @return topologies
**/
@ApiModelProperty
(
value
=
""
)
@Valid
public
List
<
CloudsStormSubTopology
>
getTopologies
()
{
return
topologies
;
}
public
void
setTopologies
(
List
<
CloudsStormSubTopology
>
topologies
)
{
this
.
topologies
=
topologies
;
}
public
CloudsStormTopTopology
subnets
(
List
<
CloudsStormSubnets
>
subnets
)
{
this
.
subnets
=
subnets
;
return
this
;
}
public
CloudsStormTopTopology
addSubnetsItem
(
CloudsStormSubnets
subnetsItem
)
{
if
(
this
.
subnets
==
null
)
{
this
.
subnets
=
new
ArrayList
<
CloudsStormSubnets
>();
}
this
.
subnets
.
add
(
subnetsItem
);
return
this
;
}
/**
* Get subnets
* @return subnets
**/
@ApiModelProperty
(
value
=
""
)
@Valid
public
List
<
CloudsStormSubnets
>
getSubnets
()
{
return
subnets
;
}
public
void
setSubnets
(
List
<
CloudsStormSubnets
>
subnets
)
{
this
.
subnets
=
subnets
;
}
@Override
public
boolean
equals
(
java
.
lang
.
Object
o
)
{
if
(
this
==
o
)
{
return
true
;
}
if
(
o
==
null
||
getClass
()
!=
o
.
getClass
())
{
return
false
;
}
CloudsStormTopTopology
cloudsStormTopTopology
=
(
CloudsStormTopTopology
)
o
;
return
Objects
.
equals
(
this
.
userName
,
cloudsStormTopTopology
.
userName
)
&&
Objects
.
equals
(
this
.
publicKeyPath
,
cloudsStormTopTopology
.
publicKeyPath
)
&&
Objects
.
equals
(
this
.
topologies
,
cloudsStormTopTopology
.
topologies
)
&&
Objects
.
equals
(
this
.
subnets
,
cloudsStormTopTopology
.
subnets
);
}
@Override
public
int
hashCode
()
{
return
Objects
.
hash
(
userName
,
publicKeyPath
,
topologies
,
subnets
);
}
@Override
public
String
toString
()
{
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
"class CloudsStormTopTopology {\n"
);
sb
.
append
(
" userName: "
).
append
(
toIndentedString
(
userName
)).
append
(
"\n"
);
sb
.
append
(
" publicKeyPath: "
).
append
(
toIndentedString
(
publicKeyPath
)).
append
(
"\n"
);
sb
.
append
(
" topologies: "
).
append
(
toIndentedString
(
topologies
)).
append
(
"\n"
);
sb
.
append
(
" subnets: "
).
append
(
toIndentedString
(
subnets
)).
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 "
);
}
}
public
String
getUserName
()
{
return
userName
;
}
public
void
setUserName
(
String
userName
)
{
this
.
userName
=
userName
;
}
public
CloudsStormTopTopology
publicKeyPath
(
String
publicKeyPath
)
{
this
.
publicKeyPath
=
publicKeyPath
;
return
this
;
}
/**
* Get publicKeyPath
*
* @return publicKeyPath
*
*/
@ApiModelProperty
(
value
=
""
)
public
String
getPublicKeyPath
()
{
return
publicKeyPath
;
}
public
void
setPublicKeyPath
(
String
publicKeyPath
)
{
this
.
publicKeyPath
=
publicKeyPath
;
}
public
CloudsStormTopTopology
topologies
(
List
<
CloudsStormSubTopology
>
topologies
)
{
this
.
topologies
=
topologies
;
return
this
;
}
public
CloudsStormTopTopology
addTopologiesItem
(
CloudsStormSubTopology
topologiesItem
)
{
if
(
this
.
topologies
==
null
)
{
this
.
topologies
=
new
ArrayList
<
CloudsStormSubTopology
>();
}
this
.
topologies
.
add
(
topologiesItem
);
return
this
;
}
/**
* Get topologies
*
* @return topologies
*
*/
@ApiModelProperty
(
value
=
""
)
@Valid
public
List
<
CloudsStormSubTopology
>
getTopologies
()
{
return
topologies
;
}
public
void
setTopologies
(
List
<
CloudsStormSubTopology
>
topologies
)
{
this
.
topologies
=
topologies
;
}
public
CloudsStormTopTopology
subnets
(
List
<
CloudsStormSubnets
>
subnets
)
{
this
.
subnets
=
subnets
;
return
this
;
}
public
CloudsStormTopTopology
addSubnetsItem
(
CloudsStormSubnets
subnetsItem
)
{
if
(
this
.
subnets
==
null
)
{
this
.
subnets
=
new
ArrayList
<
CloudsStormSubnets
>();
}
this
.
subnets
.
add
(
subnetsItem
);
return
this
;
}
/**
* Get subnets
*
* @return subnets
*
*/
@ApiModelProperty
(
value
=
""
)
@Valid
public
List
<
CloudsStormSubnets
>
getSubnets
()
{
return
subnets
;
}
public
void
setSubnets
(
List
<
CloudsStormSubnets
>
subnets
)
{
this
.
subnets
=
subnets
;
}
@Override
public
boolean
equals
(
java
.
lang
.
Object
o
)
{
if
(
this
==
o
)
{
return
true
;
}
if
(
o
==
null
||
getClass
()
!=
o
.
getClass
())
{
return
false
;
}
CloudsStormTopTopology
cloudsStormTopTopology
=
(
CloudsStormTopTopology
)
o
;
return
Objects
.
equals
(
this
.
userName
,
cloudsStormTopTopology
.
userName
)
&&
Objects
.
equals
(
this
.
publicKeyPath
,
cloudsStormTopTopology
.
publicKeyPath
)
&&
Objects
.
equals
(
this
.
topologies
,
cloudsStormTopTopology
.
topologies
)
&&
Objects
.
equals
(
this
.
subnets
,
cloudsStormTopTopology
.
subnets
);
}
@Override
public
int
hashCode
()
{
return
Objects
.
hash
(
userName
,
publicKeyPath
,
topologies
,
subnets
);
}
@Override
public
String
toString
()
{
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
"class CloudsStormTopTopology {\n"
);
sb
.
append
(
" userName: "
).
append
(
toIndentedString
(
userName
)).
append
(
"\n"
);
sb
.
append
(
" publicKeyPath: "
).
append
(
toIndentedString
(
publicKeyPath
)).
append
(
"\n"
);
sb
.
append
(
" topologies: "
).
append
(
toIndentedString
(
topologies
)).
append
(
"\n"
);
sb
.
append
(
" subnets: "
).
append
(
toIndentedString
(
subnets
)).
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 "
);
}
}
drip-commons/src/main/java/nl/uva/sne/drip/model/cloud/storm/CloudsStormVM.java
View file @
2a9b1fb1
...
...
@@ -3,6 +3,8 @@ package nl.uva.sne.drip.model.cloud.storm;
import
java.util.Objects
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.util.Map
;
import
javax.validation.Valid
;
import
org.springframework.validation.annotation.Validated
;
/**
...
...
@@ -13,6 +15,20 @@ import org.springframework.validation.annotation.Validated;
public
class
CloudsStormVM
{
/**
* @return the extraInfo
*/
public
Map
<
String
,
Object
>
getExtraInfo
()
{
return
extraInfo
;
}
/**
* @param extraInfo the extraInfo to set
*/
public
void
setExtraInfo
(
Map
<
String
,
Object
>
extraInfo
)
{
this
.
extraInfo
=
extraInfo
;
}
@JsonProperty
(
"name"
)
private
String
name
=
null
;
...
...
@@ -28,6 +44,28 @@ public class CloudsStormVM {
@JsonProperty
(
"publicAddress"
)
private
String
publicAddress
=
null
;
@JsonProperty
(
"type"
)
private
String
type
=
null
;
@JsonProperty
(
"OS"
)
private
String
OS
=
null
;
@JsonProperty
(
"CPU"
)
private
String
CPU
=
null
;
@JsonProperty
(
"MEM"
)
private
String
MEM
=
null
;
@JsonProperty
(
"VMType"
)
private
String
VMType
=
null
;
@JsonProperty
(
"Price"
)
private
String
Price
=
null
;
@JsonProperty
(
"extraInfo"
)
@Valid
private
Map
<
String
,
Object
>
extraInfo
=
null
;
public
CloudsStormVM
name
(
String
name
)
{
this
.
name
=
name
;
return
this
;
...
...
@@ -178,4 +216,20 @@ public class CloudsStormVM {
}
return
o
.
toString
().
replace
(
"\n"
,
"\n "
);
}
public
String
getCPU
()
{
throw
new
UnsupportedOperationException
(
"Not supported yet."
);
//To change body of generated methods, choose Tools | Templates.
}
public
String
getMEM
()
{
throw
new
UnsupportedOperationException
(
"Not supported yet."
);
//To change body of generated methods, choose Tools | Templates.
}
public
String
getVmType
()
{
throw
new
UnsupportedOperationException
(
"Not supported yet."
);
//To change body of generated methods, choose Tools | Templates.
}
public
String
getOS
()
{
throw
new
UnsupportedOperationException
(
"Not supported yet."
);
//To change body of generated methods, choose Tools | Templates.
}
}
drip-commons/src/main/java/nl/uva/sne/drip/model/cloud/storm/CloudsStormVMs.java
View file @
2a9b1fb1
...
...
@@ -15,6 +15,11 @@ import javax.validation.Valid;
@javax
.
annotation
.
Generated
(
value
=
"io.swagger.codegen.languages.SpringCodegen"
,
date
=
"2019-12-30T16:13:55.433Z"
)
public
class
CloudsStormVMs
{
@JsonProperty
(
"SEngineClass"
)
private
String
sEngineClass
;
@JsonProperty
(
"VMs"
)
@Valid
...
...
drip-commons/src/main/java/nl/uva/sne/drip/model/cloud/storm/DCMetaInfo.java
View file @
2a9b1fb1
...
...
@@ -36,7 +36,7 @@ public class DCMetaInfo {
private
String
availability
=
null
;
@JsonProperty
(
"VMMetaInfo"
)
private
List
<
VMMetaInfo
>
vmMetaInfo
=
null
;
private
List
<
CloudsStormVM
>
vmMetaInfo
=
null
;
@JsonProperty
(
"extraInfo"
)
@Valid
...
...
@@ -51,7 +51,7 @@ public class DCMetaInfo {
* Get domain
*
* @return domain
*
*
*/
@ApiModelProperty
(
value
=
""
)
...
...
@@ -72,7 +72,7 @@ public class DCMetaInfo {
* Get endpoint
*
* @return endpoint
*
*
*/
@ApiModelProperty
(
value
=
""
)
...
...
@@ -93,7 +93,7 @@ public class DCMetaInfo {
* Get country
*
* @return country
*
*
*/
@ApiModelProperty
(
value
=
""
)
...
...
@@ -114,7 +114,7 @@ public class DCMetaInfo {
* Get longitude
*
* @return longitude
*
*
*/
@ApiModelProperty
(
value
=
""
)
...
...
@@ -135,7 +135,7 @@ public class DCMetaInfo {
* Get latitude
*
* @return latitude
*
*
*/
@ApiModelProperty
(
value
=
""
)
...
...
@@ -156,7 +156,7 @@ public class DCMetaInfo {
* Get availability
*
* @return availability
*
*
*/
@ApiModelProperty
(
value
=
""
)
...
...
@@ -168,7 +168,7 @@ public class DCMetaInfo {
this
.
availability
=
availability
;
}
public
DCMetaInfo
vmMetaInfo
(
List
<
VMMetaInfo
>
vmMetaInfo
)
{
public
DCMetaInfo
vmMetaInfo
(
List
<
CloudsStormVM
>
vmMetaInfo
)
{
this
.
vmMetaInfo
=
vmMetaInfo
;
return
this
;
}
...
...
@@ -177,17 +177,17 @@ public class DCMetaInfo {
* Get vmMetaInfo
*
* @return vmMetaInfo
*
*
*/
@ApiModelProperty
(
value
=
""
)
@Valid
public
List
<
VMMetaInfo
>
getVmMetaInfo
()
{
public
List
<
CloudsStormVM
>
getVmMetaInfo
()
{
return
vmMetaInfo
;
}
public
void
setVmMetaInfo
(
List
<
VMMetaInfo
>
vmMetaInfo
)
{
public
void
setVmMetaInfo
(
List
<
CloudsStormVM
>
vmMetaInfo
)
{
this
.
vmMetaInfo
=
vmMetaInfo
;
}
...
...
@@ -208,7 +208,7 @@ public class DCMetaInfo {
* Get extraInfo
*
* @return extraInfo
*
*
*/
@ApiModelProperty
(
value
=
""
)
...
...
drip-commons/src/main/java/nl/uva/sne/drip/model/cloud/storm/VMMetaInfo.java
deleted
100644 → 0
View file @
9a0cdb1a
package
nl
.
uva
.
sne
.
drip
.
model
.
cloud
.
storm
;
import
java.util.Objects
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
com.fasterxml.jackson.annotation.JsonCreator
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
org.springframework.validation.annotation.Validated
;
import
javax.validation.Valid
;
import
javax.validation.constraints.*
;
/**
* VMMetaInfo
*/
@Validated
@javax
.
annotation
.
Generated
(
value
=
"io.swagger.codegen.languages.SpringCodegen"
,
date
=
"2019-12-11T15:13:55.016Z"
)
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"
)
private
String
OS
=
null
;
@JsonProperty
(
"VMType"
)
private
String
vmType
=
null
;
@JsonProperty
(
"CPU"
)
private
String
CPU
=
null
;
@JsonProperty
(
"MEM"
)
private
String
MEM
=
null
;
@JsonProperty
(
"Price"
)
private
String
price
=
null
;
@JsonProperty
(
"DefaultSSHAccount"
)
private
String
defaultSSHAccount
=
null
;
@JsonProperty
(
"availability"
)
private
String
availability
=
null
;
@JsonProperty
(
"extraInfo"
)
@Valid
private
Map
<
String
,
Object
>
extraInfo
=
null
;
public
VMMetaInfo
OS
(
String
OS
)
{
this
.
OS
=
OS
;
return
this
;
}
/**
* Get OS
*
* @return OS
*
*/
@ApiModelProperty
(
value
=
""
)
public
String
getOS
()
{
return
OS
;
}
public
void
setOS
(
String
OS
)
{
this
.
OS
=
OS
;
}
public
VMMetaInfo
CPU
(
String
CPU
)
{
this
.
CPU
=
CPU
;
return
this
;
}
/**
* Get CPU
*
* @return CPU
*
*/
@ApiModelProperty
(
value
=
""
)
public
String
getCPU
()
{
return
CPU
;
}
public
void
setCPU
(
String
CPU
)
{
this
.
CPU
=
CPU
;
}
public
VMMetaInfo
MEM
(
String
MEM
)
{
this
.
MEM
=
MEM
;
return
this
;
}
/**
* Get MEM
*
* @return MEM
*
*/
@ApiModelProperty
(
value
=
""
)
public
String
getMEM
()
{
return
MEM
;
}
public
void
setMEM
(
String
MEM
)
{
this
.
MEM
=
MEM
;
}
public
VMMetaInfo
price
(
String
price
)
{
this
.
price
=
price
;
return
this
;
}
/**
* Get price
*
* @return price
*
*/
@ApiModelProperty
(
value
=
""
)
public
String
getPrice
()
{
return
price
;
}
public
void
setPrice
(
String
price
)
{
this
.
price
=
price
;
}
public
VMMetaInfo
defaultSSHAccount
(
String
defaultSSHAccount
)
{
this
.
defaultSSHAccount
=
defaultSSHAccount
;
return
this
;
}
/**
* Get defaultSSHAccount
*
* @return defaultSSHAccount
*
*/
@ApiModelProperty
(
value
=
""
)
public
String
getDefaultSSHAccount
()
{
return
defaultSSHAccount
;
}
public
void
setDefaultSSHAccount
(
String
defaultSSHAccount
)
{
this
.
defaultSSHAccount
=
defaultSSHAccount
;
}
public
VMMetaInfo
availability
(
String
availability
)
{
this
.
availability
=
availability
;
return
this
;
}
/**
* Get availability
*
* @return availability
*
*/
@ApiModelProperty
(
value
=
""
)
public
String
getAvailability
()
{
return
availability
;
}
public
void
setAvailability
(
String
availability
)
{
this
.
availability
=
availability
;
}
public
VMMetaInfo
extraInfo
(
Map
<
String
,
Object
>
extraInfo
)
{
this
.
extraInfo
=
extraInfo
;
return
this
;
}
public
VMMetaInfo
putExtraInfoItem
(
String
key
,
Object
extraInfoItem
)
{
if
(
this
.
extraInfo
==
null
)
{
this
.
extraInfo
=
new
HashMap
<
String
,
Object
>();
}
this
.
extraInfo
.
put
(
key
,
extraInfoItem
);
return
this
;
}
/**
* Get extraInfo
*
* @return extraInfo
*
*/
@ApiModelProperty
(
value
=
""
)
public
Map
<
String
,
Object
>
getExtraInfo
()
{
return
extraInfo
;
}
public
void
setExtraInfo
(
Map
<
String
,
Object
>
extraInfo
)
{
this
.
extraInfo
=
extraInfo
;
}
@Override
public
boolean
equals
(
java
.
lang
.
Object
o
)
{
if
(
this
==
o
)
{
return
true
;
}
if
(
o
==
null
||
getClass
()
!=
o
.
getClass
())
{
return
false
;
}
VMMetaInfo
vmMetaInfo
=
(
VMMetaInfo
)
o
;
return
Objects
.
equals
(
this
.
OS
,
vmMetaInfo
.
OS
)
&&
Objects
.
equals
(
this
.
CPU
,
vmMetaInfo
.
CPU
)
&&
Objects
.
equals
(
this
.
MEM
,
vmMetaInfo
.
MEM
)
&&
Objects
.
equals
(
this
.
price
,
vmMetaInfo
.
price
)
&&
Objects
.
equals
(
this
.
defaultSSHAccount
,
vmMetaInfo
.
defaultSSHAccount
)
&&
Objects
.
equals
(
this
.
availability
,
vmMetaInfo
.
availability
)
&&
Objects
.
equals
(
this
.
extraInfo
,
vmMetaInfo
.
extraInfo
);
}
@Override
public
int
hashCode
()
{
return
Objects
.
hash
(
OS
,
CPU
,
MEM
,
price
,
defaultSSHAccount
,
availability
,
extraInfo
);
}
@Override
public
String
toString
()
{
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
"class VMMetaInfo {\n"
);
sb
.
append
(
" OS: "
).
append
(
toIndentedString
(
OS
)).
append
(
"\n"
);
sb
.
append
(
" CPU: "
).
append
(
toIndentedString
(
CPU
)).
append
(
"\n"
);
sb
.
append
(
" MEM: "
).
append
(
toIndentedString
(
MEM
)).
append
(
"\n"
);
sb
.
append
(
" price: "
).
append
(
toIndentedString
(
price
)).
append
(
"\n"
);
sb
.
append
(
" defaultSSHAccount: "
).
append
(
toIndentedString
(
defaultSSHAccount
)).
append
(
"\n"
);
sb
.
append
(
" availability: "
).
append
(
toIndentedString
(
availability
)).
append
(
"\n"
);
sb
.
append
(
" extraInfo: "
).
append
(
toIndentedString
(
extraInfo
)).
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 "
);
}
}
drip-provisioner/src/main/java/nl/uva/sne/drip/provisioner/CloudStormDAO.java
View file @
2a9b1fb1
...
...
@@ -14,13 +14,10 @@ import java.io.File;
import
java.io.IOException
;
import
java.util.ArrayList
;
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.CloudsStormVM
;
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.DCMetaInfo
;
import
nl.uva.sne.drip.model.cloud.storm.VMMetaInfo
;
/**
*
...
...
@@ -38,7 +35,7 @@ class CloudStormDAO {
objectMapper
.
setSerializationInclusion
(
JsonInclude
.
Include
.
NON_NULL
);
}
List
<
VMMetaInfo
>
findVmMetaInfoByProvider
(
CloudDB
.
CloudProviderEnum
provider
)
throws
IOException
{
List
<
CloudsStormVM
>
findVmMetaInfoByProvider
(
CloudDB
.
CloudProviderEnum
provider
)
throws
IOException
{
DB
db
=
objectMapper
.
readValue
(
new
File
(
cloudStormDBPath
+
File
.
separator
+
"db.yml"
),
DB
.
class
);
List
<
CloudDB
>
cloudDBs
=
db
.
getCloudDBs
();
...
...
@@ -52,10 +49,10 @@ class CloudStormDAO {
}
if
(
targetCloudDB
!=
null
)
{
List
<
VMMetaInfo
>
vMMetaInfos
=
new
ArrayList
<>();
List
<
CloudsStormVM
>
vMMetaInfos
=
new
ArrayList
<>();
DBInfo
dbInfo
=
objectMapper
.
readValue
(
new
File
(
cloudStormDBPath
+
File
.
separator
+
targetCloudDB
.
getDbInfoFile
()),
DBInfo
.
class
);
List
<
DCMetaInfo
>
metaInfos
=
dbInfo
.
getDcMetaInfo
();
for
(
DCMetaInfo
metaInfo
:
metaInfos
)
{
List
<
CloudsStormVM
>
metaInfos
=
dbInfo
.
getDcMetaInfo
();
for
(
CloudsStormVM
metaInfo
:
metaInfos
)
{
vMMetaInfos
.
addAll
(
metaInfo
.
getVmMetaInfo
());
}
return
vMMetaInfos
;
...
...
drip-provisioner/src/main/java/nl/uva/sne/drip/provisioner/CloudStormService.java
View file @
2a9b1fb1
...
...
@@ -40,7 +40,6 @@ import nl.uva.sne.drip.model.cloud.storm.CloudsStormVMs;
import
nl.uva.sne.drip.model.cloud.storm.CredentialInfo
;
import
nl.uva.sne.drip.model.cloud.storm.InfrasCode
;
import
nl.uva.sne.drip.model.cloud.storm.OpCode
;
import
nl.uva.sne.drip.model.cloud.storm.VMMetaInfo
;
import
nl.uva.sne.drip.model.tosca.Credential
;
import
nl.uva.sne.drip.model.tosca.ToscaTemplate
;
import
nl.uva.sne.drip.sure.tosca.client.ApiException
;
...
...
@@ -68,6 +67,9 @@ class CloudStormService {
private
final
String
APP_FOLDER_NAME
=
"App"
;
private
final
String
TOP_TOPOLOGY_FILE_NAME
=
"_top.yml"
;
private
final
String
TOPOLOGY_RELATIVE_PATH
=
File
.
separator
+
INFS_FOLDER_NAME
+
File
.
separator
+
TOPOLOGY_FOLDER_NAME
+
File
.
separator
;
CloudStormService
(
Properties
properties
,
ToscaTemplate
toscaTemplate
)
throws
IOException
,
JsonProcessingException
,
ApiException
{
// this.toscaTemplate = toscaTemplate;
cloudStormDBPath
=
properties
.
getProperty
(
"cloud.storm.db.path"
);
...
...
@@ -87,7 +89,7 @@ class CloudStormService {
if
(!(
tempInputDir
.
mkdirs
()))
{
throw
new
FileNotFoundException
(
"Could not create input directory: "
+
tempInputDir
.
getAbsolutePath
());
}
String
topologyTempInputDirPath
=
tempInputDirPath
+
File
.
separator
+
INFS_FOLDER_NAME
+
File
.
separator
+
TOPOLOGY_FOLDER_NAME
;
String
topologyTempInputDirPath
=
tempInputDirPath
+
TOPOLOGY_RELATIVE_PATH
;
File
topologyTempInputDir
=
new
File
(
topologyTempInputDirPath
);
if
(!(
topologyTempInputDir
.
mkdirs
()))
{
...
...
@@ -194,11 +196,12 @@ class CloudStormService {
Double
memSize
=
helper
.
getVMNMemSize
(
vmMap
);
String
os
=
helper
.
getVMNOS
(
vmMap
);
List
<
VMMetaInfo
>
vmInfos
=
cloudStormDAO
.
findVmMetaInfoByProvider
(
CloudProviderEnum
.
fromValue
(
provider
));
for
(
VMMetaInfo
vmInfo
:
vmInfos
)
{
List
<
CloudsStormVM
>
vmInfos
=
cloudStormDAO
.
findVmMetaInfoByProvider
(
CloudProviderEnum
.
fromValue
(
provider
));
for
(
CloudsStormVM
vmInfo
:
vmInfos
)
{
Logger
.
getLogger
(
CloudStormService
.
class
.
getName
()).
log
(
Level
.
FINE
,
"vmInfo: {0}"
,
vmInfo
);
Logger
.
getLogger
(
CloudStormService
.
class
.
getName
()).
log
(
Level
.
FINE
,
"numOfCores:{0} memSize: {1} os: {2}"
,
new
Object
[]{
numOfCores
,
memSize
,
os
});
if
(
Objects
.
equals
(
numOfCores
,
Double
.
valueOf
(
vmInfo
.
getCPU
()))
&&
Objects
.
equals
(
memSize
,
Double
.
valueOf
(
vmInfo
.
getMEM
()))
&&
os
.
toLowerCase
().
equals
(
vmInfo
.
getOS
().
toLowerCase
()))
{
if
(
Objects
.
equals
(
numOfCores
,
Double
.
valueOf
(
vmInfo
.
getCPU
()))
&&
Objects
.
equals
(
memSize
,
Double
.
valueOf
(
vmInfo
.
getMEM
()))
&&
os
.
toLowerCase
().
equals
(
vmInfo
.
getOS
().
toLowerCase
()))
{
return
vmInfo
.
getVmType
();
}
}
...
...
@@ -284,12 +287,55 @@ class CloudStormService {
// standalone.MainAsTool.main(args);
tempInputDirPath
=
"/tmp/Input-87672007429577"
;
CloudsStormTopTopology
_top
=
objectMapper
.
readValue
(
new
File
(
tempInputDirPath
+
File
.
separator
+
INFS_FOLDER_NAME
+
File
.
separator
+
TOPOLOGY_FOLDER_NAME
+
File
.
separator
+
TOP_TOPOLOGY_FILE_NAME
),
CloudsStormTopTopology
_top
=
objectMapper
.
readValue
(
new
File
(
tempInputDirPath
+
TOPOLOGY_RELATIVE_PATH
+
TOP_TOPOLOGY_FILE_NAME
),
CloudsStormTopTopology
.
class
);
List
<
CloudsStormSubTopology
>
subTopologies
=
_top
.
getTopologies
();
List
<
NodeTemplateMap
>
vmTopologiesMaps
=
helper
.
getVMTopologyTemplates
();
int
i
=
0
;
for
(
CloudsStormSubTopology
subTopology
:
subTopologies
)
{
NodeTemplateMap
nodeTemplateMap
=
vmTopologiesMaps
.
get
(
i
);
Map
<
String
,
Object
>
att
=
nodeTemplateMap
.
getNodeTemplate
().
getAttributes
();
if
(
att
==
null
)
{
att
=
new
HashMap
<>();
}
att
.
put
(
"status"
,
subTopology
.
getStatus
().
toString
());
CloudsStormVMs
cloudsStormVMs
=
objectMapper
.
readValue
(
new
File
(
tempInputDirPath
+
TOPOLOGY_RELATIVE_PATH
+
File
.
separator
+
subTopology
.
getTopology
()),
CloudsStormVMs
.
class
);
List
<
CloudsStormVM
>
vms
=
cloudsStormVMs
.
getVms
();
List
<
NodeTemplateMap
>
vmTemplatesMap
=
helper
.
getTemplateVMsForVMTopology
(
nodeTemplateMap
);
int
j
=
0
;
for
(
CloudsStormVM
vm
:
vms
)
{
NodeTemplateMap
vmTemplateMap
=
vmTemplatesMap
.
get
(
j
);
Map
<
String
,
Object
>
vmAttributes
=
vmTemplateMap
.
getNodeTemplate
().
getAttributes
();
if
(
vmAttributes
==
null
){
vmAttributes
=
new
HashMap
<>();
}
vmAttributes
.
put
(
"private_ip"
,
vm
.
get
);
}
String
rootKeyPairFolder
=
tempInputDirPath
+
TOPOLOGY_RELATIVE_PATH
+
TOP_TOPOLOGY_FILE_NAME
+
File
.
separator
+
subTopology
.
getSshKeyPairId
();
Credential
rootKeyPairCredential
=
new
Credential
();
rootKeyPairCredential
.
setProtocol
(
"ssh"
);
Map
<
String
,
String
>
keys
=
new
HashMap
<>();
keys
.
put
(
"private_key"
,
Converter
.
encodeFileToBase64Binary
(
rootKeyPairFolder
+
File
.
separator
+
"id_rsa"
));
keys
.
put
(
"public_key"
,
Converter
.
encodeFileToBase64Binary
(
rootKeyPairFolder
+
File
.
separator
+
"id_rsa.pub"
));
rootKeyPairCredential
.
setKeys
(
keys
);
String
userKyePairFolder
=
tempInputDirPath
+
TOPOLOGY_RELATIVE_PATH
+
TOP_TOPOLOGY_FILE_NAME
;
Credential
userKeyPairCredential
=
new
Credential
();
rootKeyPairCredential
.
setProtocol
(
"ssh"
);
keys
=
new
HashMap
<>();
keys
.
put
(
"private_key"
,
Converter
.
encodeFileToBase64Binary
(
userKyePairFolder
+
File
.
separator
+
"id_rsa"
));
keys
.
put
(
"public_key"
,
Converter
.
encodeFileToBase64Binary
(
userKyePairFolder
+
File
.
separator
+
"id_rsa.pub"
));
userKeyPairCredential
.
setKeys
(
keys
);
}
return
null
;
}
...
...
openAPI/schema/CloudStorm/CloudsStormSubTopology.yml
View file @
2a9b1fb1
...
...
@@ -23,8 +23,4 @@
scaledFrom
:
type
:
object
additionalProperties
:
type
:
object
connections
:
type
:
object
additionalProperties
:
type
:
object
type
:
object
openAPI/schema/CloudStorm/CloudsStormTopTopology.yml
View file @
2a9b1fb1
...
...
@@ -5,6 +5,10 @@
type
:
"
string"
publicKeyPath
:
type
:
"
string"
connections
:
type
:
object
additionalProperties
:
type
:
object
topologies
:
type
:
array
items
:
...
...
openAPI/schema/CloudStorm/CloudsStormVM.yml
View file @
2a9b1fb1
...
...
@@ -11,3 +11,25 @@
type
:
"
string"
publicAddress
:
type
:
"
string"
type
:
type
:
"
string"
extraInfo
:
type
:
object
additionalProperties
:
type
:
object
OS
:
type
:
"
string"
CPU
:
type
:
"
string"
MEM
:
type
:
"
string"
VMType
:
type
:
"
string"
Price
:
type
:
"
string"
DefaultSSHAccount
:
type
:
"
string"
availability
:
type
:
"
string"
openAPI/schema/CloudStorm/DCMetaInfo.yml
View file @
2a9b1fb1
...
...
@@ -16,7 +16,7 @@
VMMetaInfo
:
type
:
"
array"
items
:
$ref
:
"
https://raw.githubusercontent.com/skoulouzis/CONF/DRIP_3.0/openAPI/schema/CloudStorm/
VMMetaInfo.yml#/VMMetaInfo
"
$ref
:
"
https://raw.githubusercontent.com/skoulouzis/CONF/DRIP_3.0/openAPI/schema/CloudStorm/
CloudsStormVM.yml#/CloudsStormVM
"
extraInfo
:
type
:
object
additionalProperties
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment