Fix up the shared base images stuff.

This commit is contained in:
jakedt 2014-02-20 22:26:10 -05:00
parent 05dd00d495
commit a63a49caa1
5 changed files with 37 additions and 13 deletions

View file

@ -884,12 +884,19 @@ def create_repository(namespace, name, creating_user, visibility='private'):
return repo
def create_or_link_image(docker_image_id, repository, username):
def __translate_ancestry(old_ancestry, translations):
old_ids = [int(id_str) for id_str in old_ancestry.split('/')[1:-1]]
new_ids = [str(translations[old_id]) for old_id in old_ids]
return '/%s/' % '/'.join(new_ids)
def create_or_link_image(docker_image_id, repository, username, translations):
with transaction_factory(db):
query = (ImageStorage
.select()
query = (Image
.select(Image, ImageStorage)
.distinct()
.join(Image)
.join(ImageStorage)
.switch(Image)
.join(Repository)
.join(Visibility)
.switch(Repository)
@ -898,16 +905,29 @@ def create_or_link_image(docker_image_id, repository, username):
query = (_filter_to_repos_for_user(query, username)
.where(Image.docker_image_id == docker_image_id))
new_image_ancestry = '/'
origin_image_id = None
try:
storage = query.get()
to_copy = query.get()
msg = 'Linking image to existing storage with docker id: %s and uuid: %s'
logger.debug(msg, docker_image_id, storage.uuid)
except ImageStorage.DoesNotExist:
logger.debug(msg, docker_image_id, to_copy.storage.uuid)
new_image_ancestry = __translate_ancestry(to_copy.ancestors,
translations)
storage = to_copy.storage
origin_image_id = to_copy.id
except Image.DoesNotExist:
logger.debug('Creating new storage for docker id: %s', docker_image_id)
storage = ImageStorage.create()
new_image = Image.create(docker_image_id=docker_image_id,
repository=repository, storage=storage)
repository=repository, storage=storage,
ancestors=new_image_ancestry)
if origin_image_id:
translations[origin_image_id] = new_image.id
return new_image