Beispiel #1
0
    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})
Beispiel #2
0
    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})
Beispiel #3
0
    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'})
Beispiel #4
0
    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'})
Beispiel #5
0
    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'])
Beispiel #7
0
 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'])
Beispiel #8
0
    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()
Beispiel #9
0
 def update_reservation(self, reservation_id, values):
     """Update reservation."""
     reservation_values = {
         'resource_id': values['resource_id']
     }
     db_api.reservation_update(reservation_id, reservation_values)
Beispiel #10
0
 def update_reservation(self, reservation_id, values):
     """Update reservation."""
     reservation_values = {'resource_id': values['resource_id']}
     db_api.reservation_update(reservation_id, reservation_values)