@@ -270,7 +270,7 @@ def restart(self, **kwargs): # noqa
270270 def scale (self , user , structure ):
271271 err_msg = None
272272 release = Release .latest (self )
273- if (PTYPE_RUN in structure or release .build is None ):
273+ if (PTYPE_RUN in structure or release is None or release .build is None ):
274274 if PTYPE_RUN in structure :
275275 err_msg = 'Cannot set scale for reserved types, procfile type is: run'
276276 else :
@@ -283,7 +283,7 @@ def scale(self, user, structure):
283283 def pipeline (self , release , ptypes , force_deploy = False ):
284284 prefix = f"[pipeline] release { release .version_name } "
285285 try :
286- if release .build is not None :
286+ if release is not None and release .build is not None :
287287 if release .build .dryccfile :
288288 for run in release .get_runners (ptypes ):
289289 self .log (f"{ prefix } starts running pipeline.run { run ['image' ]} " )
@@ -323,7 +323,7 @@ def deploy(self, release, ptypes=None, force_deploy=False, rollback_on_failure=T
323323
324324 force_deploy can be used when a deployment is broken, such as for Rollback
325325 """
326- if release .build is None :
326+ if release is None or release .build is None :
327327 raise DryccException ('No build associated with this release' )
328328 # use create to make sure minimum resources are created
329329 self .create ()
@@ -352,7 +352,7 @@ def mount(self, user, volume, structure=None):
352352 if release is None or release .build is None :
353353 raise DryccException ('No build associated with this release' )
354354 app_settings = self .appsettings_set .latest ()
355- self ._mount (user , volume , release , app_settings , structure = structure )
355+ self ._mount (user , volume , app_settings , structure = structure )
356356
357357 def clean (self , release = None , ptypes = None ):
358358 release = release if release else self .release_set .latest ()
@@ -741,11 +741,14 @@ def _clean_app_logs(self):
741741 err = 'Error deleting existing application logs: {}' .format (e )
742742 self .log (err , logging .WARNING )
743743
744- def _mount (self , user , volume , release , app_settings , structure = None ):
744+ def _mount (self , user , volume , app_settings , structure = None ):
745745 volumes = Volume .objects .filter (app = self )
746746 tasks = []
747747 for scale_type , replicas in structure .items () if structure else self .structure .items ():
748748 if scale_type != PTYPE_RUN :
749+ release = self .release_set .filter (
750+ deployed_ptypes__contains = scale_type ,
751+ failed = False ).latest ()
749752 replicas = self .structure .get (scale_type , 0 )
750753 scale_type_volumes = [
751754 volume for volume in volumes if scale_type in volume .path .keys ()]
@@ -810,7 +813,7 @@ def _deploy(self, deploys, ptypes, prev_release,
810813 except KubeException as e :
811814 # Don't rollback if the previous release doesn't have a build which means
812815 # this is the first build and all the previous releases are just config changes.
813- if ( rollback_on_failure and prev_release .build is not None ):
816+ if rollback_on_failure and prev_release is not None and prev_release .build is not None : # noqa
814817 err = 'There was a problem deploying {}. Rolling back to release {}.' .format (
815818 release .version_name , prev_release .version_name )
816819 # This goes in the log before the rollback starts
@@ -1098,7 +1101,7 @@ def _build_env_vars(self, release, ptype):
10981101 Build a dict of env vars, setting default vars based on app type
10991102 and then combining with the user set ones
11001103 """
1101- if release .build is None :
1104+ if release is None or release .build is None :
11021105 raise DryccException ('No build associated with this release to run this command' )
11031106
11041107 # mix in default environment information drycc may require
0 commit comments