Skip to content

Commit

Permalink
Merge from upstream (#3)
Browse files Browse the repository at this point in the history
* feat(gae): Adds endpoint to surfact GAE storage accounts. (spinnaker#470)

* feat(echo/pubsub): Expose endpoint to query subscriptions. (spinnaker#472)
  • Loading branch information
BrunoCarrier authored Oct 26, 2017
1 parent f59eff6 commit b8096d2
Show file tree
Hide file tree
Showing 6 changed files with 173 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -285,4 +285,7 @@ interface ClouddriverService {
@GET('/ecs/{account}/{region}/ecscluster')
List<String> getEcsClusters(@Path("account") String account,
@Path("region") String region)

@GET('/storage')
List<String> getStorageAccounts()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
* Copyright 2017 Google, Inc.
*
* 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.gate.controllers;

import com.netflix.spinnaker.gate.services.PubsubSubscriptionService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class PubsubSubscriptionController {

@Autowired
private PubsubSubscriptionService pubsubSubscriptionService;

@ApiOperation(value = "Retrieve the list of pub/sub subscriptions configured in Echo.")
@RequestMapping(value = "/pubsub/subscriptions", method = RequestMethod.GET)
List<String> all() {
return pubsubSubscriptionService.getPubsubSubscriptions();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* Copyright 2017 Google, Inc.
*
* 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.gate.controllers;

import com.netflix.spinnaker.gate.services.appengine.StorageAccountService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/storage")
public class StorageAccountController {

@Autowired
private StorageAccountService storageAccountService;

@ApiOperation(value = "Retrieve the list of storage accounts configured in Clouddriver.")
@RequestMapping(method = RequestMethod.GET)
List<String> all(@RequestHeader(value = "X-RateLimit-App", required = false) String sourceApp) {
return storageAccountService.getAppengineStorageAccounts(sourceApp);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
* Copyright 2017 Google, Inc.
*
* 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.gate.services;

import com.netflix.spinnaker.gate.services.internal.EchoService;
import groovy.transform.CompileStatic;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

@CompileStatic
@Component
public class PubsubSubscriptionService {

@Autowired(required = false)
private EchoService echoService;

public List<String> getPubsubSubscriptions() {
if (echoService == null) {
throw new IllegalStateException("No Echo service available.");
}

return echoService.getPubsubSubscriptions();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
* Copyright 2017 Google, Inc.
*
* 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.gate.services.appengine;

import com.netflix.hystrix.HystrixCommand;
import com.netflix.spinnaker.gate.services.commands.HystrixFactory;
import com.netflix.spinnaker.gate.services.internal.ClouddriverServiceSelector;
import groovy.transform.CompileStatic;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.concurrent.Callable;

@CompileStatic
@Component
public class StorageAccountService {

private static final String GROUP = "storageAccount";

@Autowired
private ClouddriverServiceSelector clouddriverServiceSelector;

private static HystrixCommand<List<String>> listCommand(String type, Callable<List<String>> work) {
return HystrixFactory.newListCommand(GROUP, type, work);
}

public List<String> getAppengineStorageAccounts(String selectorKey) {
return listCommand("appengineStorageAccounts",
clouddriverServiceSelector.select(selectorKey)::getStorageAccounts)
.execute();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@

package com.netflix.spinnaker.gate.services.internal

import retrofit.http.*
import retrofit.client.Response
import retrofit.http.*

interface EchoService {

Expand All @@ -38,4 +38,6 @@ interface EchoService {
@GET("/validateCronExpression")
Map validateCronExpression(@Query("cronExpression") String cronExpression)

@GET("/pubsub/subscriptions")
List<String> getPubsubSubscriptions()
}

0 comments on commit b8096d2

Please sign in to comment.