@@ -178,19 +178,15 @@ def logs(self):
178178 def run (self , command ):
179179 """Run a one-off command in an ephemeral app container."""
180180 # TODO: add support for interactive shell
181- release = self .release_set .latest ()
182- if not release .build :
183- raise EnvironmentError ('No build exists, please run `git push deis master` first' )
184- # prepare ssh command
185- version = release .version
186- image = release .image
187- docker_args = ' ' .join (['-a' , 'stdout' , '-a' , 'stderr' , '-rm' , image ])
188- env_args = ' ' .join (["-e '{k}={v}'" .format (** locals ())
189- for k , v in release .config .values .items ()])
190181 log_event (self , "deis run '{}'" .format (command ))
191- command = "sudo docker run {env_args} {docker_args} {command}" .format (** locals ())
192- # TODO: wire up to job dispath
193- return 0 , 'Not implemented yet'
182+ c_num = max ([c .num for c in self .container_set .filter (type = 'admin' )] or [0 ]) + 1
183+ c = Container .objects .create (owner = self .owner ,
184+ app = self ,
185+ release = self .release_set .latest (),
186+ type = 'admin' ,
187+ num = c_num )
188+ rc , output = tasks .run_command .delay (c , command ).get ()
189+ return rc , output
194190
195191
196192@python_2_unicode_compatible
@@ -295,6 +291,14 @@ def destroy(self):
295291 self .state = 'destroyed'
296292 self .save ()
297293
294+ def run (self , command ):
295+ self .state = 'running'
296+ self .save ()
297+ rc , output = self ._scheduler .run (self ._job_id , self .release .image , command )
298+ self .state = 'completed'
299+ self .save ()
300+ return rc , output
301+
298302
299303@python_2_unicode_compatible
300304class Push (UuidAuditedModel ):
0 commit comments