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.
- 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)
- Python 3.10 o superior
kubectlinstalado- Contextos configurados en el kubeconfig local
- Acceso al repositorio del proyecto
pipxpara instalar el comando de forma permanente
La dependencia Python principal es simple-term-menu, declarada en
pyproject.toml.
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 ensurepathDespues 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 --helpEjemplo de uso:
k8co ctx-alpha devNo se recomienda instalar con
pip install -e . --break-system-packages, ya que puede modificar paquetes del Python del sistema.
k8co <account> [env]Ejemplos:
k8co ctx-alpha
k8co ctx-alpha dev
k8co ctx-alpine qa
k8co ctx-betaaccount
: 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.
k8co obtiene los contextos configurados localmente con:
kubectl config get-contexts -o nameLuego aplica esta logica:
- Toma la primera parte del contexto separada por
-como cuenta/proyecto. Por ejemplo, enbeta-dev, la cuenta esbeta. - Usa
difflib.get_close_matchespara sugerir la cuenta mas cercana a lo que escribio el usuario. - Si la sugerencia no coincide exactamente con la entrada, pregunta si esa sugerencia es correcta.
- Filtra los contextos que contienen la cuenta confirmada.
- Si se paso
env, toma la segunda parte del contexto separada por-como ambiente y aplica la misma logica de sugerencia/confirmacion. - Si queda un solo contexto, lo selecciona automaticamente.
- Si quedan varios contextos, muestra un menu interactivo con
simple-term-menu. - Cambia el contexto activo con:
kubectl config use-context <contexto>Con estos contextos:
beta-prod
beta-dev
nube-prod
nube-dev
Busqueda solo por cuenta:
k8co betaResultado: encuentra beta-prod y beta-dev, entonces muestra un menu para
elegir.
Busqueda por cuenta y ambiente:
k8co beta devResultado: selecciona beta-dev automaticamente.
Busqueda con typo en la cuenta:
k8co btea devSi 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 arpaResultado: 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-alphaSi no existe ninguna cuenta parecida en el kubeconfig:
No se encontraron contextos que coincidan con los criterios proporcionados.
.
├── 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"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 -qEstado verificado:
14 passed
Los tests cubren la resolucion de contextos por cuenta, ambiente, typos y confirmacion/rechazo de sugerencias.
- La estructura esperada del contexto es
cuenta-ambiente, porque el codigo usasplit("-")[0]para cuenta ysplit("-")[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
kubectlen el kubeconfig usado en ese momento.