Skip to content

Commit

Permalink
krd for kubectl redistribution deployment (nushell#745)
Browse files Browse the repository at this point in the history
Co-authored-by: nash <[email protected]>
  • Loading branch information
fj0r and nashvi committed Jan 25, 2024
1 parent f0dac68 commit d9ba934
Showing 1 changed file with 38 additions and 2 deletions.
40 changes: 38 additions & 2 deletions modules/kubernetes/kubernetes.nu
Original file line number Diff line number Diff line change
Expand Up @@ -425,6 +425,18 @@ export def kgno [] {
| rename name status roles age version internal-ip external-ip os kernel runtime
}

def "nu-complete kube nodes" [context: string, offset: int] {
let ctx = $context | argx parse
kubectl get nodes -o wide | from ssv -a
| each {|x| {value: $x.NAME, description: $"($x.INTERNAL-IP)(char tab)($x.ROLES)"} }
}

def "nu-complete kube deploys" [context: string, offset: int] {
let ctx = $context | argx parse
let ns = $ctx.namespace? | with-flag -n
kubectl get ...$ns deployments | from ssv -a | get NAME
}

def "nu-complete kube deploys and pods" [context: string, offset: int] {
let ctx = $context | argx parse
let ns = $ctx.namespace? | with-flag -n
Expand Down Expand Up @@ -671,7 +683,7 @@ export def ked [
def "nu-complete num9" [] { [0 1 2 3] }
# kubectl scale deployment
export def ksd [
d: string@"nu-complete kube res via name"
d: string@"nu-complete kube deploys"
num: string@"nu-complete num9"
--namespace (-n): string@"nu-complete kube ns"
] {
Expand All @@ -682,9 +694,10 @@ export def ksd [
kubectl scale ...$ns deployments $d --replicas $num
}
}

# kubectl scale deployment with reset
export def ksdr [
d: string@"nu-complete kube res via name"
d: string@"nu-complete kube deploys"
num: int@"nu-complete num9"
--namespace (-n): string@"nu-complete kube ns"
] {
Expand All @@ -699,6 +712,29 @@ export def ksdr [
}
}


# kubectl redistribution deployment
export def krd [
d: string@"nu-complete kube deploys"
...nodes: string@"nu-complete kube nodes"
--namespace (-n): string@"nu-complete kube ns"
] {
let ns = $namespace | with-flag -n
let nums = kubectl get nodes | from ssv -a | length
kubectl scale ...$ns deployments $d --replicas $nums
let labels = kubectl get ...$ns deploy $d --output=json
| from json
| get spec.selector.matchLabels
| transpose k v
| each {|x| $"($x.k)=($x.v)"}
| str join ','
let pods = kubectl get ...$ns pods -l $labels -o wide | from ssv -a
for p in ($pods | where NODE not-in $nodes) {
kubectl delete ...$ns pod --grace-period=0 --force $p.NAME
}
kubectl scale ...$ns deployments $d --replicas ($pods | where NODE in $nodes | length)
}

# kubectl rollout status deployment
export alias krsd = kubectl rollout status deployment
# kubectl get rs
Expand Down

0 comments on commit d9ba934

Please sign in to comment.