def stop_virtual_machine(self, sctx): ctx = sctx.job_ctxs[sctx.current_job_index] adapter = VirtualMachineAdapter(ctx.subscription_id, ctx.pem_url, host=ctx.management_host) deployment_name = adapter.get_deployment_name(ctx.cloud_service_name, ctx.deployment_slot) now_status = adapter.get_virtual_machine_instance_status( ctx.cloud_service_name, ctx.deployment_slot, ctx.virtual_machine_name) if now_status is None: self.log.error( "azure virtual environment %d stop vm failed: cannot get status of vm %r" % (sctx.current_job_index, ctx.virtual_machine_name)) self.__on_stop_virtual_machine_failed(sctx) elif now_status != AVMStatus.STOPPED_DEALLOCATED: try: req = adapter.stop_virtual_machine( ctx.cloud_service_name, deployment_name, ctx.virtual_machine_name, AVMStatus.STOPPED_DEALLOCATED) except Exception as e: self.log.error( "azure virtual environment %d stop vm failed: %r" % (sctx.current_job_index, str(e.message))) self.__on_stop_virtual_machine_failed(sctx) return False ctx.request_id = req.request_id self.__wait_for_stop_virtual_machine(sctx) else: self.__stop_virtual_machine_done(sctx)
def wait_for_virtual_machine_ready(self, sctx): ctx = sctx.job_ctxs[sctx.current_job_index] adapter = VirtualMachineAdapter(ctx.subscription_id, ctx.pem_url, host=ctx.management_host) status = adapter.get_virtual_machine_instance_status( ctx.cloud_service_name, ctx.deployment_slot, ctx.virtual_machine_name) if not status: self.log.error( "azure virtual environment %d error occured while waiting for virtual machine ready" % sctx.current_job_index) self.__on_setup_failed(sctx) return self.log.debug( "waiting for virtual machine ready, vm: %s, status: %s" % (ctx.virtual_machine_name, str(status))) if status == AVMStatus.READY_ROLE: if ctx.vm_need_config: ctx.vm_need_config = False self.__config_virtual_machine(sctx) else: self.__setup_virtual_machine_done(sctx) else: self.__wait_for_virtual_machine_ready(sctx)