def _basic_action(self, lease_id, event_id, action_time, reservation_status=None): """Commits basic lease actions such as starting and ending.""" lease = self.get_lease(lease_id) event_status = 'DONE' for reservation in lease['reservations']: resource_type = reservation['resource_type'] try: self.resource_actions[resource_type][action_time]( reservation['resource_id'] ) except common_ex.ClimateException: LOG.exception("Failed to execute action %(action)s " "for lease %(lease)s" % { 'action': action_time, 'lease': lease_id, }) event_status = 'ERROR' db_api.reservation_update(reservation['id'], {'status': 'error'}) else: if reservation_status is not None: db_api.reservation_update(reservation['id'], {'status': reservation_status}) db_api.event_update(event_id, {'status': event_status})
def _basic_action(self, lease_id, event_id, action_time, reservation_status=None): """Commits basic lease actions such as starting and ending.""" lease = self.get_lease(lease_id) event_status = 'DONE' for reservation in lease['reservations']: resource_type = reservation['resource_type'] try: self.resource_actions[resource_type][action_time]( reservation['resource_id']) except common_ex.ClimateException: LOG.exception("Failed to execute action %(action)s " "for lease %(lease)s" % { 'action': action_time, 'lease': lease_id, }) event_status = 'ERROR' db_api.reservation_update(reservation['id'], {'status': 'error'}) else: if reservation_status is not None: db_api.reservation_update(reservation['id'], {'status': reservation_status}) db_api.event_update(event_id, {'status': event_status})
def on_end(self, resource_id): """Remove the hosts from the pool.""" reservations = db_api.reservation_get_all_by_values( resource_id=resource_id) for reservation in reservations: if reservation['status'] not in ['completed', 'deleted']: allocations = db_api.host_allocation_get_all_by_values( reservation_id=reservation['id']) pool = rp.ReservationPool() for allocation in allocations: db_api.host_allocation_destroy(allocation['id']) hyp = self.nova.hypervisors.get( self._get_hypervisor_from_name_or_id( allocation['compute_host_id']) ) if hyp.__dict__['running_vms'] > 0: hyp = self.nova.hypervisors.search(hyp.__dict__['hypervisor_hostname'], servers=True) for server in hyp[0].__dict__['servers']: s = self.nova.servers.get(server['uuid']) s.delete() pool.delete(reservation['resource_id']) db_api.reservation_update(reservation['id'], {'status': 'completed'}) host_reservation = db_api.host_reservation_get_by_reservation_id( reservation['id']) db_api.host_reservation_update(host_reservation['id'], {'status': 'completed'})
def _basic_action(self, lease_id, event_id, action_time, reservation_status=None): """Commits basic lease actions such as starting and ending.""" lease = self.get_lease(lease_id) for reservation in lease['reservations']: resource_type = reservation['resource_type'] self.resource_actions[resource_type][action_time]( reservation['resource_id'] ) if reservation_status is not None: db_api.reservation_update(reservation['id'], {'status': reservation_status}) db_api.event_update(event_id, {'status': 'DONE'})
def _basic_action(self, lease_id, event_id, action_time, reservation_status=None): """Commits basic lease actions such as starting and ending.""" lease = self.get_lease(lease_id) for reservation in lease["reservations"]: resource_type = reservation["resource_type"] try: self.resource_actions[resource_type][action_time](reservation["resource_id"]) except exceptions.ClimateException: LOG.exception( "Failed to execute action %(action)s " "for lease %(lease)d" % {"action": action_time, "lease": lease_id} ) if reservation_status is not None: db_api.reservation_update(reservation["id"], {"status": reservation_status}) db_api.event_update(event_id, {"status": "DONE"})
def on_end(self, resource_id): """Remove the hosts from the pool.""" reservations = db_api.reservation_get_all_by_values( resource_id=resource_id) for reservation in reservations: db_api.reservation_update(reservation['id'], {'status': 'completed'}) host_reservation = db_api.host_reservation_get_by_reservation_id( reservation['id']) db_api.host_reservation_update(host_reservation['id'], {'status': 'completed'}) allocations = db_api.host_allocation_get_all_by_values( reservation_id=reservation['id']) pool = rp.ReservationPool() for allocation in allocations: db_api.host_allocation_destroy(allocation['id']) if self.nova.hypervisors.get( self._get_hypervisor_from_name_or_id( allocation['compute_host_id']) ).__dict__['running_vms'] == 0: pool.delete(reservation['resource_id'])
def _basic_action(self, lease_id, event_id, action_time, reservation_status=None): """Commits basic lease actions such as starting and ending.""" lease = self.get_lease(lease_id) event_status = 'DONE' if action_time == 'on_start': lease_action = states.lease.START status_reason = "Starting lease..." elif action_time == 'on_end': lease_action = states.lease.STOP status_reason = "Stopping lease..." else: raise AttributeError("action_time is %s instead of either on_start or on_end" % action_time) lease_state = states.LeaseState(id=lease_id, action=lease_action, status=states.lease.IN_PROGRESS, status_reason=status_reason) lease_state.save() for reservation in lease['reservations']: resource_type = reservation['resource_type'] try: self.resource_actions[resource_type][action_time]( reservation['resource_id'] ) except common_ex.ClimateException: LOG.exception("Failed to execute action %(action)s " "for lease %(lease)s" % { 'action': action_time, 'lease': lease_id, }) event_status = 'ERROR' db_api.reservation_update(reservation['id'], {'status': 'error'}) else: if reservation_status is not None: db_api.reservation_update(reservation['id'], {'status': reservation_status}) db_api.event_update(event_id, {'status': event_status}) if event_status == 'DONE': lease_status = states.lease.COMPLETE if action_time == 'on_start': status_reason = "Successfully started lease" elif action_time == 'on_end': status_reason = "Successfully stopped lease" else: raise AttributeError("action_time is %s instead of either on_start or on_end" % action_time) elif event_status == 'ERROR': lease_status = states.lease.FAILED if action_time == 'on_start': status_reason = "Failed to start lease" elif action_time == 'on_end': status_reason = "Failed to stop lease" else: raise AttributeError("action_time is %s instead of either on_start or on_end" % action_time) else: raise AttributeError("event_status is %s instead of either DONE or ERROR" % event_status) lease_state.update(action=lease_action, status=lease_status, status_reason=status_reason) lease_state.save()
def update_reservation(self, reservation_id, values): """Update reservation.""" reservation_values = { 'resource_id': values['resource_id'] } db_api.reservation_update(reservation_id, reservation_values)
def update_reservation(self, reservation_id, values): """Update reservation.""" reservation_values = {'resource_id': values['resource_id']} db_api.reservation_update(reservation_id, reservation_values)