@@ -60,7 +60,8 @@ class Cluster(UuidAuditedModel):
6060 Cluster used to run jobs
6161 """
6262
63- CLUSTER_TYPES = (('mock' , 'Mock Cluster' ),)
63+ CLUSTER_TYPES = (('mock' , 'Mock Cluster' ),
64+ ('coreos' , 'CoreOS Cluster' ))
6465
6566 owner = models .ForeignKey (settings .AUTH_USER_MODEL )
6667 id = models .CharField (max_length = 128 , unique = True )
@@ -74,6 +75,26 @@ class Cluster(UuidAuditedModel):
7475 def __str__ (self ):
7576 return self .id
7677
78+ def _get_scheduler (self , * args , ** kwargs ):
79+ module_name = 'scheduler.' + self .type
80+ mod = importlib .import_module (module_name )
81+ return mod .SchedulerClient (self .id , self .hosts , self .auth ,
82+ self .domain , self .options )
83+
84+ _scheduler = property (_get_scheduler )
85+
86+ def create (self ):
87+ """
88+ Initialize a cluster's router and log aggregator
89+ """
90+ return tasks .create_cluster .delay (self ).get ()
91+
92+ def destroy (self ):
93+ """
94+ Destroy a cluster's router and log aggregator
95+ """
96+ return tasks .destroy_cluster .delay (self ).get ()
97+
7798
7899@python_2_unicode_compatible
79100class App (UuidAuditedModel ):
@@ -92,18 +113,17 @@ class Meta:
92113 def __str__ (self ):
93114 return self .id
94115
95- def init (self , * args , ** kwargs ):
116+ def create (self , * args , ** kwargs ):
96117 config = Config .objects .create (owner = self .owner , app = self , values = {})
97118 build = Build .objects .create (owner = self .owner , app = self , image = settings .DEFAULT_BUILD )
98119 Release .objects .create (version = 1 , owner = self .owner , app = self , config = config , build = build )
99120
100- def delete (self , * args , ** kwargs ):
121+ def destroy (self , * args , ** kwargs ):
101122 for c in self .container_set .all ():
102123 c .destroy ()
103- super (App , self ).delete (* args , ** kwargs )
104124
105125 def deploy (self , release ):
106- return tasks .deploy_release .delay (self , release )
126+ return tasks .deploy_release .delay (self , release ). get ()
107127
108128 def scale (self , ** kwargs ):
109129 """Scale containers up or down to match requested."""
@@ -200,67 +220,67 @@ class Meta:
200220 get_latest_by = '-created'
201221 ordering = ['created' ]
202222
203- def _scheduler (self , * args , ** kwargs ):
204- module_name = 'scheduler.' + self .app .cluster .type
205- mod = importlib .import_module (module_name )
206- return mod .SchedulerClient (self .app .cluster .id ,
207- self .app .cluster .hosts ,
208- self .app .cluster .auth )
209-
210- def job_id (self ):
223+ def _get_job_id (self ):
211224 app = self .app .id
212225 release = self .release
213226 version = "v{}" .format (release .version )
214227 num = self .num
215228 c_type = self .type
216229 if not c_type :
217- job_id = "{app}. {version}.{num}" .format (** locals ())
230+ job_id = "{app}_ {version}.{num}" .format (** locals ())
218231 else :
219- job_id = "{app}_{c_type }.{version }.{num}" .format (** locals ())
232+ job_id = "{app}_{version }.{c_type }.{num}" .format (** locals ())
220233 return job_id
221234
235+ _job_id = property (_get_job_id )
236+
237+ def _get_scheduler (self ):
238+ return self .app .cluster ._scheduler
239+
240+ _scheduler = property (_get_scheduler )
241+
222242 def create (self ):
223243 image = self .release .build .image
224- self ._scheduler () .create (self .job_id () , image , 'docker run {image}' .format (** locals ()))
244+ self ._scheduler .create (self ._job_id , image , 'docker run {image}' .format (** locals ()))
225245 self .state = 'created'
226246 self .save ()
227247
228248 def start (self ):
229249 self .state = 'starting'
230250 self .save ()
231- self ._scheduler () .start (self .job_id () )
251+ self ._scheduler .start (self ._job_id )
232252 self .state = 'up'
233253 self .save ()
234254
235255 def deploy (self , release ):
236- old_job_id = self .job_id ()
256+ old_job_id = self ._job_id
237257 self .state = 'deploying'
238258 self .save ()
239259 # update release
240260 self .release = release
241261 self .save ()
242262 # deploy new container
243- new_job_id = self .job_id ()
263+ new_job_id = self ._job_id
244264 image = self .release .build .image
245- self ._scheduler () .create (new_job_id , image , 'docker run {image}' .format (** locals ()))
246- self ._scheduler () .start (new_job_id )
265+ self ._scheduler .create (new_job_id , image , 'docker run {image}' .format (** locals ()))
266+ self ._scheduler .start (new_job_id )
247267 # destroy old container
248- self ._scheduler () .destroy (old_job_id )
268+ self ._scheduler .destroy (old_job_id )
249269 self .state = 'up'
250270 self .save ()
251271
252272 def stop (self ):
253273 self .state = 'stopping'
254274 self .save ()
255- self ._scheduler () .stop (self .job_id () )
275+ self ._scheduler .stop (self ._job_id )
256276 self .state = 'stopped'
257277 self .save ()
258278
259279 def destroy (self ):
260280 self .state = 'destroying'
261281 self .save ()
262282 # TODO: add check for active connections before killing
263- self ._scheduler () .destroy (self .job_id () )
283+ self ._scheduler .destroy (self ._job_id )
264284 self .state = 'destroyed'
265285 self .save ()
266286
0 commit comments