Skip to content

Commit

Permalink
refactor(oortservice): Continue moving OortService usage to CloudDriv…
Browse files Browse the repository at this point in the history
…erService

(cherry picked from commit bf30391c6b48cd9e6a240dca06eaf89a26db6e54)
  • Loading branch information
Bijnagte authored and ajordens committed Apr 28, 2021
1 parent ac46454 commit 29bf35f
Show file tree
Hide file tree
Showing 22 changed files with 232 additions and 319 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,23 +18,19 @@
package com.netflix.spinnaker.orca.clouddriver.pipeline.instance

import com.netflix.spinnaker.orca.api.pipeline.models.StageExecution
import com.netflix.spinnaker.orca.clouddriver.OortService
import com.netflix.spinnaker.orca.clouddriver.tasks.MonitorKatoTask
import com.netflix.spinnaker.orca.clouddriver.tasks.instance.DeregisterInstancesFromLoadBalancerTask
import com.netflix.spinnaker.orca.clouddriver.tasks.instance.WaitForDownInstanceHealthTask
import com.netflix.spinnaker.orca.api.pipeline.graph.StageDefinitionBuilder
import com.netflix.spinnaker.orca.api.pipeline.graph.TaskNode
import groovy.transform.CompileStatic
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component

import javax.annotation.Nonnull

@Component
@CompileStatic
class DeregisterInstancesFromLoadBalancerStage implements StageDefinitionBuilder {
@Autowired
OortService oortService

@Override
void taskGraph(@Nonnull StageExecution stage, @Nonnull TaskNode.Builder builder) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,24 +18,19 @@
package com.netflix.spinnaker.orca.clouddriver.pipeline.instance

import com.netflix.spinnaker.orca.api.pipeline.models.StageExecution
import com.netflix.spinnaker.orca.clouddriver.OortService
import com.netflix.spinnaker.orca.clouddriver.tasks.MonitorKatoTask
import com.netflix.spinnaker.orca.clouddriver.tasks.instance.RegisterInstancesWithLoadBalancerTask
import com.netflix.spinnaker.orca.clouddriver.tasks.instance.WaitForUpInstanceHealthTask
import com.netflix.spinnaker.orca.api.pipeline.graph.StageDefinitionBuilder
import com.netflix.spinnaker.orca.api.pipeline.graph.TaskNode
import groovy.transform.CompileStatic
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component

import javax.annotation.Nonnull

@Component
@CompileStatic
class RegisterInstancesWithLoadBalancerStage implements StageDefinitionBuilder {
@Autowired
OortService oortService

@Override
void taskGraph(@Nonnull StageExecution stage, @Nonnull TaskNode.Builder builder) {
builder
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@ package com.netflix.spinnaker.orca.clouddriver.pipeline.providers.aws
import com.netflix.spinnaker.kork.dynamicconfig.DynamicConfigService
import com.netflix.spinnaker.orca.api.pipeline.models.StageExecution
import com.netflix.spinnaker.orca.api.pipeline.graph.StageGraphBuilder
import com.netflix.spinnaker.orca.clouddriver.CloudDriverService
import com.netflix.spinnaker.orca.clouddriver.ForceCacheRefreshAware
import com.netflix.spinnaker.orca.clouddriver.model.EntityTags

import javax.annotation.Nonnull
import com.netflix.spinnaker.kork.core.RetrySupport
import com.netflix.spinnaker.orca.clouddriver.FeaturesService
import com.netflix.spinnaker.orca.clouddriver.OortService
import com.netflix.spinnaker.orca.clouddriver.pipeline.entitytags.DeleteEntityTagsStage
import com.netflix.spinnaker.orca.clouddriver.tasks.MonitorKatoTask
import com.netflix.spinnaker.orca.clouddriver.tasks.servergroup.ServerGroupCacheForceRefreshTask
Expand Down Expand Up @@ -53,7 +54,7 @@ class ApplySourceServerGroupCapacityStage implements StageDefinitionBuilder, For
DeleteEntityTagsStage deleteEntityTagsStage

@Autowired
OortService oortService
CloudDriverService cloudDriverService

@Autowired
RetrySupport retrySupport
Expand All @@ -80,7 +81,7 @@ class ApplySourceServerGroupCapacityStage implements StageDefinitionBuilder, For
return
}

def entityTags = fetchEntityTags(oortService, retrySupport, stage)?.getAt(0)
EntityTags entityTags = fetchEntityTags(cloudDriverService, retrySupport, stage)?.getAt(0)
if (!entityTags) {
return
}
Expand All @@ -106,7 +107,7 @@ class ApplySourceServerGroupCapacityStage implements StageDefinitionBuilder, For
}
}

private static List<Map> fetchEntityTags(OortService oortService, RetrySupport retrySupport, StageExecution stage) {
private static List<EntityTags> fetchEntityTags(CloudDriverService oortService, RetrySupport retrySupport, StageExecution stage) {
def serverGroupName = stage.context.serverGroupName
def credentials = stage.context.credentials
def region = getRegion(stage)
Expand All @@ -123,7 +124,7 @@ class ApplySourceServerGroupCapacityStage implements StageDefinitionBuilder, For
}

retrySupport.retry({
return oortService.getEntityTags([
return oortService.getEntityTagsTyped([
("tag:${PINNED_CAPACITY_TAG}".toString()): "*",
entityId : stage.context.serverGroupName,
account : stage.context.credentials,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ import com.fasterxml.jackson.databind.ObjectMapper
import com.netflix.frigga.Names
import com.netflix.spinnaker.kork.core.RetrySupport
import com.netflix.spinnaker.orca.api.pipeline.models.StageExecution
import com.netflix.spinnaker.orca.clouddriver.CloudDriverService
import com.netflix.spinnaker.orca.clouddriver.FeaturesService
import com.netflix.spinnaker.orca.clouddriver.OortService
import com.netflix.spinnaker.orca.clouddriver.pipeline.servergroup.CloneServerGroupStage
import com.netflix.spinnaker.orca.api.pipeline.SyntheticStageOwner
import com.netflix.spinnaker.orca.pipeline.StageExecutionFactory
Expand All @@ -45,7 +45,7 @@ class PreviousImageRollback implements Rollback {

@Autowired
@JsonIgnore
OortService oortService
CloudDriverService cloudDriverService

@Autowired
@JsonIgnore
Expand All @@ -57,7 +57,7 @@ class PreviousImageRollback implements Rollback {

@Override
List<StageExecution> buildStages(StageExecution parentStage) {
def previousImageRollbackSupport = new PreviousImageRollbackSupport(objectMapper, oortService, featuresService, retrySupport)
def previousImageRollbackSupport = new PreviousImageRollbackSupport(objectMapper, cloudDriverService, featuresService, retrySupport)
def stages = []

def parentStageContext = parentStage.context
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,19 @@

package com.netflix.spinnaker.orca.clouddriver.tasks.instance

import com.fasterxml.jackson.databind.ObjectMapper
import com.netflix.spinnaker.orca.api.pipeline.models.ExecutionStatus
import com.netflix.spinnaker.orca.api.pipeline.OverridableTimeoutRetryableTask
import com.netflix.spinnaker.orca.api.pipeline.models.StageExecution
import com.netflix.spinnaker.orca.api.pipeline.TaskResult
import com.netflix.spinnaker.orca.clouddriver.OortService
import com.netflix.spinnaker.orca.clouddriver.CloudDriverService
import org.springframework.beans.factory.annotation.Autowired

abstract class AbstractWaitForInstanceHealthChangeTask implements OverridableTimeoutRetryableTask {
long backoffPeriod = 5000
long timeout = 3600000

@Autowired
OortService oortService

@Autowired
ObjectMapper objectMapper
CloudDriverService cloudDriverService

@Override
TaskResult execute(StageExecution stage) {
Expand All @@ -50,7 +46,7 @@ abstract class AbstractWaitForInstanceHealthChangeTask implements OverridableTim
}

def stillRunning = instanceIds.find {
def instance = getInstance(account, region, it)
def instance = cloudDriverService.getInstance(account, region, it)
return !hasSucceeded(instance, healthProviderTypesToCheck)
}

Expand All @@ -61,10 +57,5 @@ abstract class AbstractWaitForInstanceHealthChangeTask implements OverridableTim
return (List<String>) stage.context.instanceIds
}

protected Map getInstance(String account, String region, String instanceId) {
def response = oortService.getInstance(account, region, instanceId)
return objectMapper.readValue(response.body.in().text, Map)
}

abstract boolean hasSucceeded(Map instance, Collection<String> interestedHealthProviderNames);
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,11 @@

package com.netflix.spinnaker.orca.clouddriver.tasks.instance

import com.fasterxml.jackson.databind.ObjectMapper
import com.netflix.spinnaker.orca.api.pipeline.models.ExecutionStatus
import com.netflix.spinnaker.orca.api.pipeline.RetryableTask
import com.netflix.spinnaker.orca.api.pipeline.models.StageExecution
import com.netflix.spinnaker.orca.api.pipeline.TaskResult
import com.netflix.spinnaker.orca.clouddriver.OortService
import com.netflix.spinnaker.orca.clouddriver.CloudDriverService
import com.netflix.spinnaker.orca.clouddriver.tasks.AbstractCloudProviderAwareTask
import com.netflix.spinnaker.orca.commands.InstanceUptimeCommand
import groovy.util.logging.Slf4j
Expand All @@ -39,10 +38,7 @@ class CaptureInstanceUptimeTask extends AbstractCloudProviderAwareTask implement
InstanceUptimeCommand instanceUptimeCommand;

@Autowired
OortService oortService

@Autowired
ObjectMapper objectMapper
CloudDriverService cloudDriverService

@Override
TaskResult execute(StageExecution stage) {
Expand All @@ -55,7 +51,7 @@ class CaptureInstanceUptimeTask extends AbstractCloudProviderAwareTask implement
def account = (stage.context.account ?: stage.context.credentials) as String

def instanceUptimes = stage.context.instanceIds.inject([:]) { Map accumulator, String instanceId ->
def instance = getInstance(account, region, instanceId)
def instance = cloudDriverService.getInstance(account, region, instanceId)
try {
accumulator[instanceId] = instanceUptimeCommand.uptime(cloudProvider, instance).seconds
} catch (Exception e) {
Expand All @@ -69,9 +65,4 @@ class CaptureInstanceUptimeTask extends AbstractCloudProviderAwareTask implement
"instanceUptimes": instanceUptimes
]).build()
}

protected Map getInstance(String account, String region, String instanceId) {
def response = oortService.getInstance(account, region, instanceId)
return objectMapper.readValue(response.body.in().text, Map)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import com.netflix.spinnaker.orca.api.pipeline.models.ExecutionStatus
import com.netflix.spinnaker.orca.api.pipeline.RetryableTask
import com.netflix.spinnaker.orca.api.pipeline.models.StageExecution
import com.netflix.spinnaker.orca.api.pipeline.TaskResult
import com.netflix.spinnaker.orca.clouddriver.OortService
import com.netflix.spinnaker.orca.clouddriver.CloudDriverService
import com.netflix.spinnaker.orca.clouddriver.tasks.AbstractCloudProviderAwareTask
import com.netflix.spinnaker.orca.commands.InstanceUptimeCommand
import groovy.util.logging.Slf4j
Expand All @@ -39,7 +39,7 @@ class VerifyInstanceUptimeTask extends AbstractCloudProviderAwareTask implements
InstanceUptimeCommand instanceUptimeCommand;

@Autowired
OortService oortService
CloudDriverService cloudDriverService

@Autowired
ObjectMapper objectMapper
Expand All @@ -56,7 +56,7 @@ class VerifyInstanceUptimeTask extends AbstractCloudProviderAwareTask implements

def instanceUptimes = stage.context.instanceUptimes as Map<String, Integer>
def allInstancesHaveRebooted = instanceUptimes.every { String instanceId, int uptime ->
def instance = getInstance(account, region, instanceId);
def instance = cloudDriverService.getInstance(account, region, instanceId);

try {
InstanceUptimeCommand.InstanceUptimeResult result = instanceUptimeCommand.uptime(cloudProvider, instance)
Expand All @@ -69,9 +69,4 @@ class VerifyInstanceUptimeTask extends AbstractCloudProviderAwareTask implements

return TaskResult.ofStatus(allInstancesHaveRebooted ? ExecutionStatus.SUCCEEDED : ExecutionStatus.RUNNING)
}

protected Map getInstance(String account, String region, String instanceId) {
def response = oortService.getInstance(account, region, instanceId)
return objectMapper.readValue(response.body.in().text, Map)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,12 @@

package com.netflix.spinnaker.orca.clouddriver.tasks.providers.appengine

import com.fasterxml.jackson.databind.ObjectMapper
import com.netflix.frigga.Names
import com.netflix.spinnaker.orca.api.pipeline.models.ExecutionStatus
import com.netflix.spinnaker.orca.api.pipeline.RetryableTask
import com.netflix.spinnaker.orca.api.pipeline.models.StageExecution
import com.netflix.spinnaker.orca.api.pipeline.TaskResult
import com.netflix.spinnaker.orca.clouddriver.OortService
import com.netflix.spinnaker.orca.clouddriver.CloudDriverService
import com.netflix.spinnaker.orca.clouddriver.tasks.AbstractCloudProviderAwareTask
import com.netflix.spinnaker.orca.retrofit.exceptions.RetrofitExceptionHandler
import groovy.util.logging.Slf4j
Expand All @@ -35,10 +34,7 @@ abstract class AbstractWaitForAppEngineServerGroupStopStartTask extends Abstract
long timeout = 1800000

@Autowired
OortService oortService

@Autowired
ObjectMapper objectMapper
CloudDriverService cloudDriverService

abstract boolean isStart()

Expand All @@ -51,8 +47,7 @@ abstract class AbstractWaitForAppEngineServerGroupStopStartTask extends Abstract
String appName = stage.context.moniker?.app ?: names.app
String clusterName = stage.context.moniker?.cluster ?: names.cluster
try {
def response = oortService.getCluster(appName, account, clusterName, cloudProvider)
Map cluster = objectMapper.readValue(response.body.in().text, Map)
Map cluster = cloudDriverService.getCluster(appName, account, clusterName, cloudProvider)

def serverGroup = cluster.serverGroups.find { it.name == serverGroupName }
if (!serverGroup) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import com.fasterxml.jackson.core.JsonParseException
import com.fasterxml.jackson.databind.JsonMappingException
import com.fasterxml.jackson.databind.ObjectMapper
import com.netflix.spinnaker.orca.api.pipeline.models.StageExecution
import com.netflix.spinnaker.orca.clouddriver.CloudDriverService
import com.netflix.spinnaker.orca.clouddriver.OortService
import com.netflix.spinnaker.orca.clouddriver.pipeline.servergroup.support.Location
import com.netflix.spinnaker.orca.clouddriver.pipeline.servergroup.support.TargetServerGroup
Expand All @@ -35,6 +36,7 @@ import retrofit.RetrofitError
@Slf4j
class SourceResolver {

@Autowired CloudDriverService cloudDriverService
@Autowired OortService oortService
@Autowired ObjectMapper mapper

Expand Down Expand Up @@ -124,9 +126,7 @@ class SourceResolver {

List<Map> getExistingAsgs(String app, String account, String cluster, String cloudProvider) throws RetrofitError, JsonParseException, JsonMappingException {
try {
def response = oortService.getCluster(app, account, cluster, cloudProvider)
def json = response.body.in().text
def map = mapper.readValue(json, Map)
def map = cloudDriverService.getCluster(app, account, cluster, cloudProvider)
(map.serverGroups as List<Map>).sort { it.createdTime }
} catch (RetrofitError re) {
if (re.kind == RetrofitError.Kind.HTTP && re.response.status == 404) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,11 @@ public Map<String, Object> getCluster(
return readBody(response, JSON_MAP);
}

public Map<String, Object> getInstance(String account, String region, String instanceId) {
Response response = oortService.getInstance(account, region, instanceId);
return readBody(response, JSON_MAP);
}

@SneakyThrows // code may have depended on the exceptions thrown that groovy was hiding
private <T> T readBody(Response response, Class<T> type) {
return objectMapper.readValue(response.getBody().in(), type);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.netflix.spinnaker.kork.core.RetrySupport;
import com.netflix.spinnaker.orca.clouddriver.CloudDriverService;
import com.netflix.spinnaker.orca.clouddriver.FeaturesService;
import com.netflix.spinnaker.orca.clouddriver.OortService;
import java.util.Collections;
import java.util.List;
import java.util.Map;
Expand All @@ -32,18 +32,18 @@ public class PreviousImageRollbackSupport {
private final Logger log = LoggerFactory.getLogger(this.getClass());

private final ObjectMapper objectMapper;
private final OortService oortService;
private final CloudDriverService cloudDriverService;
private final FeaturesService featuresService;
private final RetrySupport retrySupport;

public PreviousImageRollbackSupport(
ObjectMapper objectMapper,
OortService oortService,
CloudDriverService cloudDriverService,
FeaturesService featuresService,
RetrySupport retrySupport) {
this.objectMapper =
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
this.oortService = oortService;
this.cloudDriverService = cloudDriverService;
this.featuresService = featuresService;
this.retrySupport = retrySupport;
}
Expand All @@ -60,7 +60,7 @@ public ImageDetails getImageDetailsFromEntityTags(
return Collections.emptyList();
}

return oortService.getEntityTags(
return cloudDriverService.getEntityTags(
cloudProvider, "serverGroup", serverGroupName, credentials, region);
},
15,
Expand Down
Loading

0 comments on commit 29bf35f

Please sign in to comment.