@@ -241,15 +241,8 @@ class Formation(UuidAuditedModel):
241241
242242 owner = models .ForeignKey (settings .AUTH_USER_MODEL )
243243 id = models .SlugField (max_length = 64 )
244- flavor = models .ForeignKey ('Flavor' )
245244 layers = fields .JSONField (default = '{}' , blank = True )
246245 containers = fields .JSONField (default = '{}' , blank = True )
247-
248- environment = models .CharField (max_length = 64 , default = '_default' )
249-
250- ssh_username = models .CharField (max_length = 64 , default = 'ubuntu' )
251- ssh_private_key = models .TextField ()
252- ssh_public_key = models .TextField ()
253246
254247 class Meta :
255248 unique_together = (('owner' , 'id' ),)
@@ -381,12 +374,6 @@ def _balance_containers(self, **kwargs):
381374
382375 def __str__ (self ):
383376 return self .id
384-
385- def prepare_provider (self , * args , ** kwargs ):
386- tasks = import_tasks (self .flavor .provider .type )
387- args = (self .id , self .flavor .provider .creds .copy (),
388- self .flavor .params .copy ())
389- return tasks .prepare_formation .subtask (args )
390377
391378 def calculate (self ):
392379 "Return a Chef data bag item for this formation"
@@ -435,19 +422,14 @@ def converge(self, databag):
435422 return databag
436423
437424 def destroy (self ):
438- tasks = import_tasks (self .flavor .provider .type )
439425 subtasks = []
440426 # call a celery task to update the formation data bag
441427 if settings .CHEF_ENABLED :
442428 subtasks .extend ([controller .destroy_formation .s (self .id )]) # @UndefinedVariable
443429 # create subtasks to terminate all nodes in parallel
444- subtasks .extend ([ node . terminate () for node in self .node_set .all () ])
430+ subtasks .extend ([ layer . destroy () for layer in self .layer_set .all () ])
445431 job = group (* subtasks )
446432 job .apply_async ().join () # block for termination
447- # purge other hosting provider infrastructure
448- tasks .cleanup_formation .delay (self .id ,
449- self .flavor .provider .creds .copy (),
450- self .flavor .params .copy ()).wait ()
451433
452434
453435@python_2_unicode_compatible
@@ -465,13 +447,36 @@ class Layer(UuidAuditedModel):
465447 formation = models .ForeignKey ('Formation' )
466448 flavor = models .ForeignKey ('Flavor' )
467449 nodes = models .PositiveSmallIntegerField (default = 0 )
468-
469- run_list = models .CharField (max_length = 512 )
450+ # chef settings
451+ run_list = models .CharField (max_length = 512 )
470452 initial_attributes = fields .JSONField (default = '{}' , blank = True )
471-
453+ environment = models .CharField (max_length = 64 , default = '_default' )
454+ # ssh settings
455+ ssh_username = models .CharField (max_length = 64 , default = 'ubuntu' )
456+ ssh_private_key = models .TextField ()
457+ ssh_public_key = models .TextField ()
458+
472459 def __str__ (self ):
473460 return self .id
474461
462+ def build (self , * args , ** kwargs ):
463+ tasks = import_tasks (self .flavor .provider .type )
464+ args = (self .id , self .flavor .provider .creds .copy (),
465+ self .flavor .params .copy ())
466+ return tasks .build_layer .subtask (args )
467+
468+ def destroy (self ):
469+ tasks = import_tasks (self .flavor .provider .type )
470+ subtasks = []
471+ # create subtasks to terminate all nodes in parallel
472+ subtasks .extend ([ node .terminate () for node in self .node_set .all () ])
473+ job = group (* subtasks )
474+ job .apply_async ().join () # block for termination
475+ # purge other hosting provider infrastructure
476+ tasks .destroy_layer .delay (self .id ,
477+ self .flavor .provider .creds .copy (),
478+ self .flavor .params .copy ()).wait () # block
479+
475480
476481@python_2_unicode_compatible
477482class NodeManager (models .Manager ):
@@ -518,16 +523,16 @@ def __str__(self):
518523 return self .id
519524
520525 def launch (self , * args , ** kwargs ):
521- tasks = import_tasks (self .formation .flavor .provider .type )
526+ tasks = import_tasks (self .layer .flavor .provider .type )
522527 args = self ._prepare_launch_args ()
523528 return tasks .launch_node .subtask (args )
524529
525530 def _prepare_launch_args (self ):
526- creds = self .formation .flavor .provider .creds .copy ()
527- params = self .formation .flavor .params .copy ()
531+ creds = self .layer .flavor .provider .creds .copy ()
532+ params = self .layer .flavor .params .copy ()
528533 params ['formation' ] = self .formation .id
529534 params ['id' ] = self .id
530- init = self .formation .flavor .init .copy ()
535+ init = self .layer .flavor .init .copy ()
531536 if settings .CHEF_ENABLED :
532537 chef = init ['chef' ] = {}
533538 chef ['ruby_version' ] = settings .CHEF_RUBY_VERSION
@@ -543,36 +548,36 @@ def _prepare_launch_args(self):
543548 chef ['initial_attributes' ] = self .layer .initial_attributes
544549 # add the formation's ssh pubkey
545550 init .setdefault ('ssh_authorized_keys' , []).append (
546- self .formation .ssh_public_key )
551+ self .layer .ssh_public_key )
547552 # add all of the owner's SSH keys
548553 init ['ssh_authorized_keys' ].extend ([k .public for k in self .formation .owner .key_set .all () ])
549- ssh_username = self .formation .ssh_username
550- ssh_private_key = self .formation .ssh_private_key
554+ ssh_username = self .layer .ssh_username
555+ ssh_private_key = self .layer .ssh_private_key
551556 args = (self .uuid , creds , params , init , ssh_username , ssh_private_key )
552557 return args
553558
554559 def converge (self , * args , ** kwargs ):
555- tasks = import_tasks (self .formation .flavor .provider .type )
560+ tasks = import_tasks (self .layer .flavor .provider .type )
556561 args = self ._prepare_converge_args ()
557562 # TODO: figure out how to store task return values in model
558563 return tasks .converge_node .subtask (args )
559564
560565 def _prepare_converge_args (self ):
561- ssh_username = self .formation .ssh_username
566+ ssh_username = self .layer .ssh_username
562567 fqdn = self .fqdn
563- ssh_private_key = self .formation .ssh_private_key
568+ ssh_private_key = self .layer .ssh_private_key
564569 args = (self .uuid , ssh_username , fqdn , ssh_private_key )
565570 return args
566571
567572 def terminate (self , * args , ** kwargs ):
568- tasks = import_tasks (self .formation .flavor .provider .type )
573+ tasks = import_tasks (self .layer .flavor .provider .type )
569574 args = self ._prepare_terminate_args ()
570575 # TODO: figure out how to store task return values in model
571576 return tasks .terminate_node .subtask (args )
572577
573578 def _prepare_terminate_args (self ):
574- creds = self .formation .flavor .provider .creds .copy ()
575- params = self .formation .flavor .params .copy ()
579+ creds = self .layer .flavor .provider .creds .copy ()
580+ params = self .layer .flavor .params .copy ()
576581 args = (self .uuid , creds , params , self .provider_id )
577582 return args
578583
0 commit comments