def destroy_volume(): """POST /destroy_volume""" volume_id = str(request.values.get('volume_id')) cloud = str(request.values.get('cloud')) controller = Controller() controller.setup_default() controller.destroy_volume(volume_id, cloud) log('Destroyed volume %s (cloud: %s)' % (volume_id, cloud)) return build_response(simplejson.dumps({}))
def attach_volume(): """POST /attach_volume""" vm_id =str(request.values.get('vm_id')) volume_id = str(request.values.get('volume_id')) device_name = str(request.values.get('device_name')) cloud = str(request.values.get('cloud')) controller = Controller() controller.setup_default() controller.attach_volume(vm_id, volume_id, device_name, cloud) log('Attached volume %s to vm %s (cloud: %s)' % (volume_id, vm_id, cloud)) return build_response(simplejson.dumps({}))
def create_volume(): """GET /create_nodes""" size = int(request.values.get('size')) name = str(request.values.get('name')) vm_id =str(request.values.get('vm_id')) cloud = str(request.values.get('cloud')) controller = Controller() controller.setup_default() volume = controller.create_volume(size, name, vm_id, cloud) log('Created volume %s ' % volume.id) return build_response(simplejson.dumps({'volume_id':volume.id }))
def remove_nodes(): """GET /create_nodes""" nodes = simplejson.loads(request.values.get('nodes')) log('Deleting %s nodes' % len(nodes)) serv_nodes = [ServiceNode(node['vmid'], node['ip'],node['private_ip'],node['cloud_name'],node['weight_backend']) for node in nodes] controller = Controller() controller.setup_default() controller.delete_nodes(serv_nodes) for node in nodes: res = get_resource_by_id(node['vmid']) res.remove() return build_response(simplejson.dumps({}))
def __init__(self): Thread.__init__(self) self.event = Event() self.unit = 1 self.charging_unit = 60 # self.credit_step = 1 self.credit_step = 5 self.sanity_step = 15 self.count = 0 self.daemon = True self.controller = Controller() self.controller.setup_default() init('/var/log/cpsdirector/debugging.log') self._logger = create_logger(__name__) self._logger.setLevel(logging.DEBUG)
class Credit(Thread): def __init__(self): Thread.__init__(self) self.event = Event() self.unit = 1 self.charging_unit = 60 # self.credit_step = 1 self.credit_step = 5 self.sanity_step = 15 self.count = 0 self.daemon = True self.controller = Controller() self.controller.setup_default() init('/var/log/cpsdirector/debugging.log') self._logger = create_logger(__name__) self._logger.setLevel(logging.DEBUG) def run(self): while not self.event.is_set(): self.count += 1 if self.count % self.credit_step == 0: self.check_credits() if self.count % self.sanity_step == 0: self.check_sanity() if self.count == max(self.credit_step, self.sanity_step): self.count = 0 self.event.wait(self.unit * 60) def stop(self): self.event.set() def check_credits(self): from cpsdirector.application import Application from cpsdirector.application import _deleteapp as stop_application self._logger.debug('Checking credits @%s' % datetime.now()) users = User.query.all() for user in users: to_charge = 0 rescs = Resource.query.join(Application).filter_by(user_id=user.uid) for res in rescs: m_f_c = self.mins_from_creation(res.created) tot_cost = m_f_c / self.charging_unit if tot_cost >= res.charged or res.charged == 0: self._logger.debug('Charge for resource %s' % res.vmid) to_charge += tot_cost - res.charged + 1 res.charged += to_charge user.credit -= to_charge if user.credit < 0: user.credit == 0 if user.credit == 0: self._logger.debug('Stop all the applications for user %s\n' % user.uid) apps = Application.query.filter_by(user_id=user.uid) for app in apps: stop_application(user.uid, app.aid, False) if to_charge != 0: db.session.commit() def check_sanity(self): self._logger.debug('Sanity check @%s' % datetime.now()) vms = self.controller.list_vms() res_vmids = [res.vmid for res in Resource.query.all()] vms_to_remove = [] for vm in vms: if vm.vmid not in res_vmids and self.mins_from_creation(vm.created) > 1: vms_to_remove += [vm] if len(vms_to_remove) > 0: self._logger.debug('Removing the following VMs as they are not present in the list of resources: %s' % [vm.vmid for vm in vms_to_remove]) self.controller.delete_nodes(vms_to_remove) def mins_from_creation(self, created): now = datetime.now() created_ts = time.mktime(created.timetuple()) now_ts = time.mktime(now.timetuple()) return int(now_ts-created_ts) / 60
def delete_nodes(nodes): controller = Controller() controller.setup_default() controller.delete_nodes(nodes)