def housekeeping(): """ calls housekeep for each manager. is run periodically. """ token = get_token() logger.info('provisioning plugins queried from worker') mgr = get_provisioning_manager() mgr.map_method(mgr.names(), 'housekeep', token)
def update_user_connectivity(instance_id): """ updates the connectivity for a single instance. """ logger.info('updating connectivity for instance %s' % instance_id) token = get_token() mgr = get_provisioning_manager() plugin = get_provisioning_type(token, instance_id) mgr.map_method([plugin], 'update_connectivity', token, instance_id) logger.info('update connectivity for instance %s ready' % instance_id)
def run_update(instance_id): """ calls the update method for the manager of a single instance. """ logger.info('update triggered for %s' % instance_id) token = get_token() mgr = get_provisioning_manager() plugin = get_provisioning_type(token, instance_id) mgr.map_method([plugin], 'update', token, instance_id) logger.info('update done, notifying server')
def periodic_update(): """ Runs periodic updates. In particular sets old instances up for deprovisioning after they are past their maximum_lifetime and sets instances up for up updates. Both deletion and update events are not guaranteed to take place immediately. If there are more than 10 instances a random sample of 10 updates and deletions will take place to ensure task is safe to run and won't slow down other tasks. """ token = get_token() pbclient = PBClient(token, local_config['INTERNAL_API_BASE_URL'], ssl_verify=False) instances = pbclient.get_instances() deprovision_list = [] update_list = [] for instance in instances: logger.debug('checking instance for actions %s' % instance['name']) deprovision_required = False if instance.get('state') in [Instance.STATE_RUNNING]: if not instance.get('lifetime_left') and instance.get( 'maximum_lifetime'): deprovision_required = True if deprovision_required: deprovision_list.append(instance) elif instance.get('state') not in [Instance.STATE_FAILED]: update_list.append(instance) # ToDo: refactor magic number to variable if len(deprovision_list) > 10: deprovision_list = random.sample(deprovision_list, 10) for instance in deprovision_list: logger.info( 'deprovisioning triggered for %s (reason: maximum lifetime exceeded)' % instance.get('id')) pbclient.do_instance_patch(instance['id'], {'to_be_deleted': True}) run_update.delay(instance.get('id')) if len(update_list) > 10: update_list = random.sample(update_list, 10) for instance in update_list: run_update.delay(instance.get('id'))
def publish_plugins(): """ ToDo: document. """ logger.info('provisioning plugins queried from worker') token = get_token() mgr = get_provisioning_manager() for plugin in mgr.names(): payload = {'plugin': plugin} res = mgr.map_method([plugin], 'get_configuration') if not len(res): logger.warn('plugin returned empty configuration: %s' % plugin) continue config = res[0] if not config: logger.warn('No config for %s obtained' % plugin) continue for key in ('schema', 'form', 'model'): payload[key] = json.dumps(config.get(key, {})) do_post(token, 'plugins', payload)