diff --git a/dockerdd.py b/dockerdd.py index a3f5e59..0faf140 100755 --- a/dockerdd.py +++ b/dockerdd.py @@ -3,14 +3,25 @@ import docker import os import sys -import time import yaml +import json # Setup local docker client connection dockerclient = docker.from_env() +def get_local_image_manifest_digest(image_reference: str): + try: + output = os.popen(f"docker manifest inspect -v {image_reference}").read() + manifest_info = json.loads(output) + + digest = manifest_info['Descriptor']['digest'] + return digest + except Exception as e: + print(f"FAIL to get local image manifest digest: {e}") + return None + # Import yaml file -if len(sys.argv) > 0: +if len(sys.argv) > 1: job_file = sys.argv[1] else: job_file = 'jobs.yaml' @@ -39,8 +50,10 @@ # Process images in given imagelist for image in dddata['imagelists'][imagelist]: + image_name = image['name'] + lts = image.get('lts', False) result = 'ok' - image_name, image_tag = image.split(':') + image_name, image_tag = image_name.split(':') if source_addr == 'default': source_full = image_name + ':' + image_tag else: @@ -52,7 +65,7 @@ # Check if image is already in target registry osout = os.system(f"docker manifest inspect {target_full} > /dev/null 2>&1") - if osout == 0: + if osout == 0 and not lts: print("cached... ok") else: # Pull image from source registry @@ -63,7 +76,7 @@ print(f"FAIL: {e}") if 'dockerimage' in locals(): del dockerimage - pass + continue # Tag new registry if 'dockerimage' in locals(): @@ -75,7 +88,13 @@ dockerclient.images.remove(source_full) if 'dockerimage' in locals(): del dockerimage - pass + continue + # Get and write the local image digest to a file + digest = get_local_image_manifest_digest(target_full) + if digest: + with open(f"digest.txt", 'a') as file: + file.write(f"{target_full}@{digest}\n") + print(f" (Digest written {target_full} {digest} digest.txt)") # Push image to target registry if 'dockerimage' in locals(): @@ -87,7 +106,7 @@ dockerclient.images.remove(target_full) except Exception as e: print(f"FAIL: {e}") - pass + continue # Check if image is available in target repo print("verify:", end='', flush=True) @@ -105,3 +124,4 @@ except: pass print(result) + diff --git a/jobs.yaml b/jobs.yaml index 3fad463..bc2417b 100644 --- a/jobs.yaml +++ b/jobs.yaml @@ -25,6 +25,7 @@ jobs: - gitlab - kubernetes - postgres + - ubuntu - vault dev-to-prd: source: dev @@ -37,28 +38,35 @@ jobs: # Define your imagelists down here imagelists: gitlab: - - gitlab/gitlab-ee:15.7.0-ee.0 - - gitlab/gitlab-runner-helper:ubuntu-x86_64-v14.10.2 + - name: gitlab/gitlab-ee:15.7.0-ee.0 + - name: gitlab/gitlab-runner-helper:ubuntu-x86_64-v14.10.2 kubernetes: - - calico/apiserver:v3.24.5 - - calico/cni:v3.24.5 - - calico/kube-controllers:v3.24.5 - - calico/node:v3.24.5 - - calico/pod2daemon-flexvol:v3.24.5 - - calico/typha:v3.24.5 - - grafana/grafana:9.2.3 - - k8s.gcr.io/pause:3.6 - - library/traefik:2.9.4 + - name: calico/apiserver:v3.24.5 + - name: calico/cni:v3.24.5 + - name: calico/kube-controllers:v3.24.5 + - name: calico/node:v3.24.5 + - name: calico/pod2daemon-flexvol:v3.24.5 + - name: calico/typha:v3.24.5 + - name: grafana/grafana:9.2.3 + - name: k8s.gcr.io/pause:3.6 + - name: library/traefik:2.9.4 kubernetes_k8s: - - coredns:v1.9.3 - - etcd:3.5.4-0 - - kube-apiserver:v1.25.0 - - kube-controller-manager:v1.25.0 - - kube-proxy:v1.25.0 - - kube-scheduler:v1.25.0 - - pause:3.8 - - coredns/coredns:v1.9.3 + - name: coredns:v1.9.3 + - name: etcd:3.5.4-0 + - name: kube-apiserver:v1.25.0 + - name: kube-controller-manager:v1.25.0 + - name: kube-proxy:v1.25.0 + - name: kube-scheduler:v1.25.0 + - name: pause:3.8 + - name: coredns/coredns:v1.9.3 postgres: - - library/postgres:15.1-alpine + - name: library/postgres:15.1-alpine + ubuntu: + - name: ubuntu:20.04 + lts: true + - name: ubuntu:22.04 + lts: true + - name: ubuntu:24.04 + lts: true vault: - - library/vault:1.11.4 + - name: library/vault:1.11.4