("c" "Create" kubed-transient-create)
("r" "Run" kubed-transient-run)
("a" "Attach" kubed-transient-attach)
+ ("d" "Diff" kubed-transient-diff)
("!" "Command line" kubed-kubectl-command)])
;;;###autoload
:value '("--stdin")
:scope '("attach")))
+;;;###autoload
+(transient-define-prefix kubed-transient-diff ()
+ "Display difference between Kubernetes resource definition and current state."
+ ["Switches"
+ ("-M" "Include managed fields" "--show-managed-fields")]
+ ["Options"
+ ("-f" "Definition file" "--filename="
+ :reader kubed-transient-read-resource-definition-file-name)]
+ ["Actions"
+ ("d" "Diff" kubed-diff)
+ ("!" "Command line" kubed-kubectl-command)]
+ (interactive)
+ (transient-setup 'kubed-transient-diff nil nil
+ :scope '("diff")))
+
;;;###autoload
(transient-define-prefix kubed-transient-run ()
"Run container image in a Kubernetes pod."
(when stdin '("-i"))
(when tty '("-t"))))))
+;;;###autoload
+(defun kubed-diff (definition &optional include-managed)
+ "Display difference between Kubernetes resource DEFINITION and current state.
+
+Non-nil optional argument INCLUDE-MANAGED (interactively, the prefix
+argument) says to include managed fields in the comparison."
+ (interactive
+ (let ((definition nil) (include-managed nil))
+ (dolist (arg (when (and (fboundp 'transient-args)
+ (fboundp 'kubed-transient-diff))
+ (transient-args 'kubed-transient-diff)))
+ (cond
+ ((string-match "--filename=\\(.+\\)" arg)
+ (setq definition (match-string 1 arg)))
+ ((equal "--show-managed-fields" arg) (setq include-managed t))))
+ (list (or definition (kubed-read-resource-definition-file-name))
+ (or include-managed current-prefix-arg))))
+ (let ((buf (get-buffer-create "*kubed-diff*")))
+ (with-current-buffer buf
+ (setq buffer-read-only nil)
+ (delete-region (point-min) (point-max))
+ (fundamental-mode)
+ (call-process kubed-kubectl-program nil t nil "diff"
+ (concat "--show-managed-fields="
+ (if include-managed "true" "false"))
+ "-f" (expand-file-name definition))
+ (setq buffer-read-only t)
+ (diff-mode)
+ (goto-char (point-min)))
+ (display-buffer buf)))
+
(defvar kubed-kubectl-command-history nil
"Minibuffer history for `kubed-kubectl-command'.")
"j" 'kubed-job-prefix-map
"d" 'kubed-deployment-prefix-map
"C" #'kubed-use-context
+ "U" #'kubed-update-all
"A" #'kubed-all-namespaces-mode
"+" #'kubed-create
"R" #'kubed-run
+ "D" #'kubed-diff
"@" #'kubed-attach
"!" #'kubed-kubectl-command)