Skip to content

Commit 249834f

Browse files
committed
If volume type set to gp2 - attach shared on instance creation
1 parent ad3b688 commit 249834f

File tree

1 file changed

+55
-68
lines changed

1 file changed

+55
-68
lines changed

ec2stack/providers/cloudstack/instances.py

Lines changed: 55 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
from flask import current_app
99

1010
from ec2stack.providers import cloudstack
11-
from ec2stack.providers.cloudstack import requester, service_offerings, zones, disk_offerings
11+
from ec2stack.providers.cloudstack import requester, service_offerings, zones, \
12+
disk_offerings, volumes
1213
from ec2stack import helpers, errors
1314

1415

@@ -103,6 +104,48 @@ def _describe_instances_response(response):
103104
}
104105

105106

107+
@helpers.authentication_required
108+
def reboot_instance():
109+
"""
110+
Reboot an instance.
111+
112+
@return: Response.
113+
"""
114+
helpers.require_parameters(['InstanceId.1'])
115+
instance_id = helpers.get('InstanceId.1')
116+
_reboot_instance_request(instance_id)
117+
return _reboot_instance_response()
118+
119+
120+
def _reboot_instance_request(instance_id):
121+
"""
122+
Request to reboot an instance.
123+
124+
@param instance_id: Id of instance to be rebooted.
125+
@return: Response.
126+
"""
127+
args = {'command': 'rebootVirtualMachine',
128+
'id': instance_id}
129+
response = requester.make_request_async(args)
130+
response = response['virtualmachine']
131+
return response
132+
133+
134+
def _reboot_instance_response():
135+
"""
136+
Generates a response for a reboot instance request.
137+
138+
@return: Response.
139+
"""
140+
response = {
141+
'template_name_or_list': 'status.xml',
142+
'response_type': 'RebootInstancesResponse',
143+
'return': 'true'
144+
}
145+
146+
return response
147+
148+
106149
@helpers.authentication_required
107150
def run_instance():
108151
"""
@@ -122,21 +165,26 @@ def _run_instance_request():
122165
123166
@return: Response.
124167
"""
125-
126168
args = {}
127169
if helpers.contains_parameter('Placement.AvailabilityZone'):
128-
zone_id = zones.get_zone(
170+
args['zoneid'] = zones.get_zone(
129171
helpers.get('Placement.AvailabilityZone')
130172
)
131173
else:
132-
zone_id = zones.get_zone(
174+
args['zoneid'] = zones.get_zone(
133175
current_app.config['CLOUDSTACK_DEFAULT_ZONE']
134176
)['id']
135177

136178
if helpers.get('BlockDeviceMapping.1.Ebs.VolumeType') is not None:
137-
args = _get_simulated_combination_instance_storage_args(zone_id)
138-
else:
139-
args['zoneid'] = zone_id
179+
disk_type = helpers.get('BlockDeviceMapping.1.Ebs.VolumeType')
180+
if disk_type == 'gp2':
181+
args['diskofferingid'] = disk_offerings.get_disk_offering(
182+
current_app.config['CLOUDSTACK_LOCAL_CUSTOM_DISK_OFFERING']
183+
)['id']
184+
if helpers.get('BlockDeviceMapping.1.Ebs.VolumeSize') is None:
185+
errors.invalid_request("VolumeSize not found in BlockDeviceMapping")
186+
else:
187+
args['size'] = helpers.get('BlockDeviceMapping.1.Ebs.VolumeSize')
140188

141189
if helpers.get('InstanceType') is None:
142190
instance_type = 'm1.small'
@@ -183,25 +231,6 @@ def _run_instance_request():
183231

184232
return response
185233

186-
def _get_simulated_combination_instance_storage_args(zone_id):
187-
args = {}
188-
disk_type = helpers.get('BlockDeviceMapping.1.Ebs.VolumeType')
189-
if disk_type == 'gp2':
190-
if 'CLOUDSTACK_LOCAL_CUSTOM_DISK_OFFERING' in current_app.config:
191-
args['diskofferingid'] = disk_offerings.get_disk_offering(
192-
current_app.config['CLOUDSTACK_LOCAL_CUSTOM_DISK_OFFERING']
193-
)['id']
194-
else:
195-
errors.invalid_request(
196-
str('CLOUDSTACK_LOCAL_CUSTOM_DISK_OFFERING') + " not found in "
197-
"configuration, no able to configure gp2 disk, please run ec2stack-configure and chose to configure "
198-
"a local disk")
199-
200-
if helpers.get('BlockDeviceMapping.1.Ebs.VolumeSize') is None:
201-
errors.invalid_request("VolumeSize not found in BlockDeviceMapping")
202-
else:
203-
args['size'] = helpers.get('BlockDeviceMapping.1.Ebs.VolumeSize')
204-
205234

206235
def _run_instance_response(response):
207236
"""
@@ -230,48 +259,6 @@ def _run_instance_response(response):
230259
return response
231260

232261

233-
@helpers.authentication_required
234-
def reboot_instance():
235-
"""
236-
Reboot an instance.
237-
238-
@return: Response.
239-
"""
240-
helpers.require_parameters(['InstanceId.1'])
241-
instance_id = helpers.get('InstanceId.1')
242-
_reboot_instance_request(instance_id)
243-
return _reboot_instance_response()
244-
245-
246-
def _reboot_instance_request(instance_id):
247-
"""
248-
Request to reboot an instance.
249-
250-
@param instance_id: Id of instance to be rebooted.
251-
@return: Response.
252-
"""
253-
args = {'command': 'rebootVirtualMachine',
254-
'id': instance_id}
255-
response = requester.make_request_async(args)
256-
response = response['virtualmachine']
257-
return response
258-
259-
260-
def _reboot_instance_response():
261-
"""
262-
Generates a response for a reboot instance request.
263-
264-
@return: Response.
265-
"""
266-
response = {
267-
'template_name_or_list': 'status.xml',
268-
'response_type': 'RebootInstancesResponse',
269-
'return': 'true'
270-
}
271-
272-
return response
273-
274-
275262
@helpers.authentication_required
276263
def start_instance():
277264
"""

0 commit comments

Comments
 (0)