diff --git a/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/controllers/CloudFormationController.java b/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/controllers/CloudFormationController.java index f65d7a49811..1f11cba6169 100644 --- a/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/controllers/CloudFormationController.java +++ b/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/controllers/CloudFormationController.java @@ -16,7 +16,7 @@ package com.netflix.spinnaker.clouddriver.aws.controllers; -import com.netflix.spinnaker.clouddriver.aws.model.CloudFormationStack; +import com.netflix.spinnaker.clouddriver.aws.model.AmazonCloudFormationStack; import com.netflix.spinnaker.clouddriver.aws.provider.view.AmazonCloudFormationProvider; import com.netflix.spinnaker.kork.web.exceptions.NotFoundException; import java.util.List; @@ -43,7 +43,7 @@ public CloudFormationController(AmazonCloudFormationProvider cloudFormationProvi } @RequestMapping(method = RequestMethod.GET) - List list( + List list( @RequestParam String accountName, @RequestParam(required = false, defaultValue = "*") String region) { log.debug("Cloud formation list stacks for account {}", accountName); @@ -51,7 +51,7 @@ List list( } @RequestMapping(method = RequestMethod.GET, value = "/**") - CloudFormationStack get(HttpServletRequest request) { + AmazonCloudFormationStack get(HttpServletRequest request) { String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); String stackId = new AntPathMatcher().extractPathWithinPattern(pattern, request.getRequestURI()); diff --git a/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/model/AmazonCloudFormationStack.java b/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/model/AmazonCloudFormationStack.java index e28a92e8acb..e3a1eb25bbe 100644 --- a/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/model/AmazonCloudFormationStack.java +++ b/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/model/AmazonCloudFormationStack.java @@ -20,7 +20,7 @@ import java.util.Map; @JsonInclude(JsonInclude.Include.NON_EMPTY) -public class AmazonCloudFormationStack implements CloudFormationStack { +public class AmazonCloudFormationStack { final String type = "aws"; private String stackId; private Map tags; @@ -33,52 +33,42 @@ public class AmazonCloudFormationStack implements CloudFormationStack { private String accountId; private Date creationTime; - @Override public String getStackId() { return stackId; } - @Override public Map getTags() { return tags; } - @Override public Map getOutputs() { return outputs; } - @Override public String getStackName() { return stackName; } - @Override public String getRegion() { return region; } - @Override public String getAccountName() { return accountName; } - @Override public String getAccountId() { return accountId; } - @Override public String getStackStatus() { return stackStatus; } - @Override public String getStackStatusReason() { return stackStatusReason; } - @Override public Date getCreationTime() { return creationTime; } diff --git a/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/model/CloudFormationProvider.java b/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/model/CloudFormationProvider.java deleted file mode 100644 index 66da4503365..00000000000 --- a/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/model/CloudFormationProvider.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2019 Schibsted Media Group. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.netflix.spinnaker.clouddriver.aws.model; - -import java.util.List; -import java.util.Optional; - -public interface CloudFormationProvider { - - List list(String account, String region); - - Optional get(String stackId); -} diff --git a/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/model/CloudFormationStack.java b/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/model/CloudFormationStack.java deleted file mode 100644 index 0b169600916..00000000000 --- a/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/model/CloudFormationStack.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2019 Schibsted Media Group. - * - * Licensed under the Apache License, Version 2.0 (the "License") - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.netflix.spinnaker.clouddriver.aws.model; - -import java.util.Date; -import java.util.Map; - -/** A representation of a CloudFormation stack */ -public interface CloudFormationStack { - - String getStackId(); - - Map getTags(); - - Map getOutputs(); - - String getStackName(); - - String getRegion(); - - String getAccountName(); - - String getAccountId(); - - String getStackStatus(); - - String getStackStatusReason(); - - Date getCreationTime(); -} diff --git a/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/provider/view/AmazonCloudFormationProvider.java b/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/provider/view/AmazonCloudFormationProvider.java index e0e385ea77c..da681f810e0 100644 --- a/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/provider/view/AmazonCloudFormationProvider.java +++ b/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/provider/view/AmazonCloudFormationProvider.java @@ -23,8 +23,6 @@ import com.netflix.spinnaker.cats.cache.RelationshipCacheFilter; import com.netflix.spinnaker.clouddriver.aws.cache.Keys; import com.netflix.spinnaker.clouddriver.aws.model.AmazonCloudFormationStack; -import com.netflix.spinnaker.clouddriver.aws.model.CloudFormationProvider; -import com.netflix.spinnaker.clouddriver.aws.model.CloudFormationStack; import java.util.Collection; import java.util.List; import java.util.Optional; @@ -36,7 +34,7 @@ @Slf4j @Component -public class AmazonCloudFormationProvider implements CloudFormationProvider { +public class AmazonCloudFormationProvider { private final Cache cacheView; private final ObjectMapper objectMapper; @@ -48,20 +46,19 @@ public AmazonCloudFormationProvider( this.objectMapper = objectMapper; } - public List list(String accountName, String region) { + public List list(String accountName, String region) { String filter = Keys.getCloudFormationKey("*", region, accountName); log.debug("List all stacks with filter {}", filter); return loadResults(cacheView.filterIdentifiers(STACKS.getNs(), filter)); } - @Override - public Optional get(String stackId) { + public Optional get(String stackId) { String filter = Keys.getCloudFormationKey(stackId, "*", "*"); log.debug("Get stack with filter {}", filter); return loadResults(cacheView.filterIdentifiers(STACKS.getNs(), filter)).stream().findFirst(); } - List loadResults(Collection identifiers) { + List loadResults(Collection identifiers) { return cacheView.getAll(STACKS.getNs(), identifiers, RelationshipCacheFilter.none()).stream() .map( data -> { diff --git a/clouddriver-aws/src/test/groovy/com/netflix/spinnaker/clouddriver/aws/controllers/CloudFormationControllerSpec.groovy b/clouddriver-aws/src/test/groovy/com/netflix/spinnaker/clouddriver/aws/controllers/CloudFormationControllerSpec.groovy index 5d13f3534b3..24fe7ed43f4 100644 --- a/clouddriver-aws/src/test/groovy/com/netflix/spinnaker/clouddriver/aws/controllers/CloudFormationControllerSpec.groovy +++ b/clouddriver-aws/src/test/groovy/com/netflix/spinnaker/clouddriver/aws/controllers/CloudFormationControllerSpec.groovy @@ -15,10 +15,8 @@ */ package com.netflix.spinnaker.clouddriver.aws.controllers -import com.fasterxml.jackson.annotation.JsonInclude -import com.netflix.spinnaker.clouddriver.aws.model.CloudFormationStack +import com.netflix.spinnaker.clouddriver.aws.model.AmazonCloudFormationStack import com.netflix.spinnaker.clouddriver.aws.provider.view.AmazonCloudFormationProvider -import groovy.transform.Immutable import org.springframework.test.web.servlet.MockMvc import com.netflix.spinnaker.kork.web.exceptions.NotFoundException import org.springframework.test.web.servlet.setup.MockMvcBuilders @@ -43,7 +41,7 @@ class CloudFormationControllerSpec extends Specification { def "request a list of stacks returns all the stacks for a given account (any region)"() { given: def accountName = 'aws-account-name' - cloudFormationProvider.list(accountName, '*') >> [ new CloudFormationStackTest(accountName: accountName) ] + cloudFormationProvider.list(accountName, '*') >> [ new AmazonCloudFormationStack(accountName: accountName) ] when: def results = mockMvc.perform(get("/aws/cloudFormation/stacks?accountName=$accountName")) @@ -57,7 +55,7 @@ class CloudFormationControllerSpec extends Specification { given: def accountName = 'aws-account-name' def region = 'region' - cloudFormationProvider.list(accountName, region) >> [ new CloudFormationStackTest(accountName: accountName, region: region) ] + cloudFormationProvider.list(accountName, region) >> [ new AmazonCloudFormationStack(accountName: accountName, region: region) ] when: def results = mockMvc.perform(get("/aws/cloudFormation/stacks?accountName=$accountName®ion=$region")) @@ -71,7 +69,7 @@ class CloudFormationControllerSpec extends Specification { def "requesting a single stack by stackId"() { given: def stackId = "arn:cloudformation:stack/name" - cloudFormationProvider.get(stackId) >> Optional.of(new CloudFormationStackTest(stackId: stackId)) + cloudFormationProvider.get(stackId) >> Optional.of(new AmazonCloudFormationStack(stackId: stackId)) when: def results = mockMvc.perform(get("/aws/cloudFormation/stacks/$stackId")) @@ -93,18 +91,4 @@ class CloudFormationControllerSpec extends Specification { thrown(Exception) //loosened because we removed the dependency on spring data rest } - @Immutable - @JsonInclude(JsonInclude.Include.NON_EMPTY) - class CloudFormationStackTest implements CloudFormationStack { - final String stackId - final Map tags - final Map outputs - final String stackName - final String region - final String stackStatus - final String stackStatusReason - final String accountName - final String accountId - final Date creationTime - } }