1
Fork 0
mirror of https://github.com/RGBCube/nu_scripts synced 2025-08-02 15:17:47 +00:00

clean up kubernetes.nu (#486)

* add the original kubectl command as description of abbreviation

* replace nu-complete kube pods, services, deployments with `res via name`

* kg support --jsonpath

* kgp, kgs, kgd support --jsonpath

* refactor kep, kdp, kgd, kdels

* kg support --selector

* kg support --wide

- remove kgpl
- kgp, kgd support --selector

* kg support --watch and rename wide to verbose

- remove kgpa (kg pod -A)
- remove kgpw (kg pod -w)

* add kind in output of `kg -v`

used with multiple types such as `kg pod,svc -v`

---------

Co-authored-by: agent <agent@nuc>
This commit is contained in:
fj0r 2023-05-12 19:16:07 +08:00 committed by GitHub
parent 967fdabe30
commit 58a05e91da
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -44,34 +44,45 @@ export def `kcache flush` [] {
export-env { export-env {
let-env KUBERNETES_SCHEMA_URL = $"file:///($env.HOME)/.config/kubernetes-json-schema/all.json" let-env KUBERNETES_SCHEMA_URL = $"file:///($env.HOME)/.config/kubernetes-json-schema/all.json"
let-env KUBERNETES_RESOURCE_ABBR = {
s: services
d: deployments
p: pods
}
} }
### file # kubectl apply -f
export def kaf [p: path] { export def kaf [p: path] {
kubectl apply -f $p kubectl apply -f $p
} }
# kubectl diff -f
export def kdf [p: path] { export def kdf [p: path] {
kubectl diff -f $p kubectl diff -f $p
} }
# kubectl delete -f
export def kdelf [p: path] { export def kdelf [p: path] {
kubectl delete -f $p kubectl delete -f $p
} }
# kubectl apply -k
export def kak [p: path] { export def kak [p: path] {
kubectl apply -k $p kubectl apply -k $p
} }
# kubectl diff -k
export def kdk [p: path] { export def kdk [p: path] {
kubectl diff -k $p kubectl diff -k $p
} }
# kubectl delete -k
export def kdelk [p: path] { export def kdelk [p: path] {
kubectl delete -k $p kubectl delete -k $p
} }
# kubectl kustomize (template)
export def kk [p: path] { export def kk [p: path] {
kubectl kustomize $p kubectl kustomize $p
} }
@ -117,10 +128,12 @@ def "nu-complete kube ns" [] {
} }
} }
# kubectl change context
export def kcc [ctx: string@"nu-complete kube ctx"] { export def kcc [ctx: string@"nu-complete kube ctx"] {
kubectl config use-context $ctx kubectl config use-context $ctx
} }
# kubectl (change) namespace
export def kn [ns: string@"nu-complete kube ns"] { export def kn [ns: string@"nu-complete kube ns"] {
kubectl config set-context --current $"--namespace=($ns)" kubectl config set-context --current $"--namespace=($ns)"
} }
@ -168,12 +181,12 @@ export def-env kcconf [name: string@"nu-complete kube ctx"] {
} }
### common ### common
export def "nu-complete kube kind without cache" [] { def "nu-complete kube kind without cache" [] {
kubectl api-resources | from ssv -a | get NAME kubectl api-resources | from ssv -a | get NAME
| append (kubectl get crd | from ssv -a | get NAME) | append (kubectl get crd | from ssv -a | get NAME)
} }
export def "nu-complete kube kind" [] { def "nu-complete kube kind" [] {
let ctx = (kube-config) let ctx = (kube-config)
let cache = $'($env.HOME)/.cache/nu-complete/k8s-api-resources/($ctx.data.current-context).json' let cache = $'($env.HOME)/.cache/nu-complete/k8s-api-resources/($ctx.data.current-context).json'
ensure-cache-by-lines $cache $ctx.path {|| ensure-cache-by-lines $cache $ctx.path {||
@ -186,28 +199,67 @@ export def "nu-complete kube kind" [] {
def "nu-complete kube res" [context: string, offset: int] { def "nu-complete kube res" [context: string, offset: int] {
let ctx = ($context | parse cmd) let ctx = ($context | parse cmd)
let def = ($ctx | get args.1) let def = ($ctx | get args.1)
let ns = (do -i { $ctx | get '-n' }) let ns = if ($ctx.-n? | is-empty) { [] } else { [-n $ctx.-n] }
let ns = if ($ns|is-empty) { [] } else { [-n $ns] }
kubectl get $ns $def | from ssv -a | get NAME kubectl get $ns $def | from ssv -a | get NAME
} }
def "nu-complete kube res via name" [context: string, offset: int] {
let ctx = ($context | parse cmd)
let cmd = ($ctx | get args.0)
let def = ($env.KUBERNETES_RESOURCE_ABBR | get ($cmd | str substring (($cmd | str length) - 1)..))
echo $'($cmd), ($def)' | save -a ~/.nulog
let ns = if ($ctx.-n? | is-empty) { [] } else { [-n $ctx.-n] }
kubectl get $ns $def | from ssv -a | get NAME
}
def "nu-complete kube path" [context: string, offset: int] {
}
# kubectl get
export def kg [ export def kg [
r: string@"nu-complete kube kind" k: string@"nu-complete kube kind"
-n: string@"nu-complete kube ns" r?: string@"nu-complete kube res"
--all (-A):bool --namespace (-n): string@"nu-complete kube ns"
--jsonpath (-p): string@"nu-complete kube path"
--selector (-l): string
--verbose (-v): bool
--watch (-w): bool
--all (-A): bool
] { ] {
let n = if $all { let n = if $all {
[-A] [-A]
} else if ($n | is-empty) { } else if ($namespace | is-empty) {
[] []
} else { } else {
[-n $n] [-n $namespace]
}
let r = if ($r | is-empty) { [] } else { [$r] }
let l = if ($selector | is-empty) { [] } else { [-l $selector] }
if ($jsonpath | is-empty) {
if ($verbose) {
kubectl get -o json $n $k $r | from json | get items
| each {|x|
{
name: $x.metadata.name
kind: $x.kind
ns: $x.metadata.namespace
created: ($x.metadata.creationTimestamp | into datetime)
metadata: $x.metadata
status: $x.status
spec: $x.spec
}
}
} else if $watch {
kubectl get $n $k $r --watch
} else {
kubectl get $n $k $r | from ssv -a
}
} else {
kubectl get $n $k $r $"--output=jsonpath={($jsonpath)}" | from yaml
} }
#let h = ($d | columns | str kebab-case)
#$d | rename ...$h
kubectl get $n $r | from ssv -a
} }
# kubectl create
export def kc [ export def kc [
r: string@"nu-complete kube kind" r: string@"nu-complete kube kind"
-n: string@"nu-complete kube ns" -n: string@"nu-complete kube ns"
@ -217,6 +269,7 @@ export def kc [
kubectl create $n $r $name kubectl create $n $r $name
} }
# kubectl get -o yaml
export def ky [ export def ky [
r: string@"nu-complete kube kind" r: string@"nu-complete kube kind"
i: string@"nu-complete kube res" i: string@"nu-complete kube res"
@ -226,6 +279,7 @@ export def ky [
kubectl get $n -o yaml $r $i kubectl get $n -o yaml $r $i
} }
# kubectl describe
export def kd [ export def kd [
r: string@"nu-complete kube kind" r: string@"nu-complete kube kind"
i: string@"nu-complete kube res" i: string@"nu-complete kube res"
@ -235,15 +289,17 @@ export def kd [
kubectl describe $n $r $i kubectl describe $n $r $i
} }
# kubectl edit
export def ke [ export def ke [
r: string@"nu-complete kube kind" k: string@"nu-complete kube kind"
i: string@"nu-complete kube res" r: string@"nu-complete kube res"
-n: string@"nu-complete kube ns" -n: string@"nu-complete kube ns"
] { ] {
let n = if ($n|is-empty) { [] } else { [-n $n] } let n = if ($n|is-empty) { [] } else { [-n $n] }
kubectl edit $n $r $i kubectl edit $n $k $r
} }
# kubectl delete
export def kdel [ export def kdel [
r: string@"nu-complete kube kind" r: string@"nu-complete kube kind"
i: string@"nu-complete kube res" i: string@"nu-complete kube res"
@ -256,13 +312,12 @@ export def kdel [
} }
### node # kubectl get nodes
export def kgno [] { export def kgno [] {
kubectl get nodes -o wide | from ssv -a kubectl get nodes -o wide | from ssv -a
| rename name status roles age version internal-ip external-ip os kernel runtime | rename name status roles age version internal-ip external-ip os kernel runtime
} }
### pods
def "nu-complete kube pods" [context: string, offset: int] { def "nu-complete kube pods" [context: string, offset: int] {
let ctx = ($context | parse cmd) let ctx = ($context | parse cmd)
let ns = (do -i { $ctx | get '-n' }) let ns = (do -i { $ctx | get '-n' })
@ -280,50 +335,27 @@ def "nu-complete kube ctns" [context: string, offset: int] {
kubectl get $ns pod $pod -o jsonpath={.spec.containers[*].name} | split row ' ' kubectl get $ns pod $pod -o jsonpath={.spec.containers[*].name} | split row ' '
} }
export def kgpl [] { # kubectl get pods
kubectl get pods -o json export def kgp [
| from json r?: string@"nu-complete kube res via name"
| get items --namespace (-n): string@"nu-complete kube ns"
| each {|x| --jsonpath (-p): string@"nu-complete kube path"
let rs = $x.status.containerStatuses.0.restartCount --selector (-l): string
{ ] {
namespace: $x.metadata.namespace, kg pods -n $namespace -p $jsonpath -l $selector $r
name: $x.metadata.name,
status: $x.status.phase,
restarts: ($rs | split row ' '| get 0 | into int),
age: ($x.status.startTime | into datetime)
}}
} }
export def kgpa [] { # kubectl edit pod
kubectl get pods -o wide -A | from ssv -a export def kep [-n: string@"nu-complete kube ns", pod: string@"nu-complete kube res via name"] {
| rename namespace name ready status restarts age ip node ke -n $n pod $pod
| each {|x| ($x| upsert restarts ($x.restarts|split row ' '| get 0 | into int)) }
| reject 'NOMINATED NODE' 'READINESS GATES'
} }
export def kgp [-n: string@"nu-complete kube ns"] { # kubectl describe pod
let n = if ($n|is-empty) { [] } else { [-n $n] } export def kdp [-n: string@"nu-complete kube ns", pod: string@"nu-complete kube res via name"] {
kubectl get pods $n -o wide | from ssv -a kd -n $n pod $pod
| rename name ready status restarts age ip node
| each {|x| ($x| upsert restarts ($x.restarts|split row ' '| get 0 | into int)) }
| reject 'NOMINATED NODE' 'READINESS GATES'
}
export def kgpw [] {
kubectl get pods --watch
}
export def kep [-n: string@"nu-complete kube ns", pod: string@"nu-complete kube pods"] {
let n = if ($n|is-empty) { [] } else { [-n $n] }
kubectl edit pod $n $pod
}
export def kdp [-n: string@"nu-complete kube ns", pod: string@"nu-complete kube pods"] {
let n = if ($n|is-empty) { [] } else { [-n $n] }
kubectl describe pod $n $pod
} }
# kubectl attach (exec -it)
export def ka [ export def ka [
pod: string@"nu-complete kube pods" pod: string@"nu-complete kube pods"
-n: string@"nu-complete kube ns" -n: string@"nu-complete kube ns"
@ -335,6 +367,7 @@ export def ka [
kubectl exec $n -it $pod $c -- (if ($args|is-empty) { 'bash' } else { $args }) kubectl exec $n -it $pod $c -- (if ($args|is-empty) { 'bash' } else { $args })
} }
# kubectl logs
export def kl [ export def kl [
pod: string@"nu-complete kube pods" pod: string@"nu-complete kube pods"
--namespace(-n): string@"nu-complete kube ns" --namespace(-n): string@"nu-complete kube ns"
@ -345,6 +378,7 @@ export def kl [
kubectl logs $n $pod $c kubectl logs $n $pod $c
} }
# kubectl logs -f
export def klf [ export def klf [
pod: string@"nu-complete kube pods" pod: string@"nu-complete kube pods"
--namespace(-n): string@"nu-complete kube ns" --namespace(-n): string@"nu-complete kube ns"
@ -358,6 +392,7 @@ export def klf [
def "nu-complete port forward type" [] { def "nu-complete port forward type" [] {
[pod svc] [pod svc]
} }
# kubectl port-forward
export def kpf [ export def kpf [
res: string@"nu-complete port forward type" res: string@"nu-complete port forward type"
target: string@"nu-complete kube res" target: string@"nu-complete kube res"
@ -388,6 +423,7 @@ def "nu-complete kube cp" [cmd: string, offset: int] {
$files | append $ctn $files | append $ctn
} }
} }
# kubectl cp
export def kcp [ export def kcp [
lhs: string@"nu-complete kube cp" lhs: string@"nu-complete kube cp"
rhs: string@"nu-complete kube cp" rhs: string@"nu-complete kube cp"
@ -399,53 +435,45 @@ export def kcp [
kubectl cp $n $lhs $c $rhs kubectl cp $n $lhs $c $rhs
} }
### service # kubectl get services
def "nu-complete kube service" [context: string, offset: int] { export def kgs [
let ctx = ($context | parse cmd) r?: string@"nu-complete kube res via name"
let ns = (do -i { $ctx | get '-n' }) --namespace (-n): string@"nu-complete kube ns"
let ns = if ($ns|is-empty) { [] } else { [-n $ns] } --jsonpath (-p): string@"nu-complete kube path"
kubectl get $ns services | from ssv -a | get NAME --selector (-l): string
] {
kg services -n $namespace -p $jsonpath -l $selector $r
} }
export def kgs [-n: string@"nu-complete kube ns"] { # kubectl edit service
let n = if ($n|is-empty) { [] } else { [-n $n] } export def kes [svc: string@"nu-complete kube res via name", -n: string@"nu-complete kube ns"] {
kubectl get $n services | from ssv -a ke -n $n service $svc
| rename name type cluster-ip external-ip ports age selector
} }
export def kes [svc: string@"nu-complete kube service", -n: string@"nu-complete kube ns"] { # kubectl delete service
let n = if ($n|is-empty) { [] } else { [-n $n] } export def kdels [svc: string@"nu-complete kube res via name", -n: string@"nu-complete kube ns"] {
kubectl edit $n service $svc kdel -n $n service $svc
} }
export def kdels [svc: string@"nu-complete kube service", -n: string@"nu-complete kube ns"] { # kubectl get deployments
let n = if ($n|is-empty) { [] } else { [-n $n] } export def kgd [
kubectl delete $n service $svc r?: string@"nu-complete kube res via name"
--namespace (-n): string@"nu-complete kube ns"
--jsonpath (-p): string@"nu-complete kube path"
--selector (-l): string
] {
kg -n $namespace deployments -p $jsonpath -l $selector $r
} }
### deployments # kubectl edit deployment
def "nu-complete kube deployments" [context: string, offset: int] { export def ked [d: string@"nu-complete kube res via name", -n: string@"nu-complete kube ns"] {
let ctx = ($context | parse cmd) ke -n $n deployments $d
let ns = (do -i { $ctx | get '-n' })
let ns = if ($ns|is-empty) { [] } else { [-n $ns] }
kubectl get $ns deployments | from ssv -a | get NAME
}
export def kgd [-n: string@"nu-complete kube ns"] {
let n = if ($n|is-empty) { [] } else { [-n $n] }
kubectl get $n deployments -o wide | from ssv -a
| rename name ready up-to-date available age containers images selector
| reject selector
}
export def ked [d: string@"nu-complete kube deployments", -n: string@"nu-complete kube ns"] {
let n = if ($n|is-empty) { [] } else { [-n $n] }
kubectl edit $n deployments $d
} }
def "nu-complete num9" [] { [1 2 3] } def "nu-complete num9" [] { [1 2 3] }
# kubectl scale deployment
export def ksd [ export def ksd [
d: string@"nu-complete kube deployments" d: string@"nu-complete kube res via name"
num: string@"nu-complete num9" num: string@"nu-complete num9"
-n: string@"nu-complete kube ns" -n: string@"nu-complete kube ns"
] { ] {
@ -456,8 +484,9 @@ export def ksd [
kubectl scale $n deployments $d --replicas $num kubectl scale $n deployments $d --replicas $num
} }
} }
# kubectl scale deployment with reset
export def ksdr [ export def ksdr [
d: string@"nu-complete kube deployments" d: string@"nu-complete kube res via name"
num: int@"nu-complete num9" num: int@"nu-complete num9"
-n: string@"nu-complete kube ns" -n: string@"nu-complete kube ns"
] { ] {
@ -472,14 +501,20 @@ export def ksdr [
} }
} }
# kubectl rollout status deployment
export alias krsd = kubectl rollout status deployment export alias krsd = kubectl rollout status deployment
# kubectl get rs
export alias kgrs = kubectl get rs export alias kgrs = kubectl get rs
export def krh [-n: string@"nu-complete kube ns", --revision (-v): int, dpl: string@"nu-complete kube deployments"] {
# kubectl rollout history
export def krhd [-n: string@"nu-complete kube ns", --revision (-v): int, dpl: string@"nu-complete kube res via name"] {
let n = if ($n|is-empty) { [] } else { [-n $n] } let n = if ($n|is-empty) { [] } else { [-n $n] }
let v = if ($revision|is-empty) { [] } else { [ $"--revision=($revision)" ] } let v = if ($revision|is-empty) { [] } else { [ $"--revision=($revision)" ] }
kubectl $n rollout history $"deployment/($dpl)" $v kubectl $n rollout history $"deployment/($dpl)" $v
} }
export def kru [-n: string@"nu-complete kube ns", --revision (-v): int, dpl: string@"nu-complete kube deployments"] {
# kubectl rollout undo
export def krud [-n: string@"nu-complete kube ns", --revision (-v): int, dpl: string@"nu-complete kube res via name"] {
let n = if ($n|is-empty) { [] } else { [-n $n] } let n = if ($n|is-empty) { [] } else { [-n $n] }
let v = if ($revision|is-empty) { [] } else { [ $"--to-revision=($revision)" ] } let v = if ($revision|is-empty) { [] } else { [ $"--to-revision=($revision)" ] }
kubectl $n rollout undo $"deployment/($dpl)" $v kubectl $n rollout undo $"deployment/($dpl)" $v
@ -487,7 +522,7 @@ export def kru [-n: string@"nu-complete kube ns", --revision (-v): int, dpl: str
export alias ksss = kubectl scale statefulset export alias ksss = kubectl scale statefulset
export alias krsss = kubectl rollout status statefulset export alias krsss = kubectl rollout status statefulset
### kubectl top pod # kubectl top pod
export def ktp [-n: string@"nu-complete kube ns"] { export def ktp [-n: string@"nu-complete kube ns"] {
let n = if ($n|is-empty) { [] } else { [-n $n] } let n = if ($n|is-empty) { [] } else { [-n $n] }
kubectl top pod $n | from ssv -a | rename name cpu mem kubectl top pod $n | from ssv -a | rename name cpu mem
@ -498,6 +533,7 @@ export def ktp [-n: string@"nu-complete kube ns"] {
} } } }
} }
# kubectl top pod -all
export def ktpa [] { export def ktpa [] {
kubectl top pod -A | from ssv -a | rename namespace name cpu mem kubectl top pod -A | from ssv -a | rename namespace name cpu mem
| each {|x| { | each {|x| {
@ -508,7 +544,7 @@ export def ktpa [] {
} } } }
} }
### kube top node # kubectl top node
export def ktn [] { export def ktn [] {
kubectl top node | from ssv -a | rename name cpu pcpu mem pmem kubectl top node | from ssv -a | rename name cpu pcpu mem pmem
| each {|x| { | each {|x| {