@@ -427,6 +427,107 @@ def list_pods(self, *args, **kwargs):
427427 self .log (err , logging .ERROR )
428428 raise ServiceUnavailable (err ) from e
429429
430+ def delete_pod (self , ** kwargs ):
431+ """Used to list basic information about pods running for a given application"""
432+ pod_name = kwargs .get ('pod_name' )
433+ try :
434+ # make sure the pod is manageed by drycc
435+ pod = self .scheduler ().pod .get (self .id , pod_name ).json ()
436+ if pod ['metadata' ]['labels' ].get ("heritage" ) == "drycc" :
437+ self .scheduler ().pod .delete (self .id , pod_name )
438+ except KubeHTTPException as e :
439+ # Sometimes k8s will manage to remove the pod from under us
440+ if e .response .status_code != 404 :
441+ raise e
442+
443+ def describe_deployment (self , deployment_name ):
444+ result = []
445+ try :
446+ deployment = self .scheduler ().deployment .get (self .id , deployment_name ).json ()
447+ for container in deployment ["spec" ]["template" ]['spec' ]["containers" ]:
448+ limits = container .get ("resources" , {}).get ("limits" , {})
449+ result .append ({
450+ "container" : container ["name" ],
451+ "image" : container ["image" ],
452+ "command" : container .get ("command" , []),
453+ "args" : container .get ("args" , []),
454+ "liveness_probe" : container .get ("livenessProbe" , {}),
455+ "readiness_probe" : container .get ("readinessProbe" , {}),
456+ "limits" : limits ,
457+ "volume_mounts" : container .get ("volumeMounts" , []),
458+ })
459+ except KubeHTTPException as e :
460+ if e .response .status_code != 404 :
461+ raise e
462+ return result
463+
464+ def list_deployments (self , * args , ** kwargs ):
465+ """Used to list basic information about deployments running for a given application"""
466+ try :
467+ labels = self ._scheduler_filter (** kwargs )
468+ # in case a singular deployment is requested
469+ if 'name' in kwargs :
470+ deployments = [self .scheduler ().deployment .get (self .id , kwargs ['name' ]).json ()]
471+ else :
472+ deployments = self .scheduler ().deployment .get (self .id , labels = labels ).json ()['items' ] # noqa
473+ if not deployments :
474+ deployments = []
475+ data = []
476+ for p in deployments :
477+ labels = p ['spec' ]['template' ]['metadata' ]['labels' ]
478+ if p ['metadata' ]['creationTimestamp' ]:
479+ started = p ['metadata' ]['creationTimestamp' ]
480+ else :
481+ started = str (
482+ datetime .now (timezone .utc ).strftime (settings .DRYCC_DATETIME_FORMAT ))
483+ item = {
484+ 'name' : labels ['type' ],
485+ 'release' : labels ['version' ],
486+ 'ready' : "%s/%s" % (
487+ p ["status" ]["readyReplicas" ],
488+ p ["status" ]["replicas" ],
489+ ),
490+ 'up_to_date' : p ["status" ]["updatedReplicas" ],
491+ 'available_replicas' : p ["status" ]["availableReplicas" ],
492+ 'started' : started
493+ }
494+ data .append (item )
495+ # sorting so latest start date is first
496+ data .sort (key = lambda x : x ['started' ], reverse = True )
497+ return data
498+ except KubeHTTPException :
499+ pass
500+ except Exception as e :
501+ err = '(list deployments): {}' .format (e )
502+ self .log (err , logging .ERROR )
503+ raise ServiceUnavailable (err ) from e
504+
505+ def list_events (self , ref_kind , ref_name , * args , ** kwargs ):
506+ try :
507+ fields = {
508+ "regarding.kind" : ref_kind ,
509+ "regarding.name" : ref_name
510+ }
511+ kwargs ["fields" ] = fields
512+ events = self .scheduler ().events .get (self .id , ** kwargs ).json ()['items' ] # noqa
513+ data = []
514+ for e in events :
515+ item = {
516+ 'reason' : e ['reason' ],
517+ 'message' : e ['note' ],
518+ 'created' : e ['metadata' ]['creationTimestamp' ]
519+ }
520+ data .append (item )
521+ # sorting so latest start date is first
522+ data .sort (key = lambda x : x ['created' ], reverse = False )
523+ return data
524+ except KubeHTTPException :
525+ pass
526+ except Exception as e :
527+ err = '(list event): {}' .format (e )
528+ self .log (err , logging .ERROR )
529+ raise ServiceUnavailable (err ) from e
530+
430531 def autoscale (self , proc_type , autoscale ):
431532 """
432533 Set autoscale rules for the application
0 commit comments