]> git.eshelyaron.com Git - kubed.git/commitdiff
Teach rollout commands about buffer-local contexts
authorEshel Yaron <me@eshelyaron.com>
Wed, 14 Aug 2024 17:36:33 +0000 (19:36 +0200)
committerEshel Yaron <me@eshelyaron.com>
Wed, 14 Aug 2024 17:38:42 +0000 (19:38 +0200)
* kubed-transient.el (kubed-transient-rollout): Add
"--context" infix argument.
* kubed.el (kubed-restart-deployment)
(kubed-watch-deployment-status): Use local context and
namespace.  Also add callback argument to 'watch' command.

kubed-transient.el
kubed.el

index 1dcf91809527144bcac98ba0408389ec24df4276..2b03ffb4195fd4e834a1af023c7ab1e48155c5c0 100644 (file)
@@ -75,7 +75,9 @@
     ("!" "Command line" kubed-kubectl-command)]
    ["Options"
     ("-n" "Namespace" "--namespace="
-     :prompt "Namespace" :reader kubed-transient-read-namespace)]]
+     :prompt "Namespace" :reader kubed-transient-read-namespace)
+    ("-C" "Context" "--context="
+     :prompt "Context" :reader kubed-transient-read-context)]]
   (interactive)
   (transient-setup 'kubed-transient-rollout nil nil
                    :scope '("rollout")))
index d96fa8121fc8f05aa55b7d5d167852aa69b836fd..558aeb29db1d2b58fc6e4add88e6ad792d642f05 100644 (file)
--- a/kubed.el
+++ b/kubed.el
@@ -1865,35 +1865,53 @@ defaulting to the current namespace."
    (message "Created Kubernetes job `%s'." name)))
 
 ;;;###autoload
-(defun kubed-watch-deployment-status (dep &optional context namespace)
+(defun kubed-watch-deployment-status (dep &optional context namespace cb)
   "Show and update status of Kubernetes deployment DEP in a dedicate buffer.
 
 Optional argument CONTEXT is the `kubectl' context to use, defaulting to
 the current context; NAMESPACE is the namespace of DEP, defaulting to
-the current namespace."
+the current namespace.  CB is an optional callback function to call with
+no arguments when the deployment ends.
+
+Interactively, prompt for DEP.  With a prefix argument, prompt for
+NAMESPACE too.  With a double prefix argument, also prompt for CONTEXT."
   (interactive
-   (let ((namespace (seq-some
-                     (lambda (arg)
-                       (when (string-match "--namespace=\\(.+\\)" arg)
-                         (match-string 1 arg)))
-                     (kubed-transient-args 'kubed-transient-rollout))))
-     (list (kubed-read-deployment "Watch deployment status" nil nil nil namespace)
-           nil namespace)))
+   (let (context namespace)
+     (dolist (arg (kubed-transient-args 'kubed-transient-rollout))
+       (cond
+        ((string-match "--context=\\(.+\\)" arg)
+         (setq context (match-string 1 arg)))
+        ((string-match "--namespace=\\(.+\\)" arg)
+         (setq namespace (match-string 1 arg)))))
+     (unless context
+       (setq context
+             (let ((cxt (kubed-local-context)))
+               (if (equal current-prefix-arg '(16))
+                   (kubed-read-context "Context" cxt)
+                 cxt))))
+     (unless namespace
+       (setq namespace
+             (let ((cur (kubed-local-namespace context)))
+               (if current-prefix-arg
+                   (kubed-read-namespace "Namespace" cur nil context)
+                 cur))))
+     (list (kubed-read-deployment "Watch deployment status" nil nil
+                                  context namespace)
+           context namespace)))
   (let ((buf (get-buffer-create "*kubed-deployment-status*"))
-        (context (or context (kubed-current-context)))
-        (namespace (or namespace (kubed-current-namespace context))))
+        (context (or context (kubed-local-context)))
+        (namespace (or namespace (kubed-local-namespace context))))
     (with-current-buffer buf (erase-buffer))
     (make-process
      :name "*kubed-watch-deployment-status*"
      :buffer buf
      :command (list kubed-kubectl-program "rollout" "status"
                     "deployment" dep "-n" namespace "--context" context)
-     :sentinel
-     (lambda (_proc status)
-       (when (member status
-                     '("finished\n" "exited abnormally with code 1\n"))
-         (message "Deployment complete")
-         (kubed-update "deployments" context namespace))))
+     :sentinel (when cb
+                 (lambda (_proc status)
+                   (when (member status '("finished\n"
+                                          "exited abnormally with code 1\n"))
+                     (funcall cb)))))
     (display-buffer buf)))
 
 (defcustom kubed-restart-deployment-watch-status t
@@ -1903,26 +1921,53 @@ the current namespace."
 ;;;###autoload
 (defun kubed-restart-deployment (dep &optional context namespace)
   "Restart Kubernetes deployment DEP in namespace NAMESPACE via CONTEXT.
-If NAMESPACE is nil or omitted, it defaults to the current namespace."
+
+Optional argument CONTEXT is the `kubectl' context to use, defaulting to
+the current context; NAMESPACE is the namespace of DEP, defaulting to
+the current namespace.  CB is an optional callback function to call with
+no arguments when the deployment ends.
+
+Interactively, prompt for DEP.  With a prefix argument, prompt for
+NAMESPACE too.  With a double prefix argument, also prompt for CONTEXT."
   (interactive
-   (let ((namespace (seq-some
-                     (lambda (arg)
-                       (when (string-match "--namespace=\\(.+\\)" arg)
-                         (match-string 1 arg)))
-                     (kubed-transient-args 'kubed-transient-rollout))))
-     (list (kubed-read-deployment "Restart deployment" nil nil nil namespace)
-           nil namespace)))
-  (unless (zerop
-           (apply #'call-process
-                  kubed-kubectl-program nil nil nil
-                  "rollout" "restart" "deployment" dep
-                  (append
-                   (when namespace (list "-n" namespace))
-                   (when context (list "--context" context)))))
-    (user-error "Failed to restart Kubernetes deployment `%s'" dep))
-  (message "Restarting Kubernetes deployment `%s'." dep)
-  (when kubed-restart-deployment-watch-status
-    (kubed-watch-deployment-status dep context namespace)))
+   (let (context namespace)
+     (dolist (arg (kubed-transient-args 'kubed-transient-rollout))
+       (cond
+        ((string-match "--context=\\(.+\\)" arg)
+         (setq context (match-string 1 arg)))
+        ((string-match "--namespace=\\(.+\\)" arg)
+         (setq namespace (match-string 1 arg)))))
+     (unless context
+       (setq context
+             (let ((cxt (kubed-local-context)))
+               (if (equal current-prefix-arg '(16))
+                   (kubed-read-context "Context" cxt)
+                 cxt))))
+     (unless namespace
+       (setq namespace
+             (let ((cur (kubed-local-namespace context)))
+               (if current-prefix-arg
+                   (kubed-read-namespace "Namespace" cur nil context)
+                 cur))))
+     (list (kubed-read-deployment "Restart deployment" nil nil
+                                  context namespace)
+           context namespace)))
+  (let ((context (or context (kubed-local-context)))
+        (namespace (or namespace (kubed-local-namespace context))))
+    (unless (zerop
+             (apply #'call-process
+                    kubed-kubectl-program nil nil nil
+                    "rollout" "restart" "deployment" dep
+                    (append
+                     (when namespace (list "-n" namespace))
+                     (when context (list "--context" context)))))
+      (user-error "Failed to restart Kubernetes deployment `%s'" dep))
+    (message "Restarting Kubernetes deployment `%s'." dep)
+    (when kubed-restart-deployment-watch-status
+      (kubed-watch-deployment-status
+       dep context namespace
+       (lambda ()
+         (kubed-update "deployments" context namespace))))))
 
 ;;;###autoload (autoload 'kubed-display-deployment "kubed" nil t)
 ;;;###autoload (autoload 'kubed-edit-deployment "kubed" nil t)