import kubernetes.config
import kubernetes.client
import json
context = "ovh"
ns = "ovh2"
hub_api = "https://hub.ovh2.mybinder.org/hub/api"
kubernetes.config.load_config(context=context)
k8s = kubernetes.client.CoreV1Api()
import base64
hub_secret = k8s.read_namespaced_secret("hub", namespace=ns)
api_token = base64.b64decode(hub_secret.data['hub.services.binder.apiToken']).decode("ascii")
user_pods = k8s.list_namespaced_pod(namespace=ns, label_selector="component=singleuser-server").items
user_pods = sorted(user_pods, key=lambda pod: pod.status.start_time, reverse=True)
import requests
s = requests.Session()
s.headers = {
"Authorization": f"Bearer {api_token}",
"Accept": "application/jupyterhub-pagination+json",
}
all_users = []
user_info = s.get(hub_api + "/users").json()
all_users.extend(user_info["items"])
next_page = user_info["_pagination"]["next"]
while next_page:
user_info = s.get(hub_api + "/users", params=next_page).json()
all_users.extend(user_info["items"])
next_page = user_info["_pagination"]["next"]
current_users = {
user['name']: user
for user in all_users
}
pods_by_user = {
pod.metadata.annotations['hub.jupyter.org/username']: pod for pod in user_pods
}
pods_without_users = []
for pod in user_pods:
username = pod.metadata.annotations['hub.jupyter.org/username']
if username not in current_users:
pods_without_users.append(pod)
len(pods_without_users)
0
for pod in pods_without_users:
print(pod.metadata.name, pod.status.start_time)
# k8s.delete_namespaced_pod(pod.metadata.name, pod.metadata.namespace)