@@ -96,7 +96,7 @@ def save(self, *args, **kwargs):
9696 self .release_set .latest ()
9797 except Release .DoesNotExist :
9898 try :
99- if self ._scheduler .ns .get (self .id ).status_code == 200 :
99+ if self .scheduler () .ns .get (self .id ).status_code == 200 :
100100 # Namespace already exists
101101 err = "{} already exists as a namespace in this kuberenetes setup" .format (self .id ) # noqa
102102 self .log (err , logging .INFO )
@@ -151,10 +151,10 @@ def create(self, *args, **kwargs): # noqa
151151 self .log ('creating Namespace {} and services' .format (namespace ), level = logging .DEBUG )
152152 # Create essential resources
153153 try :
154- self ._scheduler .ns .get (namespace )
154+ self .scheduler () .ns .get (namespace )
155155 except KubeException :
156156 try :
157- self ._scheduler .ns .create (namespace )
157+ self .scheduler () .ns .create (namespace )
158158 except KubeException as e :
159159 raise ServiceUnavailable ('Could not create the Namespace in Kubernetes' ) from e
160160
@@ -163,21 +163,21 @@ def create(self, *args, **kwargs): # noqa
163163 self .log ('creating Quota {} for namespace {}' .format (quota_name , namespace ),
164164 level = logging .DEBUG )
165165 try :
166- self ._scheduler .quota .get (namespace , quota_name )
166+ self .scheduler () .quota .get (namespace , quota_name )
167167 except KubeException :
168- self ._scheduler .quota .create (namespace , quota_name , spec = quota_spec )
168+ self .scheduler () .quota .create (namespace , quota_name , spec = quota_spec )
169169 if settings .KUBERNETES_NAMESPACE_DEFAULT_LIMIT_RANGES_SPEC != '' :
170170 limits_spec = json .loads (settings .KUBERNETES_NAMESPACE_DEFAULT_LIMIT_RANGES_SPEC )
171171 self .log ('creating LimitRanges {} for namespace {}' .format (limits_name , namespace ),
172172 level = logging .DEBUG )
173173 try :
174- self ._scheduler .limits .get (namespace , limits_name )
174+ self .scheduler () .limits .get (namespace , limits_name )
175175 except KubeException :
176- self ._scheduler .limits .create (namespace , limits_name , spec = limits_spec )
176+ self .scheduler () .limits .create (namespace , limits_name , spec = limits_spec )
177177 except KubeException as e :
178178 # Blow it all away only if something horrible happens
179179 try :
180- self ._scheduler .ns .delete (namespace )
180+ self .scheduler () .ns .delete (namespace )
181181 except KubeException as e :
182182 # Just feed into the item below
183183 raise ServiceUnavailable ('Could not delete the Namespace in Kubernetes' ) from e
@@ -197,15 +197,15 @@ def delete(self, *args, **kwargs):
197197 self .log ("deleting environment" )
198198 try :
199199 # check if namespace exists
200- self ._scheduler .ns .get (self .id )
200+ self .scheduler () .ns .get (self .id )
201201
202202 try :
203- self ._scheduler .ns .delete (self .id )
203+ self .scheduler () .ns .delete (self .id )
204204
205205 # wait 30 seconds for termination
206206 for _ in range (30 ):
207207 try :
208- self ._scheduler .ns .get (self .id )
208+ self .scheduler () .ns .get (self .id )
209209 except KubeHTTPException as e :
210210 # only break out on a 404
211211 if e .response .status_code == 404 :
@@ -240,7 +240,7 @@ def restart(self, **kwargs): # noqa
240240 try :
241241 tasks = [
242242 functools .partial (
243- self ._scheduler .deployment .restart ,
243+ self .scheduler () .deployment .restart ,
244244 self .id ,
245245 deployment
246246 ) for deployment in deployments
@@ -332,7 +332,7 @@ def deploy(self, release, force_deploy=False, rollback_on_failure=True): # noqa
332332 # gather all proc types to be deployed
333333 tasks = [
334334 functools .partial (
335- self ._scheduler .deploy ,
335+ self .scheduler () .deploy ,
336336 namespace = self .id ,
337337 name = self ._get_job_id (scale_type , release .canary ),
338338 image = release .image ,
@@ -403,12 +403,12 @@ def cleanup_old(self):
403403 names .append (self ._get_job_id (scale_type , True ))
404404 names .append (self ._get_job_id (scale_type , False ))
405405 labels = {'heritage' : 'drycc' }
406- deployments = self ._scheduler .deployments .get (self .id , labels = labels ).json ()["items" ]
406+ deployments = self .scheduler () .deployments .get (self .id , labels = labels ).json ()["items" ]
407407 if deployments is not None :
408408 for deployment in deployments :
409409 name = deployment ['metadata' ]['name' ]
410410 if name not in names :
411- self ._scheduler .deployments .delete (self .id , name , True )
411+ self .scheduler () .deployments .delete (self .id , name , True )
412412 self .log (f"cleanup old kubernetes deployments for { self .id } " )
413413
414414 @backoff .on_exception (backoff .expo , ServiceUnavailable , max_tries = 3 )
@@ -464,7 +464,7 @@ def pod_name(size=5, chars=string.ascii_lowercase + string.digits):
464464 self .log ("{} on {} runs '{}'" .format (user .username , name , command ))
465465
466466 try :
467- exit_code , output = self ._scheduler .run (
467+ exit_code , output = self .scheduler () .run (
468468 self .id ,
469469 name ,
470470 release .image ,
@@ -485,9 +485,9 @@ def list_pods(self, *args, **kwargs):
485485
486486 # in case a singular pod is requested
487487 if 'name' in kwargs :
488- pods = [self ._scheduler .pod .get (self .id , kwargs ['name' ]).json ()]
488+ pods = [self .scheduler () .pod .get (self .id , kwargs ['name' ]).json ()]
489489 else :
490- pods = self ._scheduler .pod .get (self .id , labels = labels ).json ()['items' ]
490+ pods = self .scheduler () .pod .get (self .id , labels = labels ).json ()['items' ]
491491 if not pods :
492492 pods = []
493493
@@ -498,14 +498,14 @@ def list_pods(self, *args, **kwargs):
498498 if labels ['type' ] == 'run' :
499499 continue
500500
501- state = str (self ._scheduler .pod .state (p ))
501+ state = str (self .scheduler () .pod .state (p ))
502502
503503 # follows kubelete convention - these are hidden unless show-all is set
504504 if state in ['down' , 'crashed' ]:
505505 continue
506506
507507 # hide pod if it is passed the graceful termination period
508- if self ._scheduler .pod .deleted (p ):
508+ if self .scheduler () .pod .deleted (p ):
509509 continue
510510
511511 item = {}
@@ -544,16 +544,16 @@ def autoscale(self, proc_type, autoscale):
544544
545545 try :
546546 # get the target for autoscaler, in this case Deployment
547- self ._scheduler .hpa .get (self .id , name )
547+ self .scheduler () .hpa .get (self .id , name )
548548 if autoscale is None :
549- self ._scheduler .hpa .delete (self .id , name )
549+ self .scheduler () .hpa .delete (self .id , name )
550550 else :
551- self ._scheduler .hpa .update (
551+ self .scheduler () .hpa .update (
552552 self .id , name , proc_type , target , ** autoscale
553553 )
554554 except KubeHTTPException as e :
555555 if e .response .status_code == 404 :
556- self ._scheduler .hpa .create (
556+ self .scheduler () .hpa .create (
557557 self .id , name , proc_type , target , ** autoscale
558558 )
559559 else :
@@ -571,16 +571,16 @@ def image_pull_secret(self, namespace, registry, image):
571571 elif create :
572572 data = {'.dockerconfigjson' : docker_config }
573573 try :
574- self ._scheduler .secret .get (namespace , name )
574+ self .scheduler () .secret .get (namespace , name )
575575 except KubeHTTPException :
576- self ._scheduler .secret .create (
576+ self .scheduler () .secret .create (
577577 namespace ,
578578 name ,
579579 data ,
580580 secret_type = 'kubernetes.io/dockerconfigjson'
581581 )
582582 else :
583- self ._scheduler .secret .update (
583+ self .scheduler () .secret .update (
584584 namespace ,
585585 name ,
586586 data ,
@@ -611,11 +611,11 @@ def set_application_config(self, release):
611611
612612 secret_name = "{}-{}-env" .format (self .id , version )
613613 try :
614- self ._scheduler .secret .get (self .id , secret_name )
614+ self .scheduler () .secret .get (self .id , secret_name )
615615 except KubeHTTPException :
616- self ._scheduler .secret .create (self .id , secret_name , secrets_env , labels = labels )
616+ self .scheduler () .secret .create (self .id , secret_name , secrets_env , labels = labels )
617617 else :
618- self ._scheduler .secret .update (self .id , secret_name , secrets_env , labels = labels )
618+ self .scheduler () .secret .update (self .id , secret_name , secrets_env , labels = labels )
619619
620620 def to_measurements (self , timestamp : float ):
621621 measurements = []
@@ -710,14 +710,14 @@ def _mount(self, user, volume, release, app_settings, structure=None):
710710 volume for volume in volumes if scale_type in volume .path .keys ()]
711711 data = self ._gather_app_settings (
712712 release , app_settings , scale_type , replicas , volumes = scale_type_volumes )
713- deployment = self ._scheduler .deployment .get (
713+ deployment = self .scheduler () .deployment .get (
714714 self .id , self ._get_job_id (scale_type , release .canary )).json ()
715715 spec_annotations = deployment ['spec' ]['template' ]['metadata' ].get (
716716 'annotations' , {})
717717 # gather volume proc types to be deployed
718718 tasks .append (
719719 functools .partial (
720- self ._scheduler .deployment .patch ,
720+ self .scheduler () .deployment .patch ,
721721 namespace = self .id ,
722722 name = self ._get_job_id (scale_type , release .canary ),
723723 image = release .image ,
@@ -793,7 +793,7 @@ def _scale_pods(self, scale_types, release, app_settings):
793793 # gather all proc types to be deployed
794794 tasks .append (
795795 functools .partial (
796- self ._scheduler .scale ,
796+ self .scheduler () .scale ,
797797 namespace = self .id ,
798798 name = self ._get_job_id (scale_type , release .canary ),
799799 image = release .image ,
@@ -935,7 +935,7 @@ def _check_deployment_in_progress(self, deploys, release, force_deploy=False):
935935 for scale_type , kwargs in deploys .items ():
936936 name = self ._get_job_id (scale_type , release .canary )
937937 # Is there an existing deployment in progress?
938- in_progress , deploy_okay = self ._scheduler .deployment .in_progress (
938+ in_progress , deploy_okay = self .scheduler () .deployment .in_progress (
939939 self .id , name , kwargs .get ("deploy_timeout" ), kwargs .get ("deploy_batches" ),
940940 kwargs .get ("replicas" ), kwargs .get ("tags" )
941941 )
@@ -1013,7 +1013,7 @@ def _get_private_registry_config(self, image, registry=None):
10131013 username = registry .get ('username' )
10141014 password = registry .get ('password' )
10151015 elif settings .REGISTRY_LOCATION == 'off-cluster' :
1016- secret = self ._scheduler .secret .get (
1016+ secret = self .scheduler () .secret .get (
10171017 settings .WORKFLOW_NAMESPACE , 'registry-secret' ).json ()
10181018 username = secret ['data' ]['username' ]
10191019 password = secret ['data' ]['password' ]
0 commit comments