@@ -389,7 +389,9 @@ def scale(self, user, structure): # noqa
389389
390390 def _scale_pods (self , scale_types ):
391391 release = self .release_set .latest ()
392- envs = release .config .values
392+ version = "v{}" .format (release .version )
393+ image = release .image
394+ envs = self ._build_env_vars (release .build .type , version , image , release .config .values )
393395
394396 # see if the app config has deploy batch preference, otherwise use global
395397 batches = release .config .values .get ('DEIS_DEPLOY_BATCHES' , settings .DEIS_DEPLOY_BATCHES )
@@ -413,7 +415,7 @@ def _scale_pods(self, scale_types):
413415 'tags' : release .config .tags ,
414416 'envs' : envs ,
415417 'registry' : release .config .registry ,
416- 'version' : "v{}" . format ( release . version ) ,
418+ 'version' : version ,
417419 'replicas' : replicas ,
418420 'app_type' : scale_type ,
419421 'build_type' : release .build .type ,
@@ -429,14 +431,17 @@ def _scale_pods(self, scale_types):
429431 self ._scheduler .scale ,
430432 namespace = self .id ,
431433 name = self ._get_job_id (scale_type ),
432- image = release . image ,
434+ image = image ,
433435 entrypoint = self ._get_entrypoint (scale_type ),
434436 command = self ._get_command (scale_type ),
435437 ** kwargs
436438 )
437439 )
438440
439441 try :
442+ # create the application config in k8s (secret in this case) for all deploy objects
443+ self ._scheduler .set_application_config (self .id , envs , version )
444+
440445 async_run (tasks )
441446 except Exception as e :
442447 err = '(scale): {}' .format (e )
@@ -469,7 +474,10 @@ def deploy(self, release, force_deploy=False):
469474
470475 # deploy application to k8s. Also handles initial scaling
471476 deploys = {}
472- envs = release .config .values
477+ image = release .image
478+ version = "v{}" .format (release .version )
479+ envs = self ._build_env_vars (release .build .type , version , image , release .config .values )
480+
473481 for scale_type , replicas in self .structure .items ():
474482 # only web / cmd are routable
475483 # http://docs.deis.io/en/latest/using_deis/process-types/#web-vs-cmd-process-types
@@ -487,7 +495,7 @@ def deploy(self, release, force_deploy=False):
487495 'registry' : release .config .registry ,
488496 # only used if there is no previous RC
489497 'replicas' : replicas ,
490- 'version' : "v{}" . format ( release . version ) ,
498+ 'version' : version ,
491499 'app_type' : scale_type ,
492500 'build_type' : release .build .type ,
493501 'healthcheck' : release .config .healthcheck ,
@@ -509,13 +517,16 @@ def deploy(self, release, force_deploy=False):
509517 raise AlreadyExists ('Deployment for {} is already in progress' .format (name ))
510518
511519 try :
520+ # create the application config in k8s (secret in this case) for all deploy objects
521+ self ._scheduler .set_application_config (self .id , envs , version )
522+
512523 # gather all proc types to be deployed
513524 tasks = [
514525 functools .partial (
515526 self ._scheduler .deploy ,
516527 namespace = self .id ,
517528 name = self ._get_job_id (scale_type ),
518- image = release . image ,
529+ image = image ,
519530 entrypoint = self ._get_entrypoint (scale_type ),
520531 command = self ._get_command (scale_type ),
521532 ** kwargs
@@ -682,13 +693,16 @@ def pod_name(size=5, chars=string.ascii_lowercase + string.digits):
682693 name = self ._get_job_id (scale_type ) + '-' + pod_name ()
683694 self .log ("{} on {} runs '{}'" .format (user .username , name , command ))
684695
696+ image = release .image
697+ version = "v{}" .format (release .version )
698+ envs = self ._build_env_vars (release .build .type , version , image , release .config .values )
685699 kwargs = {
686700 'memory' : release .config .memory ,
687701 'cpu' : release .config .cpu ,
688702 'tags' : release .config .tags ,
689- 'envs' : release . config . values ,
703+ 'envs' : envs ,
690704 'registry' : release .config .registry ,
691- 'version' : "v{}" . format ( release . version ) ,
705+ 'version' : version ,
692706 'build_type' : release .build .type ,
693707 'deploy_timeout' : deploy_timeout
694708 }
@@ -697,7 +711,7 @@ def pod_name(size=5, chars=string.ascii_lowercase + string.digits):
697711 exit_code , output = self ._scheduler .run (
698712 self .id ,
699713 name ,
700- release . image ,
714+ image ,
701715 self ._get_entrypoint (scale_type ),
702716 [command ],
703717 ** kwargs
@@ -775,3 +789,27 @@ def _scheduler_filter(self, **kwargs):
775789 labels .update ({'type' : kwargs ['type' ]})
776790
777791 return labels
792+
793+ def _build_env_vars (self , build_type , version , image , envs ):
794+ """
795+ Build a dict of env vars, setting default vars based on app type
796+ and then combining with the user set ones
797+ """
798+
799+ # mix in default environment information deis may require
800+ default_env = {
801+ 'DEIS_APP' : self .id ,
802+ 'WORKFLOW_RELEASE' : version
803+ }
804+
805+ # Check if it is a slug builder image.
806+ if build_type == 'buildpack' :
807+ # overwrite image so slugrunner image is used in the container
808+ default_env ['SLUG_URL' ] = image
809+ default_env ['BUILDER_STORAGE' ] = settings .APP_STORAGE
810+ default_env ['DEIS_MINIO_SERVICE_HOST' ] = settings .MINIO_HOST
811+ default_env ['DEIS_MINIO_SERVICE_PORT' ] = settings .MINIO_PORT
812+
813+ # merge envs on top of default to make envs win
814+ default_env .update (envs )
815+ return default_env
0 commit comments