src/poshy-wrap-kubectl.psm1

#!/usr/bin/env pwsh
$ErrorActionPreference = "Stop"
Set-StrictMode -Version Latest


if (-not (Test-Command kubectl) -and (-not (Get-Variable -Name PWSHRC_FORCE_MODULES_EXPORT_UNSUPPORTED -Scope Global -ValueOnly -ErrorAction SilentlyContinue))) {
    return
}

function Invoke-Kubectl {
    kubectl @args
}
Set-Alias -Name kc -Value Invoke-Kubectl

function Invoke-KubectlGetPods {
    kubectl get pods @args
}
Set-Alias -Name kcgp -Value Invoke-KubectlGetPods

function Invoke-KubectlGetDeployments {
    kubectl get deployments @args
}
Set-Alias -Name kcgd -Value Invoke-KubectlGetDeployments

function Invoke-KubectlGetNodes {
    kubectl get nodes @args
}
Set-Alias -Name kcgn -Value Invoke-KubectlGetNodes

function Invoke-KubectlDescribePod {
    kubectl describe pod @args
}
Set-Alias -Name kcdp -Value Invoke-KubectlDescribePod

function Invoke-KubectlDescribeDeployment {
    kubectl describe deployment @args
}
Set-Alias -Name kcdd -Value Invoke-KubectlDescribeDeployment

function Invoke-KubectlDescribeNode {
    kubectl describe node @args
}
Set-Alias -Name kcdn -Value Invoke-KubectlDescribeNode

function Invoke-KubectlGetPodsAllNamespaces {
    kubectl get pods --all-namespaces @args
}
Set-Alias -Name kcgpan -Value Invoke-KubectlGetPodsAllNamespaces

function Invoke-KubectlGetDeploymentsAllNamespaces {
    kubectl get deployments --all-namespaces @args
}
Set-Alias -Name kcgdan -Value Invoke-KubectlGetDeploymentsAllNamespaces

# launches a disposable netshoot pod in the k8s cluster
function Invoke-KubectlRunNetshoot {
    kubectl run netshoot-$(date +%s) --rm -i --tty --image nicolaka/netshoot -- /bin/bash
}
Set-Alias -Name kcnetshoot -Value Invoke-KubectlRunNetshoot

# This command is used in daily life
Set-Alias -Name k -Value Invoke-Kubectl

# Execute a kubectl command against all namespaces
function Invoke-KubectlAllNamespaces {
    kubectl @args --all-namespaces
}
Set-Alias -Name kca -Value Invoke-KubectlAllNamespaces

# Apply a YML file
function Invoke-KubectlApplyFromFile {
    kubectl apply -f @args
}
Set-Alias -Name kaf -Value Invoke-KubectlApplyFromFile

# Drop into an interactive terminal on a container
function Invoke-KubectlExecInteractively {
    kubectl exec -t -i @args
}
Set-Alias -Name keti -Value Invoke-KubectlExecInteractively

# Manage configuration quickly to switch contexts between local, dev ad staging.
function Invoke-KubectlConfigUseContext {
    kubectl config use-context @args
}
Set-Alias -Name kcuc -Value Invoke-KubectlConfigUseContext

function Invoke-KubectlConfigSetContext {
    kubectl config set-context @args
}
Set-Alias -Name kcsc -Value Invoke-KubectlConfigSetContext

function Invoke-KubectlConfigDeleteContext {
    kubectl config delete-context @args
}
Set-Alias -Name kcdc -Value Invoke-KubectlConfigDeleteContext

function Invoke-KubectlConfigCurrentContext {
    kubectl config current-context @args
}
Set-Alias -Name kccc -Value Invoke-KubectlConfigCurrentContext

# List all contexts
function Invoke-KubectlConfigGetContexts {
    kubectl config get-contexts @args
}
Set-Alias -Name kcgc -Value Invoke-KubectlConfigGetContexts

# General aliases
function Invoke-KubectlDelete {
    kubectl delete @args
}
Set-Alias -Name kdel -Value Invoke-KubectlDelete

function Invoke-KubectlDeleteFromFile {
    kubectl delete -f @args
}
Set-Alias -Name kdelf -Value Invoke-KubectlDeleteFromFile

# Pod management.
Set-Alias -Name kgp -Value Invoke-KubectlGetPods
Set-Alias -Name kgpa -Value Invoke-KubectlGetPodsAllNamespaces

function Invoke-KubectlGetPodsWatch {
    kubectl get pods --watch @args
}
Set-Alias -Name kgpw -Value Invoke-KubectlGetPodsWatch

function Invoke-KubectlGetPodsWide {
    kubectl get pods -o wide @args
}
Set-Alias -Name kgpwide -Value Invoke-KubectlGetPodsWide

function Invoke-KubectlEditPods {
    kubectl edit pods @args
}
Set-Alias -Name kep -Value Invoke-KubectlEditPods

function Invoke-KubectlDescribePods {
    kubectl describe pods @args
}
Set-Alias -Name kdp -Value Invoke-KubectlDescribePods

function Invoke-KubectlDeletePods {
    kubectl delete pods @args
}
Set-Alias -Name kdelp -Value Invoke-KubectlDeletePods

function Invoke-KubectlGetPodsAllNamespacesWide {
    kubectl get pods --all-namespaces -o wide @args
}
Set-Alias -Name kgpall -Value Invoke-KubectlGetPodsAllNamespacesWide

# get pod by label: kgpl "app=myapp" -n myns
function Invoke-KubectlGetPodsByLabel {
    kubectl get pods -l @args
}
Set-Alias -Name kgpl -Value Invoke-KubectlGetPodsByLabel

# get pod by namespace: kgpn kube-system"
function Invoke-KubectlGetPodsByNamespace {
    kubectl get pods -n @args
}
Set-Alias -Name kgpn -Value Invoke-KubectlGetPodsByNamespace

# Service management.
function Invoke-KubectlGetService {
    kubectl get svc @args
}
Set-Alias -Name kgs -Value Invoke-KubectlGetService

function Invoke-KubectlGetServiceAllNamespaces {
    kubectl get svc --all-namespaces @args
}
Set-Alias -Name kgsa -Value Invoke-KubectlGetServiceAllNamespaces

function Invoke-KubectlGetServiceWatch {
    kubectl get svc --watch @args
}
Set-Alias -Name kgsw -Value Invoke-KubectlGetServiceWatch

function Invoke-KubectlGetServiceWide {
    kubectl get svc -o wide @args
}
Set-Alias -Name kgswide -Value Invoke-KubectlGetServiceWide

function Invoke-KubectlEditService {
    kubectl edit svc @args
}
Set-Alias -Name kes -Value Invoke-KubectlEditService

function Invoke-KubectlDescribeService {
    kubectl describe svc @args
}
Set-Alias -Name kds -Value Invoke-KubectlDescribeService

function Invoke-KubectlDeleteService {
    kubectl delete svc @args
}
Set-Alias -Name kdels -Value Invoke-KubectlDeleteService

# Ingress management
function Invoke-KubectlGetIngress {
    kubectl get ingress @args
}
Set-Alias -Name kgi -Value Invoke-KubectlGetIngress

function Invoke-KubectlGetIngressAllNamespaces {
    kubectl get ingress --all-namespaces @args
}
Set-Alias -Name kgia -Value Invoke-KubectlGetIngressAllNamespaces

function Invoke-KubectlEditIngress {
    kubectl edit ingress @args
}
Set-Alias -Name kei -Value Invoke-KubectlEditIngress

function Invoke-KubectlDescribeIngress {
    kubectl describe ingress @args
}
Set-Alias -Name kdi -Value Invoke-KubectlDescribeIngress

function Invoke-KubectlDeleteIngress {
    kubectl delete ingress @args
}
Set-Alias -Name kdeli -Value Invoke-KubectlDeleteIngress

# Namespace management
function Invoke-KubectlGetNamespaces {
    kubectl get namespaces @args
}
Set-Alias -Name kgns -Value Invoke-KubectlGetNamespaces

function Invoke-KubectlEditNamespace {
    kubectl edit namespace @args
}
Set-Alias -Name kens -Value Invoke-KubectlEditNamespace

function Invoke-KubectlDescribeNamespace {
    kubectl describe namespace @args
}
Set-Alias -Name kdns -Value Invoke-KubectlDescribeNamespace

function Invoke-KubectlDeleteNamespace {
    kubectl delete namespace @args
}
Set-Alias -Name kdelns -Value Invoke-KubectlDeleteNamespace

function Invoke-KubectlConfigSetContextCurrentNamespace {
    kubectl config set-context --current --namespace @args
}
Set-Alias -Name kcn -Value Invoke-KubectlConfigSetContextCurrentNamespace

# ConfigMap management
function Invoke-KubectlGetConfigMaps {
    kubectl get configmaps @args
}
Set-Alias -Name kgcm -Value Invoke-KubectlGetConfigMaps

function Invoke-KubectlGetConfigMapsAllNamespaces {
    kubectl get configmaps --all-namespaces @args
}
Set-Alias -Name kgcma -Value Invoke-KubectlGetConfigMapsAllNamespaces

function Invoke-KubectlEditConfigMap {
    kubectl edit configmap @args
}
Set-Alias -Name kecm -Value Invoke-KubectlEditConfigMap

function Invoke-KubectlDescribeConfigMap {
    kubectl describe configmap @args
}
Set-Alias -Name kdcm -Value Invoke-KubectlDescribeConfigMap

function Invoke-KubectlDeleteConfigMap {
    kubectl delete configmap @args
}
Set-Alias -Name kdelcm -Value Invoke-KubectlDeleteConfigMap

# Secret management
function Invoke-KubectlGetSecret {
    kubectl get secret @args
}
Set-Alias -Name kgsec -Value Invoke-KubectlGetSecret

function Invoke-KubectlGetSecretAllNamespaces {
    kubectl get secret --all-namespaces @args
}
Set-Alias -Name kgseca -Value Invoke-KubectlGetSecretAllNamespaces

function Invoke-KubectlDescribeSecret {
    kubectl describe secret @args
}
Set-Alias -Name kdsec -Value Invoke-KubectlDescribeSecret

function Invoke-KubectlDeleteSecret {
    kubectl delete secret @args
}
Set-Alias -Name kdelsec -Value Invoke-KubectlDeleteSecret

# Deployment management.
function Invoke-KubectlGetDeployment {
    kubectl get deployment @args
}
Set-Alias -Name kgd -Value Invoke-KubectlGetDeployment

function Invoke-KubectlGetDeploymentAllNamespaces {
    kubectl get deployment --all-namespaces @args
}
Set-Alias -Name kgda -Value Invoke-KubectlGetDeploymentAllNamespaces

function Invoke-KubectlGetDeploymentWatch {
    kubectl get deployment --watch @args
}
Set-Alias -Name kgdw -Value Invoke-KubectlGetDeploymentWatch

function Invoke-KubectlGetDeploymentWide {
    kubectl get deployment -o wide @args
}
Set-Alias -Name kgdwide -Value Invoke-KubectlGetDeploymentWide

function Invoke-KubectlEditDeployment {
    kubectl edit deployment @args
}
Set-Alias -Name ked -Value Invoke-KubectlEditDeployment

Set-Alias -Name kdd -Value Invoke-KubectlDescribeDeployment

function Invoke-KubectlDeleteDeployment {
    kubectl delete deployment @args
}
Set-Alias -Name kdeld -Value Invoke-KubectlDeleteDeployment

function Invoke-KubectlScaleDeployment {
    kubectl scale deployment @args
}
Set-Alias -Name ksd -Value Invoke-KubectlScaleDeployment

function Invoke-KubectlRolloutStatusDeployment {
    kubectl rollout status deployment @args
}
Set-Alias -Name krsd -Value Invoke-KubectlRolloutStatusDeployment

function kres {
    [string] $timestamp = [DateTime]::UtcNow.ToString("yyyyMMddHHmmss")
    kubectl set env @args REFRESHED_AT=$timestamp
}

# Rollout management.
function Invoke-KubectlGetReplicaSet {
    kubectl get replicaset @args
}
Set-Alias -Name kgrs -Value Invoke-KubectlGetReplicaSet

function Invoke-KubectlDescribeReplicaSet {
    kubectl describe replicaset @args
}
Set-Alias -Name kdrs -Value Invoke-KubectlDescribeReplicaSet

function Invoke-KubectlEditReplicaSet {
    kubectl edit replicaset @args
}
Set-Alias -Name kers -Value Invoke-KubectlEditReplicaSet

function Invoke-KubectlRolloutHistory {
    kubectl rollout history @args
}
Set-Alias -Name krh -Value Invoke-KubectlRolloutHistory

function Invoke-KubectlRolloutUndo {
    kubectl rollout undo @args
}
Set-Alias -Name kru -Value Invoke-KubectlRolloutUndo

# Statefulset management.
function Invoke-KubectlGetStatefulSet {
    kubectl get statefulset @args
}
Set-Alias -Name kgss -Value Invoke-KubectlGetStatefulSet

function Invoke-KubectlGetStatefulSetAllNamespaces {
    kubectl get statefulset --all-namespaces @args
}
Set-Alias -Name kgssa -Value Invoke-KubectlGetStatefulSetAllNamespaces

function Invoke-KubectlGetStatefulSetWatch {
    kubectl get statefulset --watch @args
}
Set-Alias -Name kgssw -Value Invoke-KubectlGetStatefulSetWatch

function Invoke-KubectlGetStatefulSetWide {
    kubectl get statefulset -o wide @args
}
Set-Alias -Name kgsswide -Value Invoke-KubectlGetStatefulSetWide

function Invoke-KubectlEditStatefulSet {
    kubectl edit statefulset @args
}
Set-Alias -Name kess -Value Invoke-KubectlEditStatefulSet

function Invoke-KubectlDescribeStatefulSet {
    kubectl describe statefulset @args
}
Set-Alias -Name kdss -Value Invoke-KubectlDescribeStatefulSet

function Invoke-KubectlDeleteStatefulSet {
    kubectl delete statefulset @args
}
Set-Alias -Name kdelss -Value Invoke-KubectlDeleteStatefulSet

function Invoke-KubectlScaleStatefulSet {
    kubectl scale statefulset @args
}
Set-Alias -Name ksss -Value Invoke-KubectlScaleStatefulSet

function Invoke-KubectlRolloutStatusStatefulSet {
    kubectl rollout status statefulset @args
}
Set-Alias -Name krsss -Value Invoke-KubectlRolloutStatusStatefulSet

# Port forwarding
function Invoke-KubectlPortForward {
    kubectl port-forward @args
}
Set-Alias -Name kpf -Value Invoke-KubectlPortForward

# Tools for accessing all information
function Invoke-KubectlGetAll {
    kubectl get all @args
}
Set-Alias -Name kga -Value Invoke-KubectlGetAll

function Invoke-KubectlGetAllAllNamespaces {
    kubectl get all --all-namespaces @args
}
Set-Alias -Name kgaa -Value Invoke-KubectlGetAllAllNamespaces

# Logs
function Invoke-KubectlLogs {
    kubectl logs @args
}
Set-Alias -Name kl -Value Invoke-KubectlLogs

function Invoke-KubectlLogsSince1h {
    kubectl logs --since 1h @args
}
Set-Alias -Name kl1h -Value Invoke-KubectlLogsSince1h

function Invoke-KubectlLogsSince1m {
    kubectl logs --since 1m @args
}
Set-Alias -Name kl1m -Value Invoke-KubectlLogsSince1m

function Invoke-KubectlLogsSince1s {
    kubectl logs --since 1s @args
}
Set-Alias -Name kl1s -Value Invoke-KubectlLogsSince1s

function Invoke-KubectlLogsFollow {
    kubectl logs -f @args
}
Set-Alias -Name klf -Value Invoke-KubectlLogsFollow

function Invoke-KubectlLogsSince1hFollow {
    kubectl logs --since 1h -f @args
}
Set-Alias -Name klf1h -Value Invoke-KubectlLogsSince1hFollow

function Invoke-KubectlLogsSince1mFollow {
    kubectl logs --since 1m -f @args
}
Set-Alias -Name klf1m -Value Invoke-KubectlLogsSince1mFollow

function Invoke-KubectlLogsSince1sFollow {
    kubectl logs --since 1s -f @args
}
Set-Alias -Name klf1s -Value Invoke-KubectlLogsSince1sFollow

# File copy
function Invoke-KubectlCopy {
    kubectl cp @args
}
Set-Alias -Name kcp -Value Invoke-KubectlCopy

# Node Management
Set-Alias -Name kgno -Value Invoke-KubectlGetNodes

function Invoke-KubectlEditNode {
    kubectl edit node @args
}
Set-Alias -Name keno -Value Invoke-KubectlEditNode

Set-Alias -Name kdno -Value Invoke-KubectlDescribeNode

function Invoke-KubectlDeleteNode {
    kubectl delete node @args
}
Set-Alias -Name kdelno -Value Invoke-KubectlDeleteNode

# PVC management.
function Invoke-KubectlGetPersistentVolumeClaim {
    kubectl get pvc @args
}
Set-Alias -Name kgpvc -Value Invoke-KubectlGetPersistentVolumeClaim

function Invoke-KubectlGetPersistentVolumeClaimAllNamespaces {
    kubectl get pvc --all-namespaces @args
}
Set-Alias -Name kgpvca -Value Invoke-KubectlGetPersistentVolumeClaimAllNamespaces

function Invoke-KubectlGetPersistentVolumeClaimWatch {
    kubectl get pvc --watch @args
}
Set-Alias -Name kgpvcw -Value Invoke-KubectlGetPersistentVolumeClaimWatch

function Invoke-KubectlEditPersistentVolumeClaim {
    kubectl edit pvc @args
}
Set-Alias -Name kepvc -Value Invoke-KubectlEditPersistentVolumeClaim

function Invoke-KubectlDescribePersistentVolumeClaim {
    kubectl describe pvc @args
}
Set-Alias -Name kdpvc -Value Invoke-KubectlDescribePersistentVolumeClaim

function Invoke-KubectlDeletePersistentVolumeClaim {
    kubectl delete pvc @args
}
Set-Alias -Name kdelpvc -Value Invoke-KubectlDeletePersistentVolumeClaim

# Service account management.
function Invoke-KubectlDescribeServiceAccount {
    kubectl describe sa @args
}
Set-Alias -Name kdsa -Value Invoke-KubectlDescribeServiceAccount

function Invoke-KubectlDeleteServiceAccount {
    kubectl delete sa @args
}
Set-Alias -Name kdelsa -Value Invoke-KubectlDeleteServiceAccount

# DaemonSet management.
function Invoke-KubectlGetDaemonSet {
    kubectl get daemonset @args
}
Set-Alias -Name kgds -Value Invoke-KubectlGetDaemonSet

function Invoke-KubectlGetDaemonSetWatch {
    kubectl get daemonset --watch @args
}
Set-Alias -Name kgdsw -Value Invoke-KubectlGetDaemonSetWatch

function Invoke-KubectlEditDaemonSet {
    kubectl edit daemonset @args
}
Set-Alias -Name keds -Value Invoke-KubectlEditDaemonSet

function Invoke-KubectlDescribeDaemonSet {
    kubectl describe daemonset @args
}
Set-Alias -Name kdds -Value Invoke-KubectlDescribeDaemonSet

function Invoke-KubectlDeleteDaemonSet {
    kubectl delete daemonset @args
}
Set-Alias -Name kdelds -Value Invoke-KubectlDeleteDaemonSet

# CronJob management.
function Invoke-KubectlGetCronJob {
    kubectl get cronjob @args
}
Set-Alias -Name kgcj -Value Invoke-KubectlGetCronJob

function Invoke-KubectlEditCronJob {
    kubectl edit cronjob @args
}
Set-Alias -Name kecj -Value 'kubectl edit cronjob'

function Invoke-KubectlDescribeCronJob {
    kubectl describe cronjob @args
}
Set-Alias -Name kdcj -Value Invoke-KubectlDescribeCronJob

function Invoke-KubectlDeleteCronJob {
    kubectl delete cronjob @args
}
Set-Alias -Name kdelcj -Value Invoke-KubectlDeleteCronJob

# Job management.
function Invoke-KubectlGetJob {
    kubectl get job @args
}
Set-Alias -Name kgj -Value Invoke-KubectlGetJob

function Invoke-KubectlEditJob {
    kubectl edit job @args
}
Set-Alias -Name kej -Value Invoke-KubectlEditJob

function Invoke-KubectlDescribeJob {
    kubectl describe job @args
}
Set-Alias -Name kdj -Value Invoke-KubectlDescribeJob

function Invoke-KubectlDeleteJob {
    kubectl delete job @args
}
Set-Alias -Name kdelj -Value Invoke-KubectlDeleteJob


Export-ModuleMember -Function * -Alias *