Skip to content

Commit

Permalink
cosalib/container_manifest.py: cleanup manifest before create/push
Browse files Browse the repository at this point in the history
If a manifest previously exists then let's try to clean it up before
continuing. We saw this in the pipeline where one run failed in the
middle and then a later run failed because the manifest existed:

```
2024-11-19 14:29:26,184 INFO - Running command: ['podman', 'manifest', 'create', 'quay.io/coreos-assembler/coreos-assembler:main']
Error: creating manifest: image name "quay.io/coreos-assembler/coreos-assembler:main" is already associated with image "ffbb463bfb0e3bb0fb4c42856d2dca0ff985d1dd5d7b34f1b3ae0277287ad83d": that name is already in use
```
  • Loading branch information
dustymabe committed Nov 20, 2024
1 parent 5b8517c commit 01e4e55
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions src/cosalib/container_manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,24 @@ def create_local_container_manifest(repo, tag, images) -> dict:
return json.loads(manifest_info)


def local_container_manifest_exists(repo, tag):
'''
Delete local manifest list
@param repo str registry repository
@param tag str manifest tag
'''
cmd = ["podman", "manifest", "exists", f"{repo}:{tag}"]
cp = runcmd(cmd, check=False)
# The commands returns 0 (exists), 1 (doesn't exist), 125 (other error)
if cp.returncode == 125:
if cp.stdout:
print(f" STDOUT: {cp.stdout.decode()}")
if cp.stderr:
print(f" STDERR: {cp.stderr.decode()}")
raise Exception("Error encountered when checking if manifest exists")
return cp.returncode == 0


def delete_local_container_manifest(repo, tag):
'''
Delete local manifest list
Expand Down Expand Up @@ -56,6 +74,9 @@ def create_and_push_container_manifest(repo, tags, images, v2s2) -> dict:
@param images list of image specifications (including transport)
@param v2s2 boolean use to force v2s2 format
'''
if local_container_manifest_exists(repo, tags[0]):
# perhaps left over from a previous failed run -> delete
delete_local_container_manifest(repo, tags[0])
manifest_info = create_local_container_manifest(repo, tags[0], images)
push_container_manifest(repo, tags, v2s2)
delete_local_container_manifest(repo, tags[0])
Expand Down

0 comments on commit 01e4e55

Please sign in to comment.