Set ECR imagePushedAt to current date and time (#2229)
This commit is contained in:
parent
d25a7ff936
commit
ed93821621
@ -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
|
||||||
|
1
setup.py
1
setup.py
@ -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",
|
||||||
|
@ -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')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user