You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

64 lines
3.3 KiB

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.'})