Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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