Files
registry-utils/registry_utils.py
2025-03-06 15:56:13 +01:00

93 lines
3.0 KiB
Python

import os
import subprocess
import json
import re
import getopt
import sys
from datetime import datetime, timedelta
from textwrap import indent
import yaml
try:
opts, args = getopt.getopt(sys.argv[1:], "gp", ["command=", "help", "output="])
except getopt.GetoptError as err:
#usage()
sys.exit(2)
output = None
# QJ : getopts
_MODE = "manual"
_FIRST = _TEST = _RESTORE = _BACKUP = _SYNC = _START = _STOP = False
_EXECUTE = True
_DATE = "pick"
for o, a in opts:
if o == "-g":
_ACTION = "generate_config"
elif o in ("-p", "--push"):
_ACTION = "push_to_registry"
else:
print("Parameter unknown")
sys.exit()
def get_docker_images():
# Use openssl command to get certificate subject and expiration date
cmnd = "docker image ls | sed '1d'"
status, output = subprocess.getstatusoutput(cmnd)
#output, _ = process.communicate()
#print(output)
data = output.splitlines()
return data
def generate_config(data):
local_registry = "localhost:5000/library/"
interval = "60m"
yaml_config = {"sync":[]}
for line in data:
if "localhost:5000" in line:
continue
d = line.split()
print(f"{d[0]} : {d[1]}")
image = d[0].split("/")
if "<none>" == d[1]:
yaml_config["sync"].append({"source":f"{d[0]}","target": f"{local_registry}{d[0]}","type":"image","interval":interval,"backup": "\"backup-{{.Ref.Tag}}\""})
else:
yaml_config["sync"].append({"source":f"{d[0]}:{d[1]}","target": f"{local_registry}{d[0]}:{d[1]}","type":"image","interval":interval,"backup": "\"backup-{{.Ref.Tag}}\""})
config = yaml.dump(yaml_config,sort_keys=False)
print(config)
return config
def push_to_registry(data):
local_registry = "localhost:5000/library/"
for line in data:
if "localhost:5000" in line:
continue
d = line.split()
print(f"{d[0]} : {d[1]}")
image = d[0].split("/")
if "<none>" == d[1]:
#yaml_config["sync"].append({"source":f"{d[0]}","target": f"{local_registry}{d[0]}","type":"image","interval":interval,"backup": "\"backup-{{.Ref.Tag}}\""})
cmnd = f"docker tag {d[0]} {local_registry}{d[0]}"
input(cmnd)
#status, output = subprocess.getstatusoutput(cmnd)
cmnd = f"docker push {local_registry}{d[0]} {local_registry}{d[0]}"
input(cmnd)
# status, output = subprocess.getstatusoutput(cmnd)
else:
cmnd = f"docker tag {d[0]}:{d[1]} {local_registry}{d[0]}:{d[1]}"
input(cmnd)
#status, output = subprocess.getstatusoutput(cmnd)
cmnd = f"docker push {local_registry}{d[0]}:{d[1]} {local_registry}{d[0]}:{d[1]}"
input(cmnd)
#status, output = subprocess.getstatusoutput(cmnd)
return
if _ACTION == "generate_config":
generate_config(get_docker_images())
elif _ACTION == "push_to_registry":
push_to_registry(get_docker_images())