import requests from django.shortcuts import render, redirect from django.urls import reverse DOCKER_REGISTRY_URL = "https://registry.reymota.es/v2" REGISTRY_USERNAME = "creylopez" REGISTRY_PASSWORD = "Rey-1176" def get_docker_registry_data(): # Autenticarse en el registro Docker response = requests.get(f"{DOCKER_REGISTRY_URL}/_catalog", auth=(REGISTRY_USERNAME, REGISTRY_PASSWORD)) if response.status_code == 200: repositories = response.json().get('repositories', []) registry_data = [] for repo in repositories: tags_response = requests.get(f"{DOCKER_REGISTRY_URL}/{repo}/tags/list", auth=(REGISTRY_USERNAME, REGISTRY_PASSWORD)) if tags_response.status_code == 200: tags = tags_response.json().get('tags', []) registry_data.append({'repository': repo, 'tags': tags}) return registry_data else: return [] def registry_list(request): data = get_docker_registry_data() return render(request, 'registry/registry_list.html', {'data': data}) # Nueva vista para mostrar los detalles de un repositorio especĂ­fico def repository_detail(request, repository_name): tags_response = requests.get(f"{DOCKER_REGISTRY_URL}/{repository_name}/tags/list", auth=(REGISTRY_USERNAME, REGISTRY_PASSWORD)) if tags_response.status_code == 200: tags = tags_response.json().get('tags', []) else: tags = [] return render(request, 'registry/repository_detail.html', {'repository': repository_name, 'tags': tags}) # Vista para eliminar un tag especĂ­fico def delete_tag(request, repository_name, tag): manifest_url = f"{DOCKER_REGISTRY_URL}/{repository_name}/manifests/{tag}" # Obtener el digest del tag manifest_response = requests.head(manifest_url, auth=(REGISTRY_USERNAME, REGISTRY_PASSWORD), headers={"Accept": "application/vnd.docker.distribution.manifest.v2+json"}) print("delete_tag: manifest_url ", manifest_url) if manifest_response.status_code == 200: digest = manifest_response.headers.get('Docker-Content-Digest') delete_response = requests.delete(f"{DOCKER_REGISTRY_URL}/{repository_name}/manifests/{digest}", auth=(REGISTRY_USERNAME, REGISTRY_PASSWORD)) print("delete_tag: digest->",digest) if delete_response.status_code == 202: return redirect(reverse('repository_detail', args=[repository_name])) else: # Obtener las etiquetas nuevamente para renderizar la plantilla tags_response = requests.get(f"{DOCKER_REGISTRY_URL}/{repository_name}/tags/list", auth=(REGISTRY_USERNAME, REGISTRY_PASSWORD)) tags = tags_response.json().get('tags', []) if tags_response.status_code == 200 else [] return render(request, 'registry/repository_detail.html', {'repository': repository_name, 'tags': tags, 'error': 'Error deleting the tag.'}) else: # Obtener las etiquetas nuevamente para renderizar la plantilla tags_response = requests.get(f"{DOCKER_REGISTRY_URL}/{repository_name}/tags/list", auth=(REGISTRY_USERNAME, REGISTRY_PASSWORD)) tags = tags_response.json().get('tags', []) if tags_response.status_code == 200 else [] return render(request, 'registry/repository_detail.html', {'repository': repository_name, 'tags': tags, 'error': 'Tag not found.'})