in appengine/reconciletags/tag_reconciler.py [0:0]
def reconcile_tags(self, data, dry_run):
for project in data['projects']:
default_registry = project['base_registry']
registries = project.get('additional_registries', [])
registries.append(default_registry)
default_repo = os.path.join(default_registry,
project['repository'])
for image in project['images']:
digest = self.get_digest_from_prefix(default_repo,
image['digest'])
default_digest = default_repo + '@sha256:' + digest
default_name = docker_name.Digest(default_digest)
default_creds = (docker_creds.DefaultKeychain
.Resolve(default_name))
transport = transport_pool.Http(httplib2.Http)
# Bail out if the digest in the config file doesn't exist.
with docker_image.FromRegistry(default_name,
default_creds,
transport) as img:
if not img.exists():
logging.debug('Could not retrieve ' +
'{0}'.format(default_digest))
return
for registry in registries:
full_repo = os.path.join(registry, project['repository'])
full_digest = full_repo + '@sha256:' + digest
name = docker_name.Digest(full_digest)
creds = docker_creds.DefaultKeychain.Resolve(name)
with docker_image.FromRegistry(name, creds,
transport) as img:
if img.exists():
existing_tags = img.tags()
logging.debug('Existing Tags: ' +
'{0}'.format(existing_tags))
manifests = img.manifests()
tagged_digest = self.get_tagged_digest(
manifests, image['tag'])
# Don't retag an image if the tag already exists
if tagged_digest.startswith('sha256:'):
tagged_digest = tagged_digest[len('sha256:'):]
if tagged_digest.startswith(digest):
logging.debug('Skipping tagging %s with %s as '
'that tag already exists.',
digest, image['tag'])
continue
# We can safely retag now.
full_tag = full_repo + ':' + image['tag']
self.add_tags(default_digest, full_tag, dry_run)
logging.debug(self.get_existing_tags(default_repo, digest))