Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

k8co

Herramienta de consola para cambiar rapidamente el contexto activo de Kubernetes usando busqueda aproximada sobre los contextos disponibles en kubectl.

La idea es no tener que recordar ni escribir el nombre completo de cada contexto. Pasas una cuenta/proyecto y, opcionalmente, un ambiente; k8co busca el contexto mas probable, pide confirmacion si aplica, y cambia el contexto activo de kubectl.

Features

  • Busqueda aproximada (fuzzy matching)
  • Menu interactivo cuando hay varias coincidencias
  • Confirmacion de sugerencias cuando la entrada no coincide exactamente
  • Seleccion automatica cuando hay una sola coincidencia
  • Tests con pytest
  • Instalacion como comando CLI (k8co)

Requisitos

  • Python 3.10 o superior
  • kubectl instalado
  • Contextos configurados en el kubeconfig local
  • Acceso al repositorio del proyecto
  • pipx para instalar el comando de forma permanente

La dependencia Python principal es simple-term-menu, declarada en pyproject.toml.

Instalacion

Para instalar k8co como comando disponible en la terminal de forma permanente, se recomienda usar pipx.

pipx instala aplicaciones Python en entornos virtuales aislados, pero deja el comando disponible globalmente para el usuario. Esto evita errores como externally-managed-environment en sistemas Debian/Ubuntu recientes.

Instalar pipx:

sudo apt update
sudo apt install pipx
pipx ensurepath

Despues de ejecutar pipx ensurepath, cerrar y abrir nuevamente la terminal.

Luego clonar el repositorio e instalar k8co:

git clone <repo>
cd k8co
pipx install -e .

Despues de instalar, el comando k8co queda disponible desde cualquier directorio:

k8co --help

Ejemplo de uso:

k8co ctx-alpha dev

No se recomienda instalar con pip install -e . --break-system-packages, ya que puede modificar paquetes del Python del sistema.

Uso

k8co <account> [env]

Ejemplos:

k8co ctx-alpha
k8co ctx-alpha dev
k8co ctx-alpine qa
k8co ctx-beta

Argumentos

account : Texto obligatorio usado para buscar la cuenta, proyecto o cliente dentro del nombre del contexto.

env : Texto opcional usado como segundo filtro. Normalmente representa el ambiente, por ejemplo dev, qa, prod o stg.

Como funciona

k8co obtiene los contextos configurados localmente con:

kubectl config get-contexts -o name

Luego aplica esta logica:

  1. Toma la primera parte del contexto separada por - como cuenta/proyecto. Por ejemplo, en beta-dev, la cuenta es beta.
  2. Usa difflib.get_close_matches para sugerir la cuenta mas cercana a lo que escribio el usuario.
  3. Si la sugerencia no coincide exactamente con la entrada, pregunta si esa sugerencia es correcta.
  4. Filtra los contextos que contienen la cuenta confirmada.
  5. Si se paso env, toma la segunda parte del contexto separada por - como ambiente y aplica la misma logica de sugerencia/confirmacion.
  6. Si queda un solo contexto, lo selecciona automaticamente.
  7. Si quedan varios contextos, muestra un menu interactivo con simple-term-menu.
  8. Cambia el contexto activo con:
kubectl config use-context <contexto>

Ejemplos de comportamiento

Con estos contextos:

beta-prod
beta-dev
nube-prod
nube-dev

Busqueda solo por cuenta:

k8co beta

Resultado: encuentra beta-prod y beta-dev, entonces muestra un menu para elegir.

Busqueda por cuenta y ambiente:

k8co beta dev

Resultado: selecciona beta-dev automaticamente.

Busqueda con typo en la cuenta:

k8co btea dev

Si k8co sugiere beta, pide confirmacion:

¿Querías decir 'beta'? (S/n):

Si se confirma, continua la busqueda usando beta.

Busqueda con ambiente no reconocido:

k8co beta arpa

Resultado: si no encuentra un ambiente cercano o no se confirma la sugerencia, conserva los contextos filtrados por cuenta y muestra las opciones disponibles para esa cuenta.

Busqueda sin cuenta cercana:

k8co ctx-alpha

Si no existe ninguna cuenta parecida en el kubeconfig:

No se encontraron contextos que coincidan con los criterios proporcionados.

Estructura del proyecto

.
├── README.md
├── pyproject.toml
├── src/
│   └── k8co/
│       ├── __init__.py
│       └── cli.py
└── test/
    └── test_k8co.py

pyproject.toml define el paquete, la dependencia simple-term-menu y el entrypoint:

[project.scripts]
k8co = "k8co.cli:main"

Desarrollo

Para desarrollo local, se puede usar un entorno virtual dentro del proyecto:

python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -e .

Correr tests:

python -m pytest -q

Estado verificado:

14 passed

Los tests cubren la resolucion de contextos por cuenta, ambiente, typos y confirmacion/rechazo de sugerencias.

Limitaciones conocidas

  • La estructura esperada del contexto es cuenta-ambiente, porque el codigo usa split("-")[0] para cuenta y split("-")[1] para ambiente.
  • Si un contexto no contiene al menos dos segmentos separados por -, la busqueda por ambiente puede fallar.
  • El script no crea contextos; solo usa los contextos que ya existen en el kubeconfig local.
  • El cambio afecta el contexto activo de kubectl en el kubeconfig usado en ese momento.

About

k8co es una herramienta CLI para cambiar rápidamente entre contextos de Kubernetes usando búsqueda aproximada, autocompletado y selección interactiva desde los contextos disponibles en kubectl.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages