Fix up the shared base images stuff.
This commit is contained in:
parent
05dd00d495
commit
a63a49caa1
5 changed files with 37 additions and 13 deletions
|
@ -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
|
||||
|
||||
|
||||
|
|
Reference in a new issue