Set ECR imagePushedAt to current date and time (#2229)

This commit is contained in:
Juan Martinez 2019-06-06 08:34:10 -04:00 committed by Terry Cain
parent d25a7ff936
commit ed93821621
3 changed files with 44 additions and 2 deletions

View File

@ -3,6 +3,7 @@ from __future__ import unicode_literals
import hashlib import hashlib
import re import re
from copy import copy from copy import copy
from datetime import datetime
from random import random from random import random
from botocore.exceptions import ParamValidationError from botocore.exceptions import ParamValidationError
@ -106,7 +107,7 @@ class Image(BaseObject):
self.repository = repository self.repository = repository
self.registry_id = registry_id self.registry_id = registry_id
self.image_digest = digest self.image_digest = digest
self.image_pushed_at = None self.image_pushed_at = str(datetime.utcnow().isoformat())
def _create_digest(self): def _create_digest(self):
image_contents = 'docker_image{0}'.format(int(random() * 10 ** 6)) image_contents = 'docker_image{0}'.format(int(random() * 10 ** 6))
@ -158,7 +159,7 @@ class Image(BaseObject):
response_object['repositoryName'] = self.repository response_object['repositoryName'] = self.repository
response_object['registryId'] = self.registry_id response_object['registryId'] = self.registry_id
response_object['imageSizeInBytes'] = self.image_size_in_bytes response_object['imageSizeInBytes'] = self.image_size_in_bytes
response_object['imagePushedAt'] = '2017-05-09' response_object['imagePushedAt'] = self.image_pushed_at
return {k: v for k, v in response_object.items() if v is not None and v != []} return {k: v for k, v in response_object.items() if v is not None and v != []}
@property @property

View File

@ -24,6 +24,7 @@ install_requires = [
"boto3>=1.9.86", "boto3>=1.9.86",
"botocore>=1.12.86", "botocore>=1.12.86",
"cryptography>=2.3.0", "cryptography>=2.3.0",
"datetime",
"requests>=2.5", "requests>=2.5",
"xmltodict", "xmltodict",
"six>1.9", "six>1.9",

View File

@ -3,6 +3,8 @@ from __future__ import unicode_literals
import hashlib import hashlib
import json import json
from datetime import datetime from datetime import datetime
from freezegun import freeze_time
import os
from random import random from random import random
import re import re
@ -13,6 +15,7 @@ from botocore.exceptions import ClientError, ParamValidationError
from dateutil.tz import tzlocal from dateutil.tz import tzlocal
from moto import mock_ecr from moto import mock_ecr
from nose import SkipTest
def _create_image_digest(contents=None): def _create_image_digest(contents=None):
@ -198,6 +201,42 @@ def test_put_image():
response['image']['repositoryName'].should.equal('test_repository') response['image']['repositoryName'].should.equal('test_repository')
response['image']['registryId'].should.equal('012345678910') response['image']['registryId'].should.equal('012345678910')
@mock_ecr
def test_put_image_with_push_date():
if os.environ.get('TEST_SERVER_MODE', 'false').lower() == 'true':
raise SkipTest('Cant manipulate time in server mode')
client = boto3.client('ecr', region_name='us-east-1')
_ = client.create_repository(
repositoryName='test_repository'
)
with freeze_time('2018-08-28 00:00:00'):
image1_date = datetime.now()
_ = client.put_image(
repositoryName='test_repository',
imageManifest=json.dumps(_create_image_manifest()),
imageTag='latest'
)
with freeze_time('2019-05-31 00:00:00'):
image2_date = datetime.now()
_ = client.put_image(
repositoryName='test_repository',
imageManifest=json.dumps(_create_image_manifest()),
imageTag='latest'
)
describe_response = client.describe_images(repositoryName='test_repository')
type(describe_response['imageDetails']).should.be(list)
len(describe_response['imageDetails']).should.be(2)
set([describe_response['imageDetails'][0]['imagePushedAt'],
describe_response['imageDetails'][1]['imagePushedAt']]).should.equal(set([image1_date, image2_date]))
@mock_ecr @mock_ecr
def test_put_image_with_multiple_tags(): def test_put_image_with_multiple_tags():
client = boto3.client('ecr', region_name='us-east-1') client = boto3.client('ecr', region_name='us-east-1')
@ -240,6 +279,7 @@ def test_put_image_with_multiple_tags():
len(response2['imageDetails'][0]['imageTags']).should.be(2) len(response2['imageDetails'][0]['imageTags']).should.be(2)
response2['imageDetails'][0]['imageTags'].should.be.equal(['v1', 'latest']) response2['imageDetails'][0]['imageTags'].should.be.equal(['v1', 'latest'])
@mock_ecr @mock_ecr
def test_list_images(): def test_list_images():
client = boto3.client('ecr', region_name='us-east-1') client = boto3.client('ecr', region_name='us-east-1')