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
446c8c13
Commit
446c8c13
authored
Sep 12, 2019
by
Spiros Koulouzis
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add credentials to TOSCA
parent
03b20b8c
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
252 additions
and
354 deletions
+252
-354
ProvisionService.java
...in/java/nl/uva/sne/drip/api/service/ProvisionService.java
+110
-243
ProvisionController.java
...java/nl/uva/sne/drip/api/v1/rest/ProvisionController.java
+13
-13
ProvisionResponse.java
...drip/drip/commons/data/v1/external/ProvisionResponse.java
+43
-23
P2PConverter.java
...ain/java/nl/uva/sne/drip/drip/converter/P2PConverter.java
+17
-10
MessageParsing.java
...l/uva/sne/drip/drip/provisioner/utils/MessageParsing.java
+69
-65
No files found.
drip-api/src/main/java/nl/uva/sne/drip/api/service/ProvisionService.java
View file @
446c8c13
...
...
@@ -23,9 +23,11 @@ import java.io.FileNotFoundException;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Properties
;
import
java.util.Set
;
import
java.util.concurrent.TimeoutException
;
import
java.util.logging.Level
;
import
java.util.logging.Logger
;
...
...
@@ -133,64 +135,7 @@ public class ProvisionService {
return
callProvisioner1
(
provisionRequest
);
}
// private Message buildProvisioner0Message(ProvisionRequest pReq) throws JSONException, IOException {
// Message invokationMessage = new Message();
// List<MessageParameter> parameters = new ArrayList();
// CloudCredentials cred = cloudCredentialsService.findOne(pReq.getCloudCredentialsIDs().get(0));
// if (cred == null) {
// throw new CloudCredentialsNotFoundException();
// }
// MessageParameter conf = buildCloudCredentialParam(cred, 0).get(0);
// parameters.add(conf);
//
// List<MessageParameter> certs = buildCertificatesParam(cred);
// parameters.addAll(certs);
//
// List<MessageParameter> topologies = buildTopologyParams(pReq.getPlanID());
// parameters.addAll(topologies);
//
// List<String> userKeyIDs = pReq.getUserKeyPairIDs();
// if (userKeyIDs != null) {
// List<MessageParameter> userKeys = buildUserKeysParams(userKeyIDs.get(0), 0);
// parameters.addAll(userKeys);
// }
//
// invokationMessage.setParameters(parameters);
// invokationMessage.setCreationDate((System.currentTimeMillis()));
// return invokationMessage;
// }
private
List
<
MessageParameter
>
buildCloudCredentialParam
(
CloudCredentials
cred
,
int
version
)
throws
JsonProcessingException
,
JSONException
,
IOException
{
List
<
MessageParameter
>
cloudCredentialParams
=
new
ArrayList
<>();
MessageParameter
cloudCred
=
new
MessageParameter
();
cloudCred
.
setName
(
"cloud_credential"
);
cloudCred
.
setEncoding
(
"UTF-8"
);
List
<
KeyPair
>
keyPairs
=
new
ArrayList
<>();
// List<String> keyPairIds = cred.getkeyPairIDs();
// if (keyPairIds != null) {
// for (String id : cred.getkeyPairIDs()) {
// KeyPair pair = keyDao.findOne(id);
// keyPairs.add(pair);
// }
// cred.setKeyPairs(keyPairs);
// }
ObjectMapper
mapper
=
new
ObjectMapper
();
mapper
.
configure
(
JsonParser
.
Feature
.
ALLOW_SINGLE_QUOTES
,
true
);
String
jsonInString
=
mapper
.
writeValueAsString
(
cred
);
cloudCred
.
setValue
(
"\""
+
jsonInString
+
"\""
);
cloudCredentialParams
.
add
(
cloudCred
);
return
cloudCredentialParams
;
}
private
List
<
MessageParameter
>
buildTopologyParams
(
String
planID
)
throws
JSONException
,
FileNotFoundException
{
PlanResponse
plan
=
simplePlanService
.
getDao
().
findOne
(
planID
);
private
List
<
MessageParameter
>
buildTopologyParams
(
PlanResponse
plan
)
throws
JSONException
,
FileNotFoundException
{
if
(
plan
==
null
)
{
throw
new
PlanNotFoundException
();
}
...
...
@@ -291,99 +236,11 @@ public class ProvisionService {
return
parameters
;
}
private
List
<
MessageParameter
>
buildCloudKeyParams
(
ProvisionResponse
provisionInfo
)
{
List
<
MessageParameter
>
parameters
=
new
ArrayList
();
List
<
String
>
ids
=
provisionInfo
.
getCloudKeyPairIDs
();
if
(
ids
!=
null
)
{
for
(
String
id
:
ids
)
{
KeyPair
pair
=
keyPairService
.
findOne
(
id
);
MessageParameter
param
=
new
MessageParameter
();
param
.
setName
(
"private_cloud_key"
);
param
.
setValue
(
pair
.
getPrivateKey
().
getKey
());
HashMap
<
String
,
String
>
attributes
=
new
HashMap
<>();
attributes
.
putAll
(
pair
.
getPrivateKey
().
getAttributes
());
attributes
.
put
(
"name"
,
pair
.
getPrivateKey
().
getName
());
attributes
.
put
(
"key_pair_id"
,
pair
.
getKeyPairId
());
param
.
setAttributes
(
attributes
);
parameters
.
add
(
param
);
param
=
new
MessageParameter
();
param
.
setName
(
"public_cloud_key"
);
param
.
setValue
(
pair
.
getPublicKey
().
getKey
());
attributes
=
new
HashMap
<>();
attributes
.
putAll
(
pair
.
getPrivateKey
().
getAttributes
());
attributes
.
put
(
"name"
,
pair
.
getPublicKey
().
getName
());
attributes
.
put
(
"key_pair_id"
,
pair
.
getKeyPairId
());
param
.
setAttributes
(
attributes
);
parameters
.
add
(
param
);
}
}
return
parameters
;
}
private
MessageParameter
buildEC2Conf
(
CloudCredentials
cred
)
throws
JsonProcessingException
,
JSONException
,
IOException
{
Properties
prop
=
Converter
.
getEC2Properties
(
cred
);
ByteArrayOutputStream
baos
=
new
ByteArrayOutputStream
();
prop
.
store
(
baos
,
null
);
byte
[]
bytes
=
baos
.
toByteArray
();
MessageParameter
conf
=
new
MessageParameter
();
conf
.
setName
(
"ec2.conf"
);
String
charset
=
"UTF-8"
;
conf
.
setValue
(
new
String
(
bytes
,
charset
));
return
conf
;
}
// private List<MessageParameter> buildScriptParams(String userScriptID) {
// Script script = userScriptService.findOne(userScriptID);
// if (script == null) {
// throw new BadRequestException("User script: " + userScriptID + " was not found");
// }
// List<MessageParameter> parameters = new ArrayList();
// MessageParameter scriptParameter = new MessageParameter();
// scriptParameter.setName("guiscript");
// scriptParameter.setValue(script.getContents());
// scriptParameter.setEncoding("UTF-8");
// parameters.add(scriptParameter);
// return parameters;
// }
private
List
<
MessageParameter
>
buildUserKeysParams
(
String
userKeyID
,
int
version
)
{
KeyPair
key
=
keyPairService
.
findOne
(
userKeyID
);
if
(
key
==
null
)
{
throw
new
BadRequestException
(
"User key: "
+
userKeyID
+
" was not found"
);
}
List
<
MessageParameter
>
parameters
=
new
ArrayList
();
MessageParameter
keyParameter
=
new
MessageParameter
();
if
(
version
==
0
)
{
keyParameter
.
setName
(
"sshkey"
);
}
if
(
version
==
1
)
{
keyParameter
.
setName
(
"user_ssh_key"
);
}
keyParameter
.
setValue
(
key
.
getPublicKey
().
getKey
());
keyParameter
.
setEncoding
(
"UTF-8"
);
parameters
.
add
(
keyParameter
);
return
parameters
;
}
@PostFilter
(
"(hasRole('ROLE_ADMIN'))"
)
public
void
deleteAll
()
{
provisionDao
.
deleteAll
();
}
// private ProvisionResponse callProvisioner0(ProvisionRequest provisionRequest) throws IOException, TimeoutException, JSONException, InterruptedException, Exception {
// try (DRIPCaller provisioner = new ProvisionerCaller0(messageBrokerHost);) {
// Message provisionerInvokationMessage = buildProvisioner0Message(provisionRequest);
// provisionerInvokationMessage.setOwner(((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername());
// logger.info("Calling provisioner");
// Message response = (provisioner.call(provisionerInvokationMessage));
// logger.info("Got provisioner response");
// return parseCreateResourcesResponse(response.getParameters(), provisionRequest, null, true, true);
// }
// }
private
ProvisionResponse
callProvisioner1
(
ProvisionRequest
provisionRequest
)
throws
IOException
,
TimeoutException
,
JSONException
,
InterruptedException
,
Exception
{
try
(
DRIPCaller
provisioner
=
new
ProvisionerCaller1
(
messageBrokerHost
);)
{
Message
provisionerInvokationMessage
=
buildProvisioner1Message
(
provisionRequest
);
...
...
@@ -485,100 +342,76 @@ public class ProvisionService {
action
.
setValue
(
"start_topology"
);
parameters
.
add
(
action
);
List
<
MessageParameter
>
topologies
=
buildTopologyParams
(
provisionRequest
.
getPlanID
());
parameters
.
addAll
(
topologies
);
List
<
String
>
userKeyIDs
=
provisionRequest
.
getUserKeyPairIDs
();
if
(
userKeyIDs
!=
null
)
{
for
(
String
keyID
:
userKeyIDs
)
{
List
<
MessageParameter
>
userKeys
=
buildUserKeysParams
(
keyID
,
1
);
parameters
.
addAll
(
userKeys
);
}
}
List
<
String
>
deployerKeys
=
provisionRequest
.
getDeployerKeyPairIDs
();
if
(
userKeyIDs
!=
null
)
{
for
(
String
keyID
:
deployerKeys
)
{
List
<
MessageParameter
>
deplyMessageKey
=
buildDeployKeysParams
(
keyID
);
parameters
.
addAll
(
deplyMessageKey
);
}
}
for
(
String
id
:
provisionRequest
.
getCloudCredentialsIDs
())
{
CloudCredentials
cred
=
cloudCredentialsService
.
findOne
(
id
);
if
(
cred
==
null
)
{
throw
new
CloudCredentialsNotFoundException
();
}
List
<
MessageParameter
>
cloudCredentialParams
=
buildCloudCredentialParam
(
cred
,
1
);
parameters
.
addAll
(
cloudCredentialParams
);
}
PlanResponse
plan
=
addCloudCredentialsOnTOSCAPlan
(
provisionRequest
);
List
<
MessageParameter
>
topologies
=
buildTopologyParams
(
plan
);
parameters
.
addAll
(
topologies
);
invokationMessage
.
setParameters
(
parameters
);
invokationMessage
.
setCreationDate
((
System
.
currentTimeMillis
()));
return
invokationMessage
;
}
private
Message
buildTopoplogyModificationMessage
(
ProvisionResponse
provisionInfo
,
String
actionName
,
Map
<
String
,
String
>
extraAttributes
)
throws
JSONException
,
IOException
{
Message
invokationMessage
=
new
Message
();
List
<
MessageParameter
>
parameters
=
new
ArrayList
();
MessageParameter
action
=
new
MessageParameter
();
action
.
setName
(
"action"
);
action
.
setValue
(
actionName
);
parameters
.
add
(
action
);
List
<
MessageParameter
>
topologies
=
buildProvisionedTopologyParams
(
provisionInfo
);
parameters
.
addAll
(
topologies
);
List
<
MessageParameter
>
clusterKeys
=
buildClusterKeyParams
(
provisionInfo
);
parameters
.
addAll
(
clusterKeys
);
List
<
MessageParameter
>
userKeys
=
buildUserKeyParams
(
provisionInfo
);
parameters
.
addAll
(
userKeys
);
List
<
MessageParameter
>
cloudKeys
=
buildCloudKeyParams
(
provisionInfo
);
parameters
.
addAll
(
cloudKeys
);
for
(
String
id
:
provisionInfo
.
getCloudCredentialsIDs
())
{
CloudCredentials
cred
=
cloudCredentialsService
.
findOne
(
id
);
if
(
cred
==
null
)
{
throw
new
CloudCredentialsNotFoundException
();
}
List
<
MessageParameter
>
cloudCredentialParams
=
buildCloudCredentialParam
(
cred
,
1
);
parameters
.
addAll
(
cloudCredentialParams
);
}
if
(
extraAttributes
!=
null
&&
extraAttributes
.
containsKey
(
"scale_topology_name"
))
{
MessageParameter
scale
=
new
MessageParameter
();
scale
.
setName
(
"scale_topology_name"
);
scale
.
setValue
(
extraAttributes
.
get
(
"scale_topology_name"
));
Map
<
String
,
String
>
attributes
=
new
HashMap
<>();
attributes
.
put
(
"number_of_instances"
,
extraAttributes
.
get
(
"number_of_instances"
));
attributes
.
put
(
"cloud_provider"
,
extraAttributes
.
get
(
"cloud_provider"
));
attributes
.
put
(
"domain"
,
extraAttributes
.
get
(
"domain"
));
scale
.
setAttributes
(
attributes
);
parameters
.
add
(
scale
);
}
invokationMessage
.
setParameters
(
parameters
);
invokationMessage
.
setCreationDate
(
System
.
currentTimeMillis
());
return
invokationMessage
;
}
private
List
<
MessageParameter
>
buildDeployKeysParams
(
String
keyID
)
{
KeyPair
key
=
keyPairService
.
findOne
(
keyID
);
if
(
key
==
null
)
{
throw
new
BadRequestException
(
"User key: "
+
keyID
+
" was not found"
);
}
List
<
MessageParameter
>
parameters
=
new
ArrayList
();
MessageParameter
keyParameter
=
new
MessageParameter
();
keyParameter
.
setName
(
"deployer_ssh_key"
);
keyParameter
.
setValue
(
key
.
getPublicKey
().
getKey
());
keyParameter
.
setEncoding
(
"UTF-8"
);
parameters
.
add
(
keyParameter
);
return
parameters
;
// Message invokationMessage = new Message();
// List<MessageParameter> parameters = new ArrayList();
//
// MessageParameter action = new MessageParameter();
// action.setName("action");
// action.setValue(actionName);
// parameters.add(action);
//
// List<MessageParameter> topologies = buildProvisionedTopologyParams(provisionInfo);
// parameters.addAll(topologies);
//
// List<MessageParameter> clusterKeys = buildClusterKeyParams(provisionInfo);
// parameters.addAll(clusterKeys);
//
// List<MessageParameter> userKeys = buildUserKeyParams(provisionInfo);
// parameters.addAll(userKeys);
//
// List<MessageParameter> cloudKeys = buildCloudKeyParams(provisionInfo);
// parameters.addAll(cloudKeys);
//
//
// for (String id : provisionInfo.getCloudCredentialsIDs()) {
// CloudCredentials cred = cloudCredentialsService.findOne(id);
// if (cred == null) {
// throw new CloudCredentialsNotFoundException();
// }
//// List<MessageParameter> cloudCredentialParams = buildCloudCredentialParam(cred, 1);
//// parameters.addAll(cloudCredentialParams);
// }
// if (extraAttributes != null && extraAttributes.containsKey("scale_topology_name")) {
// MessageParameter scale = new MessageParameter();
// scale.setName("scale_topology_name");
// scale.setValue(extraAttributes.get("scale_topology_name"));
// Map<String, String> attributes = new HashMap<>();
// attributes.put("number_of_instances", extraAttributes.get("number_of_instances"));
// attributes.put("cloud_provider", extraAttributes.get("cloud_provider"));
// attributes.put("domain", extraAttributes.get("domain"));
// scale.setAttributes(attributes);
// parameters.add(scale);
// }
// invokationMessage.setParameters(parameters);
// invokationMessage.setCreationDate(System.currentTimeMillis());
return
null
;
}
// private List<MessageParameter> buildDeployKeysParams(String keyID) {
// KeyPair key = keyPairService.findOne(keyID);
// if (key == null) {
// throw new BadRequestException("User key: " + keyID + " was not found");
// }
// List<MessageParameter> parameters = new ArrayList();
// MessageParameter keyParameter = new MessageParameter();
//
// keyParameter.setName("deployer_ssh_key");
//
// keyParameter.setValue(key.getPublicKey().getKey());
// keyParameter.setEncoding("UTF-8");
// parameters.add(keyParameter);
// return parameters;
// }
private
ProvisionResponse
parseCreateResourcesResponse
(
List
<
MessageParameter
>
parameters
,
ProvisionRequest
provisionRequest
,
ProvisionResponse
provisionResponse
,
boolean
saveUserKeys
,
boolean
saveDeployerKeyI
)
throws
Exception
{
if
(
provisionResponse
==
null
)
{
...
...
@@ -683,7 +516,7 @@ public class ProvisionService {
if
(
provisionRequest
!=
null
)
{
userKeyIds
=
provisionRequest
.
getUserKeyPairIDs
();
}
else
{
userKeyIds
=
provisionResponse
.
getUserKeyPairIDs
();
//
userKeyIds = provisionResponse.getUserKeyPairIDs();
}
if
(
saveUserKeys
)
{
...
...
@@ -729,26 +562,26 @@ public class ProvisionService {
}
}
ArrayList
<
String
>
existingCloudKeyPairIDs
=
provisionResponse
.
getCloudKeyPairIDs
();
if
(
existingCloudKeyPairIDs
!=
null
)
{
existingCloudKeyPairIDs
.
addAll
(
cloudKeyPairIDs
);
}
else
{
existingCloudKeyPairIDs
=
cloudKeyPairIDs
;
}
provisionResponse
.
setCloudKeyPairIDs
(
existingCloudKeyPairIDs
);
//
ArrayList<String> existingCloudKeyPairIDs = provisionResponse.getCloudKeyPairIDs();
//
if (existingCloudKeyPairIDs != null) {
//
existingCloudKeyPairIDs.addAll(cloudKeyPairIDs);
//
} else {
//
existingCloudKeyPairIDs = cloudKeyPairIDs;
//
}
//
provisionResponse.setCloudKeyPairIDs(existingCloudKeyPairIDs);
provisionResponse
.
setDeployParameters
(
deployParameters
);
//
provisionResponse.setDeployParameters(deployParameters);
provisionResponse
.
setKvMap
(
kvMap
);
if
(
provisionRequest
!=
null
)
{
provisionResponse
.
setCloudCredentialsIDs
(
provisionRequest
.
getCloudCredentialsIDs
());
//
provisionResponse.setCloudCredentialsIDs(provisionRequest.getCloudCredentialsIDs());
provisionResponse
.
setPlanID
(
provisionRequest
.
getPlanID
());
}
if
(
userKeyIds
!=
null
)
{
provisionResponse
.
setUserKeyPairIDs
(
userKeyIds
);
//
provisionResponse.setUserKeyPairIDs(userKeyIds);
}
if
(
deployerKeyIds
!=
null
)
{
provisionResponse
.
setDeployerKeyPairIDs
(
deployerKeyIds
);
//
provisionResponse.setDeployerKeyPairIDs(deployerKeyIds);
}
provisionResponse
=
save
(
provisionResponse
);
...
...
@@ -757,4 +590,38 @@ public class ProvisionService {
private
void
parseDeleteResourcesResponse
(
List
<
MessageParameter
>
parameters
,
ProvisionResponse
provisionInfo
)
{
}
private
PlanResponse
addCloudCredentialsOnTOSCAPlan
(
ProvisionRequest
provisionRequest
)
{
List
<
Map
<
String
,
Object
>>
credentials
=
new
ArrayList
<>();
for
(
String
id
:
provisionRequest
.
getCloudCredentialsIDs
())
{
CloudCredentials
cred
=
cloudCredentialsService
.
findOne
(
id
);
if
(
cred
==
null
)
{
throw
new
CloudCredentialsNotFoundException
();
}
Map
<
String
,
Object
>
toscaCredential
=
new
HashMap
<>();
Map
<
String
,
Object
>
toscaCredentialProperties
=
new
HashMap
<>();
toscaCredentialProperties
.
put
(
"token_type"
,
"secretKey"
);
toscaCredentialProperties
.
put
(
"token"
,
cred
.
getSecretKey
());
toscaCredentialProperties
.
put
(
"accessKeyId"
,
cred
.
getAccessKeyId
());
toscaCredentialProperties
.
put
(
"cloud_provider_name"
,
cred
.
getCloudProviderName
());
toscaCredentialProperties
.
put
(
"attributes"
,
cred
.
getAttributes
());
toscaCredential
.
put
(
"properties"
,
toscaCredentialProperties
);
credentials
.
add
(
toscaCredential
);
}
PlanResponse
plan
=
simplePlanService
.
getDao
().
findOne
(
provisionRequest
.
getPlanID
());
Map
<
String
,
Object
>
toscaPlan
=
plan
.
getKeyValue
();
Map
<
String
,
Object
>
nodeTemplates
=
(
Map
<
String
,
Object
>)
((
Map
<
String
,
Object
>)
toscaPlan
.
get
(
"topology_template"
)).
get
(
"node_templates"
);
Iterator
it
=
nodeTemplates
.
entrySet
().
iterator
();
while
(
it
.
hasNext
())
{
Map
.
Entry
node
=
(
Map
.
Entry
)
it
.
next
();
Map
<
String
,
Object
>
value
=
(
Map
<
String
,
Object
>)
node
.
getValue
();
String
type
=
(
String
)
value
.
get
(
"type"
);
if
(
type
.
equals
(
"tosca.nodes.ARTICONF.VM.topology"
))
{
Map
<
String
,
Object
>
properties
=
(
Map
<
String
,
Object
>)
value
.
get
(
"properties"
);
properties
.
put
(
"credentials"
,
credentials
);
}
}
return
plan
;
}
}
drip-api/src/main/java/nl/uva/sne/drip/api/v1/rest/ProvisionController.java
View file @
446c8c13
...
...
@@ -153,7 +153,7 @@ public class ProvisionController {
List
<
String
>
getIds
()
{
List
<
ProvisionResponse
>
all
=
provisionService
.
findAll
();
List
<
String
>
ids
=
new
ArrayList
<>(
all
.
size
());
for
(
ProvisionRe
quest
pi
:
all
)
{
for
(
ProvisionRe
sponse
pi
:
all
)
{
ids
.
add
(
pi
.
getId
());
}
return
ids
;
...
...
@@ -181,9 +181,9 @@ public class ProvisionController {
throw
new
BadRequestException
();
}
try
{
req
=
provisionService
.
provisionResources
(
req
,
1
);
ProvisionResponse
resp
=
provisionService
.
provisionResources
(
req
,
1
);
return
re
q
.
getId
();
return
re
sp
.
getId
();
}
catch
(
Exception
ex
)
{
if
(
ex
instanceof
nl
.
uva
.
sne
.
drip
.
api
.
exception
.
PlanNotFoundException
...
...
@@ -210,16 +210,16 @@ public class ProvisionController {
})
public
@ResponseBody
String
postProvisionResponse
(
@RequestBody
ProvisionResponse
resp
)
{
if
(
resp
.
getCloudCredentialsIDs
()
==
null
||
resp
.
getCloudCredentialsIDs
().
get
(
0
)
==
null
||
resp
.
getCloudCredentialsIDs
().
get
(
0
).
length
()
<
2
)
{
throw
new
BadRequestException
();
}
if
(
resp
.
getPlanID
()
==
null
||
resp
.
getPlanID
().
length
()
<
2
)
{
throw
new
BadRequestException
();
}
if
(
resp
.
getDeployParameters
()
==
null
||
resp
.
getDeployParameters
().
get
(
0
)
==
null
)
{
throw
new
BadRequestException
();
}
//
if (resp.getCloudCredentialsIDs() == null || resp.getCloudCredentialsIDs().get(0) == null
//
|| resp.getCloudCredentialsIDs().get(0).length() < 2) {
//
throw new BadRequestException();
//
}
//
if (resp.getPlanID() == null || resp.getPlanID().length() < 2) {
//
throw new BadRequestException();
//
}
//
if (resp.getDeployParameters() == null || resp.getDeployParameters().get(0) == null) {
//
throw new BadRequestException();
//
}
resp
=
provisionService
.
save
(
resp
);
return
resp
.
getId
();
...
...
drip-commons/src/main/java/nl/uva/sne/drip/drip/commons/data/v1/external/ProvisionResponse.java
View file @
446c8c13
...
...
@@ -16,6 +16,7 @@
package
nl
.
uva
.
sne
.
drip
.
drip
.
commons
.
data
.
v1
.
external
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
com.webcohesion.enunciate.metadata.DocumentationExample
;
import
java.util.ArrayList
;
import
java.util.List
;
...
...
@@ -25,36 +26,55 @@ import java.util.List;
* @author S. Koulouzis
*/
@JsonInclude
(
JsonInclude
.
Include
.
NON_NULL
)
public
class
ProvisionResponse
extends
ProvisionRequest
{
public
class
ProvisionResponse
extends
KeyValueHolder
{
private
List
<
DeployParameter
>
deployParameters
;
private
ArrayList
<
String
>
cloudKeyPairIDs
;
private
String
planID
;
/**
* The
deploy parameters
.
* The
ID of the plan <code>PlanResponse</code> to provision for
.
*
* @return the
deployParameters
* @return the
planID
*/
public
List
<
DeployParameter
>
getDeployParameters
()
{
return
deployParameters
;
@DocumentationExample
(
"ASedsfd46b4fDFd83ba1q"
)
public
String
getPlanID
()
{
return
planID
;
}
/**
* @param
deployParameters the deployParameters
to set
* @param
planID the planID
to set
*/
public
void
set
DeployParameters
(
List
<
DeployParameter
>
deployParameters
)
{
this
.
deployParameters
=
deployParameters
;
public
void
set
PlanID
(
String
planID
)
{
this
.
planID
=
planID
;
}
public
void
setCloudKeyPairIDs
(
ArrayList
<
String
>
cloudKeyPairIDs
)
{
this
.
cloudKeyPairIDs
=
cloudKeyPairIDs
;
}
/**
* @return the cloudKeyPairIDs
*/
public
ArrayList
<
String
>
getCloudKeyPairIDs
()
{
return
cloudKeyPairIDs
;
}
// private List<DeployParameter> deployParameters;
// private ArrayList<String> cloudKeyPairIDs;
//
// /**
// * The deploy parameters.
// *
// * @return the deployParameters
// */
// public List<DeployParameter> getDeployParameters() {
// return deployParameters;
// }
//
// /**
// * @param deployParameters the deployParameters to set
// */
// public void setDeployParameters(List<DeployParameter> deployParameters) {
// this.deployParameters = deployParameters;
// }
//
// public void setCloudKeyPairIDs(ArrayList<String> cloudKeyPairIDs) {
// this.cloudKeyPairIDs = cloudKeyPairIDs;
// }
//
// /**
// * @return the cloudKeyPairIDs
// */
// public ArrayList<String> getCloudKeyPairIDs() {
// return cloudKeyPairIDs;
// }
}
drip-planner2provisioner/src/main/java/nl/uva/sne/drip/drip/converter/P2PConverter.java
View file @
446c8c13
...
...
@@ -4,7 +4,6 @@ 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
;
...
...
@@ -25,7 +24,7 @@ import org.json.JSONException;
public
class
P2PConverter
{
public
static
SimplePlanContainer
transfer
(
Map
<
String
,
Object
>
toscaPlanMap
,
public
static
SimplePlanContainer
transfer
(
Map
<
String
,
Object
>
toscaPlanMap
,
String
userName
,
String
domainName
,
String
cloudProvider
)
throws
JsonParseException
,
JsonMappingException
,
IOException
,
JSONException
{
if
(
cloudProvider
!=
null
)
{
cloudProvider
=
cloudProvider
.
toUpperCase
();
...
...
@@ -34,15 +33,19 @@ public class P2PConverter {
Map
<
String
,
Object
>
topologyTemplate
=
(
Map
<
String
,
Object
>)
((
Map
<
String
,
Object
>)
toscaPlanMap
.
get
(
"topology_template"
)).
get
(
"node_templates"
);
//Get the domain provider and vm list
Map
<
String
,
Object
>
topologyNode
=
null
;
String
topologyNodeName
=
null
;
List
<
String
>
vmNames
=
new
ArrayList
<>();
for
(
Map
.
Entry
<
String
,
Object
>
entry
:
topologyTemplate
.
entrySet
())
{
Map
<
String
,
Object
>
node
=
(
Map
<
String
,
Object
>)
entry
.
getValue
();
String
type
=
(
String
)
node
.
get
(
"type"
);
if
(
type
.
equals
(
"tosca.nodes.ARTICONF.VM.topology"
))
{
Map
<
String
,
Object
>
properties
=
(
Map
<
String
,
Object
>)
node
.
get
(
"properties"
);
topologyNode
=
node
;
topologyNodeName
=
entry
.
getKey
();
Map
<
String
,
Object
>
properties
=
(
Map
<
String
,
Object
>)
topologyNode
.
get
(
"properties"
);
domainName
=
(
String
)
properties
.
get
(
"domain"
);
cloudProvider
=
(
String
)
properties
.
get
(
"provider"
);
List
<
Object
>
requirements
=
(
List
<
Object
>)
n
ode
.
get
(
"requirements"
);
List
<
Object
>
requirements
=
(
List
<
Object
>)
topologyN
ode
.
get
(
"requirements"
);
for
(
Object
requirement
:
requirements
)
{
Map
<
String
,
Object
>
requirementMap
=
(
Map
<
String
,
Object
>)
requirement
;
...
...
@@ -51,13 +54,16 @@ public class P2PConverter {
String
nodeName
=
(
String
)
((
Map
<
String
,
Object
>)
requirementMap
.
get
(
requirementEntry
.
getKey
())).
get
(
"node"
);
vmNames
.
add
(
nodeName
);
}
break
;
}
}
List
<
Object
>
vmList
=
new
ArrayList
<>();
for
(
String
vmName
:
vmNames
)
{
Map
<
String
,
Object
>
vm
=
(
Map
<
String
,
Object
>)
topologyTemplate
.
get
(
vmName
);
userName
=
(
String
)
((
Map
<
String
,
Object
>)
vm
.
get
(
"properties"
)).
get
(
"user_name"
);
vm
.
put
(
"name"
,
vmName
);
Map
<
String
,
Object
>
properties
=
(
Map
<
String
,
Object
>)
vm
.
get
(
"properties"
);
userName
=
(
String
)
properties
.
get
(
"user_name"
);
String
hostName
=
(
String
)
properties
.
get
(
"host_name"
);
vm
.
put
(
"name"
,
hostName
);
vmList
.
add
(
vm
);
}
...
...
@@ -71,23 +77,24 @@ public class P2PConverter {
String
provisionerScalingMode
=
"fixed"
;
SubTopology
subTopology
=
createSubTopology
(
cloudProvider
);
subTopologyInfo
.
cloudProvider
=
cloudProvider
;
subTopologyInfo
.
topology
=
UUID
.
randomUUID
().
toString
(
);
subTopologyInfo
.
topology
=
topologyNodeName
.
replaceAll
(
"_"
,
""
);
subTopologyInfo
.
domain
=
domainName
;
subTopologyInfo
.
status
=
"fresh"
;
subTopologyInfo
.
statusInfo
=
null
;
subTopologyInfo
.
tag
=
provisionerScalingMode
;
Map
<
String
,
SubTopologyInfo
>
subTopologyInfos
=
new
HashMap
<>();
int
counter
=
0
;
for
(
Object
element
:
vmList
)
{
VM
vm
=
createVM
(
element
,
cloudProvider
,
firstVM
);
firstVM
=
false
;
counter
++;
if
(
isScalable
(
element
))
{
subTopologyInfo
=
new
SubTopologyInfo
();
subTopology
=
createSubTopology
(
cloudProvider
);
provisionerScalingMode
=
"scaling"
;
subTopologyInfo
.
cloudProvider
=
cloudProvider
;
subTopologyInfo
.
topology
=
UUID
.
randomUUID
().
toString
()
;
subTopologyInfo
.
topology
=
"subTopology"
+
counter
;
subTopologyInfo
.
domain
=
domainName
;
subTopologyInfo
.
status
=
"fresh"
;
subTopologyInfo
.
tag
=
provisionerScalingMode
;
...
...
drip-provisioner/src/main/java/nl/uva/sne/drip/drip/provisioner/utils/MessageParsing.java
View file @
446c8c13
...
...
@@ -28,6 +28,7 @@ import java.util.ArrayList;
import
java.util.Arrays
;
import
java.util.Base64
;
import
java.util.HashSet
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
...
...
@@ -56,6 +57,7 @@ import provisioning.credential.ExoGENICredential;
* @author S. Koulouzis
*/
public
class
MessageParsing
{
private
static
SimplePlanContainer
simplePlan
;
public
static
List
<
File
>
getTopologies
(
JSONArray
parameters
,
String
tempInputDirPath
,
int
level
)
throws
JSONException
,
IOException
{
...
...
@@ -67,7 +69,6 @@ public class MessageParsing {
String
toscaPlan
=
new
String
(
Base64
.
getDecoder
().
decode
((
String
)
param
.
get
(
"value"
)));
Map
<
String
,
Object
>
toscaPlanMap
=
Converter
.
ymlString2Map
(
toscaPlan
);
if
(
level
==
0
)
{
simplePlan
=
P2PConverter
.
transfer
(
toscaPlanMap
,
null
,
null
,
null
);
String
fileName
=
"planner_output_all.yml"
;
...
...
@@ -178,22 +179,39 @@ public class MessageParsing {
mapper
.
configure
(
JsonParser
.
Feature
.
ALLOW_SINGLE_QUOTES
,
true
);
MessageParameter
messageParam
=
mapper
.
readValue
(
param
.
toString
(),
MessageParameter
.
class
);
String
name
=
messageParam
.
getName
();
String
value
=
messageParam
.
getValue
();
if
(
name
.
equals
(
"cloud_credential"
))
{
if
(
name
.
equals
(
"topology"
))
{
Credential
credential
=
null
;
value
=
value
.
substring
(
1
,
value
.
length
()
-
1
);
CloudCredentials
cred
=
mapper
.
readValue
(
value
,
CloudCredentials
.
class
);
if
(
cred
.
getCloudProviderName
().
toLowerCase
().
equals
(
"ec2"
))
{
String
toscaPlan
=
new
String
(
Base64
.
getDecoder
().
decode
((
String
)
param
.
get
(
"value"
)));
Map
<
String
,
Object
>
toscaPlanMap
=
Converter
.
ymlString2Map
(
toscaPlan
);
Map
<
String
,
Object
>
nodeTemplates
=
(
Map
<
String
,
Object
>)
((
Map
<
String
,
Object
>)
toscaPlanMap
.
get
(
"topology_template"
)).
get
(
"node_templates"
);
Iterator
it
=
nodeTemplates
.
entrySet
().
iterator
();
List
<
Map
<
String
,
Object
>>
toscaCredentialsList
=
new
ArrayList
<>();
while
(
it
.
hasNext
())
{
Map
.
Entry
node
=
(
Map
.
Entry
)
it
.
next
();
Map
<
String
,
Object
>
nodeValue
=
(
Map
<
String
,
Object
>)
node
.
getValue
();
String
type
=
(
String
)
nodeValue
.
get
(
"type"
);
if
(
type
.
equals
(
"tosca.nodes.ARTICONF.VM.topology"
))
{
Map
<
String
,
Object
>
properties
=
(
Map
<
String
,
Object
>)
nodeValue
.
get
(
"properties"
);
toscaCredentialsList
=
(
List
<
Map
<
String
,
Object
>>)
properties
.
get
(
"credentials"
);
break
;
}
}
for
(
Map
<
String
,
Object
>
toscaCredential
:
toscaCredentialsList
)
{
Map
<
String
,
Object
>
toscaCredentialProperties
=
(
Map
<
String
,
Object
>)
toscaCredential
.
get
(
"properties"
);
String
cloudProviderName
=
(
String
)
toscaCredentialProperties
.
get
(
"cloud_provider_name"
);
if
(
cloudProviderName
.
toLowerCase
().
equals
(
"ec2"
))
{
EC2Credential
ec2
=
new
EC2Credential
();
ec2
.
accessKey
=
cred
.
getAccessKeyId
(
);
ec2
.
secretKey
=
cred
.
getSecretKey
(
);
ec2
.
accessKey
=
(
String
)
toscaCredentialProperties
.
get
(
"accessKeyId"
);
ec2
.
secretKey
=
(
String
)
toscaCredentialProperties
.
get
(
"token"
);
credential
=
ec2
;
}
if
(
cred
.
getCloudProviderName
()
.
toLowerCase
().
equals
(
"egi"
))
{
if
(
cloudProviderName
.
toLowerCase
().
equals
(
"egi"
))
{
EGICredential
egi
=
new
EGICredential
();
Map
<
String
,
Object
>
att
=
cred
.
getAttributes
(
);
Map
<
String
,
Object
>
att
=
(
Map
<
String
,
Object
>)
toscaCredentialProperties
.
get
(
"attributes"
);
String
trustedCertificatesURL
=
null
;
if
(
att
!=
null
&&
att
.
containsKey
(
"trustedCertificatesURL"
))
{
trustedCertificatesURL
=
(
String
)
att
.
get
(
"trustedCertificatesURL"
);
...
...
@@ -214,18 +232,18 @@ public class MessageParsing {
myVOs
=
((
String
)
att
.
get
(
"voms"
)).
split
(
","
);
voNames
=
(
List
)
Arrays
.
asList
(
myVOs
);
}
egi
.
proxyFilePath
=
AAUtils
.
generateProxy
(
cred
.
getAccessKeyId
(),
cred
.
getSecretKey
(
),
SOURCE
.
MY_PROXY
,
myProxyEndpoint
,
voNames
);
egi
.
proxyFilePath
=
AAUtils
.
generateProxy
((
String
)
toscaCredentialProperties
.
get
(
"accessKeyId"
),
(
String
)
toscaCredentialProperties
.
get
(
"token"
),
SOURCE
.
MY_PROXY
,
myProxyEndpoint
,
voNames
);
}
else
{
egi
.
proxyFilePath
=
AAUtils
.
generateProxy
(
cred
.
getAccessKeyId
(),
cred
.
getSecretKey
(
),
SOURCE
.
PROXY_FILE
,
myProxyEndpoint
,
null
);
egi
.
proxyFilePath
=
AAUtils
.
generateProxy
((
String
)
toscaCredentialProperties
.
get
(
"accessKeyId"
),
(
String
)
toscaCredentialProperties
.
get
(
"token"
),
SOURCE
.
PROXY_FILE
,
myProxyEndpoint
,
null
);
}
egi
.
trustedCertPath
=
PropertyValues
.
TRUSTED_CERTIFICATE_FOLDER
;
credential
=
egi
;
}
if
(
cred
.
getCloudProviderName
()
.
toLowerCase
().
equals
(
"exogeni"
))
{
if
(
cloudProviderName
.
toLowerCase
().
equals
(
"exogeni"
))
{
ExoGENICredential
exoGeniCredential
=
new
ExoGENICredential
();
exoGeniCredential
.
keyAlias
=
cred
.
getAccessKeyId
(
);
exoGeniCredential
.
keyPassword
=
cred
.
getSecretKey
(
);
Map
<
String
,
Object
>
att
=
cred
.
getAttributes
(
);
exoGeniCredential
.
keyAlias
=
(
String
)
toscaCredentialProperties
.
get
(
"accessKeyId"
);
exoGeniCredential
.
keyPassword
=
(
String
)
toscaCredentialProperties
.
get
(
"token"
);
Map
<
String
,
Object
>
att
=
(
Map
<
String
,
Object
>)
toscaCredentialProperties
.
get
(
"attributes"
);
if
(
att
!=
null
&&
att
.
containsKey
(
"keystore"
))
{
String
javaKeyStoreEncoded
=
(
String
)
att
.
get
(
"keystore"
);
byte
[]
decoded
=
Base64
.
getDecoder
().
decode
(
javaKeyStoreEncoded
);
...
...
@@ -233,24 +251,10 @@ public class MessageParsing {
FileUtils
.
writeByteArrayToFile
(
keyStoreFile
,
decoded
);
exoGeniCredential
.
userKeyPath
=
keyStoreFile
.
getAbsolutePath
();
}
credential
=
exoGeniCredential
;
}
}
// for (KeyPair pair : cred.getKeyPairs()) {
// if (pair != null) {
// File dir = new File(tempInputDirPath + File.separator + pair.getId());
// dir.mkdir();
// Key privateKey = pair.getPrivateKey();
// if (privateKey != null) {
// writeValueToFile(privateKey.getKey(), new File(dir.getAbsolutePath() + File.separator + privateKey.getName()));
// }
// Key publicKey = pair.getPublicKey();
// if (publicKey != null) {
// writeValueToFile(publicKey.getKey(), new File(dir.getAbsolutePath() + File.separator + publicKey.getName()));
// }
// }
// }
credentials
.
add
(
credential
);
}
}
...
...
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