@@ -390,12 +390,12 @@ def pod_name(size=5, chars=string.ascii_lowercase + string.digits):
390390 data ['restart_policy' ] = 'Never'
391391 data ['active_deadline_seconds' ] = timeout
392392 data ['ttl_seconds_after_finished' ] = expires
393- # create application config and build the pod manifest
394- self .set_application_config (release )
395393 name = self ._get_job_id (PROCFILE_TYPE_RUN , release .canary ) + '-' + pod_name ()
396394 self .log ("{} on {} runs '{}'" .format (user .username , name , command ))
397395 kwargs .update (data )
398396 try :
397+ # create application config and build the pod manifest
398+ self .set_application_config (release , PROCFILE_TYPE_RUN )
399399 self .scheduler ().job .create (
400400 self .id ,
401401 name ,
@@ -506,7 +506,7 @@ def image_pull_secret(self, namespace, registry, image):
506506
507507 return name
508508
509- def set_application_config (self , release ):
509+ def set_application_config (self , release , procfile_type ):
510510 """
511511 Creates the application config as a secret in Kubernetes and
512512 updates it if it already exists
@@ -520,13 +520,13 @@ def set_application_config(self, release):
520520
521521 # secrets use dns labels for keys, map those properly here
522522 secrets_env = {}
523- for key , value in self ._build_env_vars (release ).items ():
523+ for key , value in self ._build_env_vars (release , procfile_type ).items ():
524524 secrets_env [key .lower ().replace ('_' , '-' )] = str (value )
525525
526526 # dictionary sorted by key
527527 secrets_env = OrderedDict (sorted (secrets_env .items (), key = lambda t : t [0 ]))
528528
529- secret_name = "{}-{}-env" .format (self .id , version )
529+ secret_name = "{}-{}-{}- env" .format (self .id , procfile_type , version )
530530 try :
531531 self .scheduler ().secret .get (self .id , secret_name )
532532 except KubeHTTPException :
@@ -588,6 +588,7 @@ def _mount(self, user, volume, release, app_settings, structure=None):
588588 self .id , self ._get_job_id (scale_type , release .canary )).json ()
589589 spec_annotations = deployment ['spec' ]['template' ]['metadata' ].get (
590590 'annotations' , {})
591+ self .set_application_config (release , scale_type )
591592 # gather volume proc types to be deployed
592593 tasks .append (
593594 functools .partial (
@@ -603,8 +604,6 @@ def _mount(self, user, volume, release, app_settings, structure=None):
603604 )
604605 )
605606 try :
606- # create the application config in k8s (secret in this case) for all deploy objects
607- self .set_application_config (release )
608607 apply_tasks (tasks )
609608 except Exception as e :
610609 err = f'(changed volume mount for { volume } : { e } '
@@ -620,21 +619,18 @@ def _deploy(self, deploys, structure, prev_release,
620619 self ._check_deployment_in_progress (deploys , release , force_deploy )
621620
622621 try :
623- # create the application config in k8s (secret in this case) for all deploy objects
624- self .set_application_config (release )
625-
626- # gather all proc types to be deployed
627- tasks = [
628- functools .partial (
622+ tasks = []
623+ for scale_type , kwargs in deploys .items ():
624+ self .set_application_config (release , scale_type )
625+ tasks .append (functools .partial (
629626 self .scheduler ().deploy ,
630627 namespace = self .id ,
631628 name = self ._get_job_id (scale_type , release .canary ),
632629 image = release .get_deploy_image (scale_type ),
633630 command = release .get_deploy_command (scale_type ),
634631 args = release .get_deploy_args (scale_type ),
635632 ** kwargs
636- ) for scale_type , kwargs in deploys .items ()
637- ]
633+ ))
638634 try :
639635 apply_tasks (tasks )
640636 except KubeException as e :
@@ -721,6 +717,8 @@ def _scale_pods(self, scale_types, release, app_settings):
721717 volume for volume in volumes if scale_type in volume .path .keys ()]
722718 data = self ._gather_app_settings (
723719 release , app_settings , scale_type , replicas , volumes = scale_type_volumes )
720+ # create the application config in k8s (secret in this case) for all deploy objects
721+ self .set_application_config (release , scale_type )
724722 # gather all proc types to be deployed
725723 tasks .append (
726724 functools .partial (
@@ -734,8 +732,6 @@ def _scale_pods(self, scale_types, release, app_settings):
734732 )
735733 )
736734 try :
737- # create the application config in k8s (secret in this case) for all deploy objects
738- self .set_application_config (release )
739735 apply_tasks (tasks )
740736 except Exception as e :
741737 err = '(scale): {}' .format (e )
@@ -912,7 +908,7 @@ def _scheduler_filter(self, **kwargs):
912908 labels .update ({'version' : version })
913909 return labels
914910
915- def _build_env_vars (self , release ):
911+ def _build_env_vars (self , release , procfile_type ):
916912 """
917913 Build a dict of env vars, setting default vars based on app type
918914 and then combining with the user set ones
@@ -935,9 +931,9 @@ def _build_env_vars(self, release):
935931 port = release .get_port ()
936932 if port :
937933 default_env ['PORT' ] = port
938-
939934 # merge envs on top of default to make envs win
940935 default_env .update (release .config .values )
936+ default_env .update (release .config .typed_values .get (procfile_type , {}))
941937 return default_env
942938
943939 def _get_private_registry_config (self , image , registry = None ):
@@ -999,7 +995,7 @@ def _gather_app_settings(self, release, app_settings, procfile_type, replicas, v
999995 Any global setting that can also be set per app goes here
1000996 """
1001997
1002- envs = self ._build_env_vars (release )
998+ envs = self ._build_env_vars (release , procfile_type )
1003999 # Obtain a limit plan that must exist, if raise error here, it must be a bug
10041000 config = self ._set_default_limit (release .config , procfile_type )
10051001 limit_plan = LimitPlan .objects .get (id = config .limits .get (procfile_type ))
0 commit comments