def get_resource_api(api_client: client.ApiClient = None, **kwargs) -> "client.EventsV1Api": """ Returns an instance of the kubernetes API client associated with this object. """ if api_client: kwargs["apl_client"] = api_client return client.EventsV1Api(**kwargs)
def create_application_deployment( self, namespace: str, project: Project, track: str, ) -> None: pod_events: str = "" helm_path = self.get_helm_path() values = self.get_application_deployment_values( namespace=namespace, project=project, track=track, ) application_labels = { "deploymentTime": values["deployment"]["timestamp"], "release": project.deploy_name, "track": track, } log_collector = KubeLoggerThread( labels=application_labels, namespace=namespace, ) with settings.plugin_manager.lifecycle.project_deployment( namespace=namespace, project=project, track=track ): log_collector.start() result = self.helm.upgrade_chart( chart_path=helm_path, name=project.deploy_name, namespace=namespace, values=values, raise_exception=False, ) try: v1 = k8s_client.EventsV1Api(self.client) response: EventsV1EventList = v1.list_namespaced_event(namespace) events: List[List[str]] = [] event: EventsV1Event for event in response.items: events.append( [ event.deprecated_first_timestamp.strftime("%H:%M:%S"), f"{event.regarding.kind}/{event.regarding.name}", event.reason, event.note, ] ) pod_events = tabulate( events, headers=["Timestamp", "Object", "Reason", "Message"], tablefmt="orgtbl", ) except ApiException as e: logger.debug( "Exception when calling EventsV1beta1Api->list_namespaced_event: %s\n" % e ) except Exception as e: logger.debug("Getting events failed, ignoring: %s\n" % e) log_collector.stop() if result.return_code: logger.info( icon=f"{self.ICON} 🏷️", title="Deployment values (without environment vars):", ) for line in yaml.dump(values).split("\n"): logger.info(message=f"\t{line}") status = self.status(namespace=namespace, labels=application_labels) logger.info(message=str(status)) logger.info( icon=f"{self.ICON} 📋️️ ", title="Getting events for resource: ", ) logger.info(pod_events) logger.info( icon=f"{self.ICON} 📋️️ ", title="Getting logs for resource: ", ) with log_collector.log_path.open() as f: for line in f: logger.info(line, end="") raise DeploymentFailed() if not settings.K8S_INGRESS_DISABLED: logger.info( icon=f"{self.ICON} 📄", title=f"Deployment can be accessed via {project.url}", )