def give_to_pool(cls, pool, custom_limit=None): """Give appliances from shepherd to the pool where the maximum count is specified by pool or you can specify a custom limit """ from appliances.tasks import ( appliance_power_on, mark_appliance_ready, wait_appliance_ready, appliance_yum_update, appliance_reboot) limit = custom_limit if custom_limit is not None else pool.total_count appliances = [] with transaction.atomic(): for template in pool.possible_templates: for appliance in cls.unassigned().filter( template=template).all()[:limit - len(appliances)]: with appliance.kill_lock: appliance.appliance_pool = pool appliance.save() appliance.set_status("Given to pool {}".format(pool.id)) tasks = [appliance_power_on.si(appliance.id)] if pool.yum_update: tasks.append(appliance_yum_update.si(appliance.id)) tasks.append( appliance_reboot.si(appliance.id, if_needs_restarting=True)) if appliance.preconfigured: tasks.append(wait_appliance_ready.si(appliance.id)) else: tasks.append(mark_appliance_ready.si(appliance.id)) chain(*tasks)() appliances.append(appliance) if len(appliances) == limit: break return len(appliances)
def give_to_pool(cls, pool, custom_limit=None): """Give appliances from shepherd to the pool where the maximum count is specified by pool or you can specify a custom limit """ from appliances.tasks import (appliance_power_on, mark_appliance_ready, wait_appliance_ready, appliance_yum_update, appliance_reboot) limit = custom_limit if custom_limit is not None else pool.total_count appliances = [] with transaction.atomic(): for template in pool.possible_templates: for appliance in cls.unassigned().filter( template=template).all()[:limit - len(appliances)]: with appliance.kill_lock: appliance.appliance_pool = pool appliance.save() appliance.set_status("Given to pool {}".format( pool.id)) tasks = [appliance_power_on.si(appliance.id)] if pool.yum_update: tasks.append(appliance_yum_update.si(appliance.id)) tasks.append( appliance_reboot.si(appliance.id, if_needs_restarting=True)) if appliance.preconfigured: tasks.append(wait_appliance_ready.si(appliance.id)) else: tasks.append(mark_appliance_ready.si(appliance.id)) chain(*tasks)() appliances.append(appliance) if len(appliances) == limit: break return len(appliances)
def power_on(user, appliance, wait_ready=True): """Power on the appliance. If task is called, an id is returned, otherwise None. You can specify appliance by IP address, id or name. """ appliance = get_appliance(appliance, user) if appliance.power_state != Appliance.Power.ON: tasks = [appliance_power_on.si(appliance.id)] if wait_ready: tasks.append(wait_appliance_ready.si(appliance.id)) else: tasks.append(mark_appliance_ready.si(appliance.id)) return chain(*tasks)().task_id