local_agent_tasks.py 2.31 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
# Copyright 2014 Budapest University of Technology and Economics (BME IK)
#
# This file is part of CIRCLE Cloud.
#
# CIRCLE is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# CIRCLE is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along
# with CIRCLE.  If not, see <http://www.gnu.org/licenses/>.

Bach Dániel committed
18 19 20 21 22 23
from manager.mancelery import celery
from vm.tasks.agent_tasks import (restart_networking, change_password,
                                  set_time, set_hostname)
import time


Bach Dániel committed
24 25 26 27 28 29 30 31 32 33 34 35 36 37
def send_init_commands(instance, act, vm):
    queue = instance.get_remote_queue_name("agent")

    with act.sub_activity('restart_networking'):
        restart_networking.apply_async(queue=queue, args=(vm, ))
    with act.sub_activity('change_password'):
        change_password.apply_async(queue=queue, args=(vm, instance.pw))
    with act.sub_activity('set_time'):
        set_time.apply_async(queue=queue, args=(vm, time.time()))
    with act.sub_activity('set_hostname'):
        set_hostname.apply_async(
            queue=queue, args=(vm, instance.primary_host.hostname))


Bach Dániel committed
38 39
@celery.task
def agent_started(vm):
Bach Dániel committed
40
    from vm.models import Instance, instance_activity, InstanceActivity
Bach Dániel committed
41
    instance = Instance.objects.get(id=int(vm.split('-')[-1]))
Bach Dániel committed
42 43
    initialized = InstanceActivity.objects.filter(
        instance=instance, activity_code='vm.Instance.agent').count()
Bach Dániel committed
44 45 46

    with instance_activity(code_suffix='agent', instance=instance) as act:
        with act.sub_activity('starting'):
Bach Dániel committed
47 48 49
            pass
        if not initialized:
            send_init_commands(instance, act, vm)
Bach Dániel committed
50 51 52 53


@celery.task
def agent_stopped(vm):
54
    from vm.models import Instance, InstanceActivity
Bach Dániel committed
55 56 57 58 59 60
    instance = Instance.objects.get(id=int(vm.split('-')[-1]))
    qs = InstanceActivity.objects.filter(instance=instance,
                                         activity_code='vm.Instance.agent')
    act = qs.latest('id')
    with act.sub_activity('stopping'):
        pass