emacs.d/elpa/kubernetes-20200114.436/kubernetes-process.el

86 lines
3.3 KiB
EmacsLisp
Raw Normal View History

2020-02-03 19:45:34 +01:00
;;; kubernetes-process.el --- Process management. -*- lexical-binding: t; -*-
;;; Commentary:
;;; Code:
(require 'subr-x)
(defun kubernetes-process-kill-quietly (proc &optional _signal)
(when proc
(set-process-sentinel proc nil)
(set-process-query-on-exit-flag proc nil)
(let ((kill-buffer-query-functions nil)
(buf (process-buffer proc)))
(ignore-errors (kill-process proc))
(ignore-errors (delete-process proc))
(ignore-errors (kill-buffer buf)))))
;;; Background polling processes.
(defmacro kubernetes-process--define-polling-process (resource)
"Create resource polling-related definitions.
RESOURCE is the name of the resource as a symbol.
Defines the following functions:
- `kubernetes-process-set-poll-RESOURCE-process'
- `kubernetes-process-release-poll-RESOURCE-process'
- `kubernetes-process-poll-RESOURCE-process'."
(unless (symbolp resource) (error "RESOURCE must be a symbol"))
(let ((proc-var-name (intern (format "kubernetes--internal-poll-%s-process" resource)))
(proc-live-p (intern (format "kubernetes-process-poll-%s-process-live-p" resource)))
(releaser-name (intern (format "kubernetes-process-release-poll-%s-process" resource)))
(setter-name (intern (format "kubernetes-process-set-poll-%s-process" resource))))
`(progn
(defvar ,proc-var-name nil
"Variable used to coordinate polling access to resources.
Do not use this variable directly. Instead, use its corresponding accessors.")
(defun ,proc-live-p ()
"Get the polling process for this resource if it is running."
(when-let (proc ,proc-var-name)
(when (process-live-p proc)
proc)))
(defun ,setter-name (proc)
"Set the polling process to PROC."
(,releaser-name)
(setq ,proc-var-name proc))
(defun ,releaser-name ()
"Kill the existing polling process, if any."
(kubernetes-process-kill-quietly ,proc-var-name)
(setq ,proc-var-name nil)))))
(kubernetes-process--define-polling-process config)
(kubernetes-process--define-polling-process configmaps)
(kubernetes-process--define-polling-process deployments)
(kubernetes-process--define-polling-process statefulsets)
(kubernetes-process--define-polling-process ingress)
(kubernetes-process--define-polling-process jobs)
(kubernetes-process--define-polling-process namespaces)
(kubernetes-process--define-polling-process pods)
(kubernetes-process--define-polling-process secrets)
(kubernetes-process--define-polling-process services)
(kubernetes-process--define-polling-process nodes)
(defun kubernetes-process-kill-polling-processes ()
(kubernetes-process-release-poll-config-process)
(kubernetes-process-release-poll-configmaps-process)
(kubernetes-process-release-poll-deployments-process)
(kubernetes-process-release-poll-statefulsets-process)
(kubernetes-process-release-poll-ingress-process)
(kubernetes-process-release-poll-nodes-process)
(kubernetes-process-release-poll-jobs-process)
(kubernetes-process-release-poll-namespaces-process)
(kubernetes-process-release-poll-pods-process)
(kubernetes-process-release-poll-secrets-process)
(kubernetes-process-release-poll-services-process))
(provide 'kubernetes-process)
;;; kubernetes-process.el ends here