From 0eb8ec47ad7083afdaf6ed021f705557e0a33e24 Mon Sep 17 00:00:00 2001 From: Bert Blommers Date: Thu, 6 Jan 2022 21:05:23 -0100 Subject: [PATCH] ECR - Persist RegistryID when creating a repository (#4742) --- moto/ecr/models.py | 6 +++++- moto/ecr/responses.py | 2 ++ tests/test_ecr/test_ecr_boto3.py | 31 +++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/moto/ecr/models.py b/moto/ecr/models.py index a6f66433e..43f128969 100644 --- a/moto/ecr/models.py +++ b/moto/ecr/models.py @@ -66,12 +66,13 @@ class Repository(BaseObject, CloudFormationModel): self, region_name, repository_name, + registry_id, encryption_config, image_scan_config, image_tag_mutablility, ): self.region_name = region_name - self.registry_id = DEFAULT_REGISTRY_ID + self.registry_id = registry_id or DEFAULT_REGISTRY_ID self.arn = ( f"arn:aws:ecr:{region_name}:{self.registry_id}:repository/{repository_name}" ) @@ -190,6 +191,7 @@ class Repository(BaseObject, CloudFormationModel): # RepositoryName is optional in CloudFormation, thus create a random # name if necessary repository_name=resource_name, + registry_id=None, encryption_config=encryption_config, image_scan_config=image_scan_config, image_tag_mutablility=image_tag_mutablility, @@ -406,6 +408,7 @@ class ECRBackend(BaseBackend): def create_repository( self, repository_name, + registry_id, encryption_config, image_scan_config, image_tag_mutablility, @@ -417,6 +420,7 @@ class ECRBackend(BaseBackend): repository = Repository( region_name=self.region_name, repository_name=repository_name, + registry_id=registry_id, encryption_config=encryption_config, image_scan_config=image_scan_config, image_tag_mutablility=image_tag_mutablility, diff --git a/moto/ecr/responses.py b/moto/ecr/responses.py index d62131f3f..344b92b79 100644 --- a/moto/ecr/responses.py +++ b/moto/ecr/responses.py @@ -24,6 +24,7 @@ class ECRResponse(BaseResponse): def create_repository(self): repository_name = self._get_param("repositoryName") + registry_id = self._get_param("registryId") encryption_config = self._get_param("encryptionConfiguration") image_scan_config = self._get_param("imageScanningConfiguration") image_tag_mutablility = self._get_param("imageTagMutability") @@ -31,6 +32,7 @@ class ECRResponse(BaseResponse): repository = self.ecr_backend.create_repository( repository_name=repository_name, + registry_id=registry_id, encryption_config=encryption_config, image_scan_config=image_scan_config, image_tag_mutablility=image_tag_mutablility, diff --git a/tests/test_ecr/test_ecr_boto3.py b/tests/test_ecr/test_ecr_boto3.py index f63892606..808e2c7c4 100644 --- a/tests/test_ecr/test_ecr_boto3.py +++ b/tests/test_ecr/test_ecr_boto3.py @@ -116,6 +116,37 @@ def test_create_repository_with_non_default_config(): ) +@mock_ecr +def test_create_repository_in_different_account(): + # given + client = boto3.client("ecr", region_name="us-east-1") + repo_name = "test-repo" + + # when passing in a custom registry ID + response = client.create_repository( + registryId="222222222222", repositoryName=repo_name + ) + + # then we should persist this ID + repo = response["repository"] + repo.should.have.key("registryId").equals("222222222222") + repo.should.have.key("repositoryArn").equals( + "arn:aws:ecr:us-east-1:222222222222:repository/test-repo" + ) + + # then this repo should be returned with the correct ID + repo = client.describe_repositories()["repositories"][0] + repo.should.have.key("registryId").equals("222222222222") + + # then we can search for repos with this ID + response = client.describe_repositories(registryId="222222222222") + response.should.have.key("repositories").length_of(1) + + # then this repo is not found when searching for a different ID + response = client.describe_repositories(registryId=ACCOUNT_ID) + response.should.have.key("repositories").length_of(0) + + @mock_ecr def test_create_repository_with_aws_managed_kms(): # given