88from flask import current_app
99
1010from 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
1213from 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
107150def 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
206235def _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
276263def start_instance ():
277264 """
0 commit comments