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
97fcf58a
Commit
97fcf58a
authored
7 years ago
by
Spiros Koulouzis
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
implementing vm scaling. We hit null pointer exception at EGISEngine line 654
parent
a3d328f3
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
103 additions
and
32 deletions
+103
-32
DeployService.java
.../main/java/nl/uva/sne/drip/api/service/DeployService.java
+5
-5
ProvisionService.java
...in/java/nl/uva/sne/drip/api/service/ProvisionService.java
+83
-24
DeployController.java
...in/java/nl/uva/sne/drip/api/v1/rest/DeployController.java
+1
-3
ProvisionController.java
...java/nl/uva/sne/drip/api/v1/rest/ProvisionController.java
+14
-0
No files found.
drip-api/src/main/java/nl/uva/sne/drip/api/service/DeployService.java
View file @
97fcf58a
...
...
@@ -53,7 +53,7 @@ import nl.uva.sne.drip.api.exception.KeyException;
import
nl.uva.sne.drip.commons.utils.Converter
;
import
nl.uva.sne.drip.drip.commons.data.v1.external.ConfigurationRepresentation
;
import
nl.uva.sne.drip.drip.commons.data.v1.external.KeyPair
;
import
nl.uva.sne.drip.drip.commons.data.v1.external.Scale
Deploymet
Request
;
import
nl.uva.sne.drip.drip.commons.data.v1.external.ScaleRequest
;
import
nl.uva.sne.drip.drip.commons.data.v1.external.ansible.AnsibleOutput
;
import
nl.uva.sne.drip.drip.commons.data.v1.external.ansible.AnsibleResult
;
import
nl.uva.sne.drip.drip.commons.data.v1.external.ansible.BenchmarkResult
;
...
...
@@ -274,19 +274,19 @@ public class DeployService {
return
scaleParameter
;
}
public
DeployResponse
scale
(
Scale
Deploymet
Request
scaleReq
)
throws
IOException
,
TimeoutException
,
InterruptedException
,
JSONException
,
Exception
{
public
DeployResponse
scale
(
ScaleRequest
scaleReq
)
throws
IOException
,
TimeoutException
,
InterruptedException
,
JSONException
,
Exception
{
//Deployer needs configurationID -> name_of_deployment
String
deployId
=
scaleReq
.
get
Deploy
ID
();
String
deployId
=
scaleReq
.
get
ScaleTarget
ID
();
DeployResponse
deployment
=
this
.
findOne
(
deployId
);
String
confID
=
deployment
.
getConfigurationID
();
ConfigurationRepresentation
configuration
=
configurationService
.
findOne
(
confID
);
Map
<
String
,
Object
>
map
=
configuration
.
getKeyValue
();
Map
<
String
,
Object
>
services
=
(
Map
<
String
,
Object
>)
map
.
get
(
"services"
);
if
(!
services
.
containsKey
(
scaleReq
.
getS
ervice
Name
()))
{
if
(!
services
.
containsKey
(
scaleReq
.
getS
caleTarget
Name
()))
{
throw
new
BadRequestException
(
"Service name does not exist in this deployment"
);
}
Message
message
=
buildDeployerMessage
(
deployment
.
getProvisionID
(),
"scale"
,
confID
,
scaleReq
.
getS
ervice
Name
(),
scaleReq
.
getNumOfInstances
());
Message
message
=
buildDeployerMessage
(
deployment
.
getProvisionID
(),
"scale"
,
confID
,
scaleReq
.
getS
caleTarget
Name
(),
scaleReq
.
getNumOfInstances
());
try
(
DRIPCaller
deployer
=
new
DeployerCaller
(
messageBrokerHost
);)
{
Message
response
=
(
deployer
.
call
(
message
));
...
...
This diff is collapsed.
Click to expand it.
drip-api/src/main/java/nl/uva/sne/drip/api/service/ProvisionService.java
View file @
97fcf58a
...
...
@@ -58,10 +58,10 @@ import org.springframework.security.access.prepost.PostFilter;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.security.core.context.SecurityContextHolder
;
import
nl.uva.sne.drip.api.dao.ProvisionResponseDao
;
import
nl.uva.sne.drip.api.dao.KeyPairDao
;
import
nl.uva.sne.drip.api.rpc.ProvisionerCaller1
;
import
nl.uva.sne.drip.drip.commons.data.v1.external.Key
;
import
nl.uva.sne.drip.drip.commons.data.v1.external.KeyPair
;
import
nl.uva.sne.drip.drip.commons.data.v1.external.ScaleRequest
;
/**
*
...
...
@@ -74,14 +74,11 @@ public class ProvisionService {
@Autowired
private
ProvisionResponseDao
provisionDao
;
@Autowired
private
KeyPairDao
keyDao
;
@Autowired
private
CloudCredentialsService
cloudCredentialsService
;
@Autowired
private
SimplePlannerService
p
lanService
;
private
SimplePlannerService
simpleP
lanService
;
@Autowired
private
ScriptService
userScriptService
;
...
...
@@ -232,7 +229,7 @@ public class ProvisionService {
}
private
List
<
MessageParameter
>
buildTopologyParams
(
String
planID
)
throws
JSONException
,
FileNotFoundException
{
PlanResponse
plan
=
p
lanService
.
getDao
().
findOne
(
planID
);
PlanResponse
plan
=
simpleP
lanService
.
getDao
().
findOne
(
planID
);
if
(
plan
==
null
)
{
throw
new
PlanNotFoundException
();
...
...
@@ -252,7 +249,7 @@ public class ProvisionService {
Set
<
String
>
ids
=
plan
.
getLoweLevelPlanIDs
();
if
(
ids
!=
null
)
{
for
(
String
lowID
:
ids
)
{
PlanResponse
lowPlan
=
p
lanService
.
getDao
().
findOne
(
lowID
);
PlanResponse
lowPlan
=
simpleP
lanService
.
getDao
().
findOne
(
lowID
);
topology
=
new
MessageParameter
();
topology
.
setName
(
"topology"
);
String
value
=
Converter
.
map2YmlString
(
lowPlan
.
getKeyValue
());
...
...
@@ -446,7 +443,7 @@ public class ProvisionService {
// + File.separator + "docs" + File.separator + "json_samples"
// + File.separator + "ec2_provisioner_provisoned3.json");
return
parseCreateResourcesResponse
(
response
.
getParameters
(),
provisionRequest
);
return
parseCreateResourcesResponse
(
response
.
getParameters
(),
provisionRequest
,
null
);
}
...
...
@@ -454,23 +451,68 @@ public class ProvisionService {
private
ProvisionResponse
callProvisioner1
(
ProvisionRequest
provisionRequest
)
throws
IOException
,
TimeoutException
,
JSONException
,
InterruptedException
,
Exception
{
try
(
DRIPCaller
provisioner
=
new
ProvisionerCaller1
(
messageBrokerHost
);)
{
Message
provisionerInvokationMessage
=
buildProvisione1Message
(
provisionRequest
);
Message
provisionerInvokationMessage
=
buildProvisione
r
1Message
(
provisionRequest
);
Message
response
=
(
provisioner
.
call
(
provisionerInvokationMessage
));
return
parseCreateResourcesResponse
(
response
.
getParameters
(),
provisionRequest
);
return
parseCreateResourcesResponse
(
response
.
getParameters
(),
provisionRequest
,
null
);
}
}
public
void
deleteProvisionedResources
(
ProvisionResponse
provisionInfo
)
throws
IOException
,
TimeoutException
,
InterruptedException
,
JSONException
{
try
(
DRIPCaller
provisioner
=
new
ProvisionerCaller1
(
messageBrokerHost
);)
{
Message
deleteInvokationMessage
=
build
DeleteMessage
(
provisionInfo
);
Message
deleteInvokationMessage
=
build
TopoplogyModificationMessage
(
provisionInfo
,
"kill_topology"
,
null
);
Message
response
=
(
provisioner
.
call
(
deleteInvokationMessage
));
parseDeleteResourcesResponse
(
response
.
getParameters
(),
provisionInfo
);
}
}
public
ProvisionResponse
scale
(
ScaleRequest
scaleRequest
)
throws
IOException
,
TimeoutException
,
JSONException
,
InterruptedException
,
Exception
{
String
provisionID
=
scaleRequest
.
getScaleTargetID
();
String
scaleName
=
scaleRequest
.
getScaleTargetName
();
if
(
scaleName
==
null
||
scaleName
.
length
()
<
1
)
{
throw
new
BadRequestException
(
"Must specify wich topology to scale. \'scaleName\' was empty "
);
}
ProvisionResponse
provisionInfo
=
findOne
(
provisionID
);
boolean
scaleNameExists
=
false
;
Map
<
String
,
Object
>
plan
=
provisionInfo
.
getKeyValue
();
String
cloudProvider
=
null
;
String
domain
=
null
;
for
(
String
key
:
plan
.
keySet
())
{
Map
<
String
,
Object
>
subMap
=
(
Map
<
String
,
Object
>)
plan
.
get
(
key
);
if
(
subMap
.
containsKey
(
"topologies"
))
{
List
<
Map
<
String
,
Object
>>
topologies
=
(
List
<
Map
<
String
,
Object
>>)
subMap
.
get
(
"topologies"
);
for
(
Map
<
String
,
Object
>
topology
:
topologies
)
{
if
(
topology
.
get
(
"tag"
).
equals
(
"scaling"
)
&&
topology
.
get
(
"topology"
).
equals
(
scaleName
))
{
cloudProvider
=
(
String
)
topology
.
get
(
"cloudProvider"
);
domain
=
(
String
)
topology
.
get
(
"domain"
);
scaleNameExists
=
true
;
break
;
}
}
}
if
(
scaleNameExists
)
{
break
;
}
}
if
(!
scaleNameExists
)
{
throw
new
BadRequestException
(
"Name of topology dosen't exist"
);
}
try
(
DRIPCaller
provisioner
=
new
ProvisionerCaller1
(
messageBrokerHost
);)
{
Map
<
String
,
String
>
extra
=
new
HashMap
<>();
extra
.
put
(
"scale_topology_name"
,
scaleName
);
extra
.
put
(
"number_of_instances"
,
String
.
valueOf
(
scaleRequest
.
getNumOfInstances
()));
extra
.
put
(
"cloud_provider"
,
cloudProvider
);
extra
.
put
(
"domain"
,
domain
);
Message
scaleMessage
=
buildTopoplogyModificationMessage
(
provisionInfo
,
"scale_topology"
,
extra
);
Message
response
=
provisioner
.
call
(
scaleMessage
);
parseCreateResourcesResponse
(
response
.
getParameters
(),
null
,
provisionInfo
);
}
return
provisionInfo
;
}
private
Message
buildProvisione1Message
(
ProvisionRequest
provisionRequest
)
throws
JSONException
,
FileNotFoundException
,
IOException
{
private
Message
buildProvisione
r
1Message
(
ProvisionRequest
provisionRequest
)
throws
JSONException
,
FileNotFoundException
,
IOException
{
Message
invokationMessage
=
new
Message
();
List
<
MessageParameter
>
parameters
=
new
ArrayList
();
...
...
@@ -512,13 +554,13 @@ public class ProvisionService {
}
private
Message
build
DeleteMessage
(
ProvisionResponse
provisionInfo
)
throws
JSONException
,
IOException
{
private
Message
build
TopoplogyModificationMessage
(
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
(
"kill_topology"
);
action
.
setValue
(
actionName
);
parameters
.
add
(
action
);
List
<
MessageParameter
>
topologies
=
buildProvisionedTopologyParams
(
provisionInfo
);
...
...
@@ -541,7 +583,17 @@ public class ProvisionService {
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
;
...
...
@@ -563,9 +615,12 @@ public class ProvisionService {
return
parameters
;
}
private
ProvisionResponse
parseCreateResourcesResponse
(
List
<
MessageParameter
>
parameters
,
ProvisionRequest
provisionRequest
)
throws
Exception
{
ProvisionResponse
provisionResponse
=
new
ProvisionResponse
();
provisionResponse
.
setTimestamp
(
System
.
currentTimeMillis
());
private
ProvisionResponse
parseCreateResourcesResponse
(
List
<
MessageParameter
>
parameters
,
ProvisionRequest
provisionRequest
,
ProvisionResponse
provisionResponse
)
throws
Exception
{
if
(
provisionResponse
==
null
)
{
provisionResponse
=
new
ProvisionResponse
();
provisionResponse
.
setTimestamp
(
System
.
currentTimeMillis
());
}
List
<
DeployParameter
>
deployParameters
=
new
ArrayList
<>();
Map
<
String
,
Object
>
kvMap
=
null
;
KeyPair
userKey
=
new
KeyPair
();
...
...
@@ -658,8 +713,13 @@ public class ProvisionService {
break
;
}
}
List
<
String
>
userKeyIds
=
null
;
if
(
provisionRequest
!=
null
)
{
userKeyIds
=
provisionRequest
.
getUserKeyPairIDs
();
}
else
{
userKeyIds
=
provisionResponse
.
getCloudKeyPairIDs
();
}
List
<
String
>
userKeyIds
=
provisionRequest
.
getUserKeyPairIDs
();
if
(
userKeyIds
!=
null
&&
!
userKeyIds
.
isEmpty
())
{
}
else
{
userKeyIds
=
new
ArrayList
<>();
...
...
@@ -688,16 +748,16 @@ public class ProvisionService {
provisionResponse
.
setDeployParameters
(
deployParameters
);
provisionResponse
.
setKvMap
(
kvMap
);
provisionResponse
.
setCloudCredentialsIDs
(
provisionRequest
.
getCloudCredentialsIDs
());
if
(
provisionRequest
!=
null
)
{
provisionResponse
.
setCloudCredentialsIDs
(
provisionRequest
.
getCloudCredentialsIDs
());
provisionResponse
.
setPlanID
(
provisionRequest
.
getPlanID
());
}
provisionResponse
.
setUserKeyPairIDs
(
userKeyIds
);
provisionResponse
.
setDeployerKeyPairIDs
(
deployerKeyIds
);
provisionResponse
.
setPlanID
(
provisionRequest
.
getPlanID
());
provisionResponse
=
save
(
provisionResponse
);
return
provisionResponse
;
}
private
void
parseDeleteResourcesResponse
(
List
<
MessageParameter
>
parameters
,
ProvisionResponse
provisionInfo
)
{
...
...
@@ -705,5 +765,4 @@ public class ProvisionService {
// System.err.println(p.getName() + " : " + p.getValue());
// }
}
}
This diff is collapsed.
Click to expand it.
drip-api/src/main/java/nl/uva/sne/drip/api/v1/rest/DeployController.java
View file @
97fcf58a
...
...
@@ -35,7 +35,6 @@ import nl.uva.sne.drip.api.service.DeployService;
import
nl.uva.sne.drip.api.service.UserService
;
import
nl.uva.sne.drip.drip.commons.data.v1.external.DeployRequest
;
import
nl.uva.sne.drip.drip.commons.data.v1.external.DeployResponse
;
import
nl.uva.sne.drip.drip.commons.data.v1.external.ScaleDeploymetRequest
;
import
nl.uva.sne.drip.drip.commons.data.v1.external.ScaleRequest
;
import
org.json.JSONException
;
import
org.springframework.stereotype.Controller
;
...
...
@@ -91,9 +90,8 @@ public class DeployController {
@RequestMapping
(
value
=
"/scale"
,
method
=
RequestMethod
.
POST
)
@RolesAllowed
({
UserService
.
USER
,
UserService
.
ADMIN
})
public
@ResponseBody
String
scaleDeployment
(
@RequestBody
Scale
Deploymet
Request
scaleRequest
)
{
String
scaleDeployment
(
@RequestBody
ScaleRequest
scaleRequest
)
{
try
{
return
deployService
.
scale
(
scaleRequest
).
getId
();
...
...
This diff is collapsed.
Click to expand it.
drip-api/src/main/java/nl/uva/sne/drip/api/v1/rest/ProvisionController.java
View file @
97fcf58a
...
...
@@ -37,6 +37,7 @@ import nl.uva.sne.drip.api.exception.NotFoundException;
import
nl.uva.sne.drip.api.service.ProvisionService
;
import
nl.uva.sne.drip.api.service.UserService
;
import
nl.uva.sne.drip.drip.commons.data.v1.external.ProvisionResponse
;
import
nl.uva.sne.drip.drip.commons.data.v1.external.ScaleRequest
;
import
org.json.JSONException
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestBody
;
...
...
@@ -188,6 +189,19 @@ public class ProvisionController {
return
resp
.
getId
();
}
@RequestMapping
(
value
=
"/scale"
,
method
=
RequestMethod
.
POST
)
@RolesAllowed
({
UserService
.
USER
,
UserService
.
ADMIN
})
public
@ResponseBody
String
scaleDeployment
(
@RequestBody
ScaleRequest
scaleRequest
)
{
try
{
return
provisionService
.
scale
(
scaleRequest
).
getId
();
}
catch
(
IOException
|
TimeoutException
|
JSONException
ex
)
{
Logger
.
getLogger
(
ProvisionController
.
class
.
getName
()).
log
(
Level
.
SEVERE
,
null
,
ex
);
}
catch
(
Exception
ex
)
{
Logger
.
getLogger
(
ProvisionController
.
class
.
getName
()).
log
(
Level
.
SEVERE
,
null
,
ex
);
}
return
null
;
}
@RequestMapping
(
value
=
"/sample"
,
method
=
RequestMethod
.
GET
)
@RolesAllowed
({
UserService
.
USER
,
UserService
.
ADMIN
})
...
...
This diff is collapsed.
Click to expand it.
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