diff --git a/circle/vm/models/instance.py b/circle/vm/models/instance.py index 140fcad..87a00b8 100644 --- a/circle/vm/models/instance.py +++ b/circle/vm/models/instance.py @@ -218,6 +218,7 @@ class Instance(AclBase, VirtualMachineDescModel, StatusModel, "destruction.")) objects = Manager() active = InstanceActiveManager() + _ops = {} # operation factory registry class Meta: app_label = 'vm' diff --git a/circle/vm/models/operation.py b/circle/vm/models/operation.py index fed33e5..7270dbf 100644 --- a/circle/vm/models/operation.py +++ b/circle/vm/models/operation.py @@ -3,6 +3,7 @@ from __future__ import absolute_import, unicode_literals from common.models import activity_context from ..tasks.local_tasks import async_operation from .activity import InstanceActivity +from .instance import Instance class Operation: @@ -77,3 +78,12 @@ class Operation: """This method is called when the operation executes successfully. """ pass + + +def register_operation(op_cls, op_id=None): + """Register the specified operation with Instance. + """ + if op_id is None: + op_id = op_cls.id + + Instance._ops[op_id] = lambda inst: op_cls(inst)