Merge pull request #987 from william-richard/ecr-describe-images-filter-with-image-id
Ecr describe images filter with image
This commit is contained in:
commit
385df46a0b
@ -58,7 +58,7 @@ class Repository(BaseObject):
|
|||||||
response_object['repositoryName'] = self.name
|
response_object['repositoryName'] = self.name
|
||||||
response_object['repositoryUri'] = self.uri
|
response_object['repositoryUri'] = self.uri
|
||||||
# response_object['createdAt'] = self.created
|
# response_object['createdAt'] = self.created
|
||||||
del response_object['arn'], response_object['name']
|
del response_object['arn'], response_object['name'], response_object['images']
|
||||||
return response_object
|
return response_object
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -193,16 +193,27 @@ class ECRBackend(BaseBackend):
|
|||||||
images.append(image)
|
images.append(image)
|
||||||
return images
|
return images
|
||||||
|
|
||||||
def describe_images(self, repository_name, registry_id=None, image_id=None):
|
def describe_images(self, repository_name, registry_id=None, image_ids=None):
|
||||||
|
|
||||||
if repository_name in self.repositories:
|
if repository_name in self.repositories:
|
||||||
repository = self.repositories[repository_name]
|
repository = self.repositories[repository_name]
|
||||||
else:
|
else:
|
||||||
raise Exception("{0} is not a repository".format(repository_name))
|
raise Exception("{0} is not a repository".format(repository_name))
|
||||||
|
|
||||||
response = []
|
if image_ids:
|
||||||
for image in repository.images:
|
response = set()
|
||||||
response.append(image)
|
for image_id in image_ids:
|
||||||
|
if 'imageDigest' in image_id:
|
||||||
|
desired_digest = image_id['imageDigest']
|
||||||
|
response.update([i for i in repository.images if i.get_image_digest() == desired_digest])
|
||||||
|
if 'imageTag' in image_id:
|
||||||
|
desired_tag = image_id['imageTag']
|
||||||
|
response.update([i for i in repository.images if i.image_tag == desired_tag])
|
||||||
|
else:
|
||||||
|
response = []
|
||||||
|
for image in repository.images:
|
||||||
|
response.append(image)
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def put_image(self, repository_name, image_manifest, image_tag):
|
def put_image(self, repository_name, image_manifest, image_tag):
|
||||||
|
@ -69,7 +69,8 @@ class ECRResponse(BaseResponse):
|
|||||||
def describe_images(self):
|
def describe_images(self):
|
||||||
repository_str = self._get_param('repositoryName')
|
repository_str = self._get_param('repositoryName')
|
||||||
registry_id = self._get_param('registryId')
|
registry_id = self._get_param('registryId')
|
||||||
images = self.ecr_backend.describe_images(repository_str, registry_id)
|
image_ids = self._get_param('imageIds')
|
||||||
|
images = self.ecr_backend.describe_images(repository_str, registry_id, image_ids)
|
||||||
return json.dumps({
|
return json.dumps({
|
||||||
'imageDetails': [image.response_describe_object for image in images],
|
'imageDetails': [image.response_describe_object for image in images],
|
||||||
})
|
})
|
||||||
|
@ -152,6 +152,23 @@ def test_describe_repositories_4():
|
|||||||
len(response['repositories']).should.equal(0)
|
len(response['repositories']).should.equal(0)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_ecr
|
||||||
|
def test_describe_repositories_with_image():
|
||||||
|
client = boto3.client('ecr', region_name='us-east-1')
|
||||||
|
_ = client.create_repository(
|
||||||
|
repositoryName='test_repository'
|
||||||
|
)
|
||||||
|
|
||||||
|
_ = client.put_image(
|
||||||
|
repositoryName='test_repository',
|
||||||
|
imageManifest=json.dumps(_create_image_manifest()),
|
||||||
|
imageTag='latest'
|
||||||
|
)
|
||||||
|
|
||||||
|
response = client.describe_repositories(repositoryNames=['test_repository'])
|
||||||
|
len(response['repositories']).should.equal(1)
|
||||||
|
|
||||||
|
|
||||||
@mock_ecr
|
@mock_ecr
|
||||||
def test_delete_repository():
|
def test_delete_repository():
|
||||||
client = boto3.client('ecr', region_name='us-east-1')
|
client = boto3.client('ecr', region_name='us-east-1')
|
||||||
@ -177,14 +194,17 @@ def test_put_image():
|
|||||||
_ = client.create_repository(
|
_ = client.create_repository(
|
||||||
repositoryName='test_repository'
|
repositoryName='test_repository'
|
||||||
)
|
)
|
||||||
|
|
||||||
response = client.put_image(
|
response = client.put_image(
|
||||||
repositoryName='test_repository',
|
repositoryName='test_repository',
|
||||||
imageManifest=json.dumps(_create_image_manifest()),
|
imageManifest=json.dumps(_create_image_manifest()),
|
||||||
imageTag='latest'
|
imageTag='latest'
|
||||||
)
|
)
|
||||||
|
|
||||||
response['image']['repositoryName'].should.equal('test_repository')
|
|
||||||
response['image']['imageId']['imageTag'].should.equal('latest')
|
response['image']['imageId']['imageTag'].should.equal('latest')
|
||||||
|
response['image']['imageId']['imageDigest'].should.contain("sha")
|
||||||
|
response['image']['repositoryName'].should.equal('test_repository')
|
||||||
|
response['image']['registryId'].should.equal('012345678910')
|
||||||
|
|
||||||
|
|
||||||
@mock_ecr
|
@mock_ecr
|
||||||
@ -297,19 +317,54 @@ def test_describe_images():
|
|||||||
|
|
||||||
|
|
||||||
@mock_ecr
|
@mock_ecr
|
||||||
def test_put_image():
|
def test_describe_images_by_tag():
|
||||||
client = boto3.client('ecr', region_name='us-east-1')
|
client = boto3.client('ecr', region_name='us-east-1')
|
||||||
_ = client.create_repository(
|
_ = client.create_repository(
|
||||||
repositoryName='test_repository'
|
repositoryName='test_repository'
|
||||||
)
|
)
|
||||||
|
|
||||||
response = client.put_image(
|
tag_map = {}
|
||||||
repositoryName='test_repository',
|
for tag in ['latest', 'v1', 'v2']:
|
||||||
imageManifest=json.dumps(_create_image_manifest()),
|
put_response = client.put_image(
|
||||||
imageTag='latest'
|
repositoryName='test_repository',
|
||||||
|
imageManifest=json.dumps(_create_image_manifest()),
|
||||||
|
imageTag=tag
|
||||||
|
)
|
||||||
|
tag_map[tag] = put_response['image']
|
||||||
|
|
||||||
|
for tag, put_response in tag_map.items():
|
||||||
|
response = client.describe_images(repositoryName='test_repository', imageIds=[{'imageTag': tag}])
|
||||||
|
len(response['imageDetails']).should.be(1)
|
||||||
|
image_detail = response['imageDetails'][0]
|
||||||
|
image_detail['registryId'].should.equal("012345678910")
|
||||||
|
image_detail['repositoryName'].should.equal("test_repository")
|
||||||
|
image_detail['imageTags'].should.equal([put_response['imageId']['imageTag']])
|
||||||
|
image_detail['imageDigest'].should.equal(put_response['imageId']['imageDigest'])
|
||||||
|
|
||||||
|
|
||||||
|
@mock_ecr
|
||||||
|
def test_describe_images_by_digest():
|
||||||
|
client = boto3.client('ecr', region_name='us-east-1')
|
||||||
|
_ = client.create_repository(
|
||||||
|
repositoryName='test_repository'
|
||||||
)
|
)
|
||||||
|
|
||||||
response['image']['imageId']['imageTag'].should.equal('latest')
|
tags = ['latest', 'v1', 'v2']
|
||||||
response['image']['imageId']['imageDigest'].should.contain("sha")
|
digest_map = {}
|
||||||
response['image']['repositoryName'].should.equal('test_repository')
|
for tag in tags:
|
||||||
response['image']['registryId'].should.equal('012345678910')
|
put_response = client.put_image(
|
||||||
|
repositoryName='test_repository',
|
||||||
|
imageManifest=json.dumps(_create_image_manifest()),
|
||||||
|
imageTag=tag
|
||||||
|
)
|
||||||
|
digest_map[put_response['image']['imageId']['imageDigest']] = put_response['image']
|
||||||
|
|
||||||
|
for digest, put_response in digest_map.items():
|
||||||
|
response = client.describe_images(repositoryName='test_repository',
|
||||||
|
imageIds=[{'imageDigest': digest}])
|
||||||
|
len(response['imageDetails']).should.be(1)
|
||||||
|
image_detail = response['imageDetails'][0]
|
||||||
|
image_detail['registryId'].should.equal("012345678910")
|
||||||
|
image_detail['repositoryName'].should.equal("test_repository")
|
||||||
|
image_detail['imageTags'].should.equal([put_response['imageId']['imageTag']])
|
||||||
|
image_detail['imageDigest'].should.equal(digest)
|
||||||
|
Loading…
Reference in New Issue
Block a user