Skip to content

Commit

Permalink
1.614.0 - include awsAccount, stack and region when indexing titus in…
Browse files Browse the repository at this point in the history
…stances
  • Loading branch information
tomaslin committed Mar 26, 2018
1 parent e538e97 commit 7d769a7
Show file tree
Hide file tree
Showing 10 changed files with 61 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,8 @@ class Keys {
"${PROVIDER}:${Namespace.SERVER_GROUPS}:${names.cluster}:${account}:${region}:${names.group}"
}

static String getInstanceKey(String id) {
"${PROVIDER}:${Namespace.INSTANCES}:${id}"
static String getInstanceKey(String id, String accountId, String stack, String region) {
"${PROVIDER}:${Namespace.INSTANCES}:${accountId}:${region}:${stack}:${id}"
}

static String getClusterKey(String clusterName, String application, String account) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/

package com.netflix.spinnaker.clouddriver.titus.caching

import com.netflix.spinnaker.cats.agent.Agent
import com.netflix.spinnaker.cats.agent.CachingAgent
import com.netflix.spinnaker.cats.provider.Provider
Expand Down Expand Up @@ -46,12 +47,12 @@ class TitusCachingProvider implements Provider, EurekaAwareProvider {
}

@Override
String getInstanceKey(Map<String, Object> attributes, String region) {
Keys.getInstanceKey(attributes.titusTaskId)
String getInstanceKey(Map<String, Object> attributes, String region) {
Keys.getInstanceKey(attributes.titusTaskId, attributes.accountId, attributes.titusStack, region)
}

@Override
String getInstanceHealthKey(Map<String, Object> attributes, String region, String healthId) {
String getInstanceHealthKey(Map<String, Object> attributes, String region, String healthId) {
Keys.getInstanceHealthKey(attributes.instanceId, healthId)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,28 +37,23 @@ import com.netflix.spinnaker.clouddriver.cache.OnDemandMetricsSupport
import com.netflix.spinnaker.clouddriver.model.HealthState
import com.netflix.spinnaker.clouddriver.titus.TitusClientProvider
import com.netflix.spinnaker.clouddriver.titus.TitusCloudProvider
import com.netflix.spinnaker.clouddriver.titus.caching.utils.AwsLookupUtil
import com.netflix.spinnaker.clouddriver.titus.client.model.TaskState
import com.netflix.spinnaker.clouddriver.titus.credentials.NetflixTitusCredentials
import com.netflix.spinnaker.clouddriver.titus.caching.Keys
import com.netflix.spinnaker.clouddriver.titus.caching.TitusCachingProvider
import com.netflix.spinnaker.clouddriver.titus.caching.utils.AwsLookupUtil
import com.netflix.spinnaker.clouddriver.titus.client.TitusClient
import com.netflix.spinnaker.clouddriver.titus.client.model.Job
import com.netflix.spinnaker.clouddriver.titus.client.model.TaskState
import com.netflix.spinnaker.clouddriver.titus.credentials.NetflixTitusCredentials
import com.netflix.spinnaker.clouddriver.titus.model.TitusSecurityGroup
import org.slf4j.Logger
import org.slf4j.LoggerFactory

import javax.inject.Provider

import static com.netflix.spinnaker.clouddriver.core.provider.agent.Namespace.HEALTH
import static com.netflix.spinnaker.clouddriver.titus.caching.Keys.Namespace.APPLICATIONS
import static com.netflix.spinnaker.clouddriver.titus.caching.Keys.Namespace.CLUSTERS
import static com.netflix.spinnaker.clouddriver.titus.caching.Keys.Namespace.IMAGES
import static com.netflix.spinnaker.clouddriver.titus.caching.Keys.Namespace.ON_DEMAND
import static com.netflix.spinnaker.clouddriver.titus.caching.Keys.Namespace.INSTANCES
import static com.netflix.spinnaker.clouddriver.titus.caching.Keys.Namespace.SERVER_GROUPS
import static com.netflix.spinnaker.cats.agent.AgentDataType.Authority.AUTHORITATIVE
import static com.netflix.spinnaker.cats.agent.AgentDataType.Authority.INFORMATIVE
import static com.netflix.spinnaker.clouddriver.core.provider.agent.Namespace.HEALTH
import static com.netflix.spinnaker.clouddriver.titus.caching.Keys.Namespace.*

class TitusClusterCachingAgent implements CachingAgent, CustomScheduledAgent, OnDemandAgent {

Expand Down Expand Up @@ -304,7 +299,7 @@ class TitusClusterCachingAgent implements CachingAgent, CustomScheduledAgent, On
cache(cacheResults, INSTANCES.ns, instances)
} else {
try {
ServerGroupData data = new ServerGroupData(job, account.name, region)
ServerGroupData data = new ServerGroupData(job, account.name, region, account.stack)
cacheApplication(data, applications)
cacheCluster(data, clusters)
cacheServerGroup(data, serverGroups, instances, titusSecurityGroupCache)
Expand Down Expand Up @@ -353,7 +348,7 @@ class TitusClusterCachingAgent implements CachingAgent, CustomScheduledAgent, On
relationships[CLUSTERS.ns].add(data.cluster)
relationships[INSTANCES.ns].addAll(data.instanceIds)
for (Job.TaskSummary task : job.tasks) {
def instanceData = new InstanceData(job, task, account.name, region)
def instanceData = new InstanceData(job, task, account.name, region, account.stack)
cacheInstance(instanceData, instances)
}
}
Expand All @@ -376,7 +371,7 @@ class TitusClusterCachingAgent implements CachingAgent, CustomScheduledAgent, On
}
}

private static class ServerGroupData {
private class ServerGroupData {
private final AutoScalingGroupNameBuilder asgNameBuilder;

final Job job
Expand All @@ -388,7 +383,7 @@ class TitusClusterCachingAgent implements CachingAgent, CustomScheduledAgent, On
final String region
final String account

public ServerGroupData(Job job, String account, String region) {
public ServerGroupData(Job job, String account, String region, String stack) {
this.job = job

String asgName = job.name
Expand All @@ -413,7 +408,9 @@ class TitusClusterCachingAgent implements CachingAgent, CustomScheduledAgent, On
region = region
account = account
serverGroup = Keys.getServerGroupKey(job.name, account, region)
instanceIds = (job.tasks.id.collect { Keys.getInstanceKey(it) } as Set).asImmutable()
instanceIds = (job.tasks.id.collect {
Keys.getInstanceKey(it, getAwsAccountId(account), stack, region)
} as Set).asImmutable()
}
}

Expand All @@ -425,17 +422,21 @@ class TitusClusterCachingAgent implements CachingAgent, CustomScheduledAgent, On
job.securityGroupDetails = securityGroups
}

private static class InstanceData {
private String getAwsAccountId(String account) {
awsLookupUtil.get().awsAccountId(account, region)
}

private class InstanceData {
private final Job job
private final Job.TaskSummary task
private final String instanceId
private final String serverGroup
private final String imageId

public InstanceData(Job job, Job.TaskSummary task, String account, String region) {
public InstanceData(Job job, Job.TaskSummary task, String account, String region, String stack) {
this.job = job
this.task = task
this.instanceId = Keys.getInstanceKey(task.id)
this.instanceId = Keys.getInstanceKey(task.id, getAwsAccountId(account), stack, region)
this.serverGroup = job.name
this.imageId = "${job.applicationName}:${job.version}"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component

import static com.netflix.spinnaker.clouddriver.core.provider.agent.Namespace.HEALTH
import static com.netflix.spinnaker.clouddriver.titus.caching.Keys.Namespace.APPLICATIONS
import static com.netflix.spinnaker.clouddriver.titus.caching.Keys.Namespace.CLUSTERS
import static com.netflix.spinnaker.clouddriver.titus.caching.Keys.Namespace.INSTANCES
import static com.netflix.spinnaker.clouddriver.titus.caching.Keys.Namespace.SERVER_GROUPS
import static com.netflix.spinnaker.clouddriver.titus.caching.Keys.Namespace.*

@Component
class TitusClusterProvider implements ClusterProvider<TitusCluster> {
Expand Down Expand Up @@ -162,8 +159,8 @@ class TitusClusterProvider implements ClusterProvider<TitusCluster> {
String getCloudProviderId() {
return titusCloudProvider.id
}
// Private methods

// Private methods
private Map<String, Set<TitusCluster>> getClustersInternal(String applicationName, boolean includeDetails) {
CacheData application = cacheView.get(APPLICATIONS.ns, Keys.getApplicationKey(applicationName))
if (application == null) return null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import com.netflix.spinnaker.clouddriver.core.provider.agent.ExternalHealthProvi
import com.netflix.spinnaker.clouddriver.model.InstanceProvider
import com.netflix.spinnaker.clouddriver.titus.TitusCloudProvider
import com.netflix.spinnaker.clouddriver.titus.caching.Keys
import com.netflix.spinnaker.clouddriver.titus.caching.utils.AwsLookupUtil
import com.netflix.spinnaker.clouddriver.titus.client.model.Job
import com.netflix.spinnaker.clouddriver.titus.model.TitusInstance
import org.springframework.beans.factory.annotation.Autowired
Expand All @@ -38,6 +39,9 @@ class TitusInstanceProvider implements InstanceProvider<TitusInstance> {
private final ObjectMapper objectMapper
private final TitusCloudProvider titusCloudProvider

@Autowired
AwsLookupUtil awsLookupUtil

@Autowired(required = false)
List<ExternalHealthProvider> externalHealthProviders

Expand All @@ -50,7 +54,8 @@ class TitusInstanceProvider implements InstanceProvider<TitusInstance> {

@Override
TitusInstance getInstance(String account, String region, String id) {
CacheData instanceEntry = cacheView.get(INSTANCES.ns, Keys.getInstanceKey(id))

CacheData instanceEntry = cacheView.get(INSTANCES.ns, Keys.getInstanceKey(id, awsLookupUtil.awsAccountId(account, region), awsLookupUtil.stack(account), region))
if (!instanceEntry) {
return null
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.netflix.spinnaker.clouddriver.aws.provider.view.AmazonVpcProvider
import com.netflix.spinnaker.clouddriver.aws.security.AmazonCredentials
import com.netflix.spinnaker.clouddriver.aws.services.RegionScopedProviderFactory
import com.netflix.spinnaker.clouddriver.security.AccountCredentialsProvider
import com.netflix.spinnaker.clouddriver.titus.client.security.TitusCredentials
import com.netflix.spinnaker.clouddriver.titus.credentials.NetflixTitusCredentials
import com.netflix.spinnaker.clouddriver.titus.model.TitusSecurityGroup
import org.springframework.beans.factory.annotation.Autowired
Expand Down Expand Up @@ -104,6 +105,21 @@ class AwsLookupUtil {
applicationSecurityGroup
}

String awsAccountId(account, region){
Map awsDetails = awsAccountLookup.find {
it.titusAccount == account && it.region == region
}
accountCredentialsProvider.all.find {
it instanceof AmazonCredentials && it.name == awsDetails.awsAccount
}.accountId
}

String stack(account){
accountCredentialsProvider.all.find {
it instanceof TitusCredentials && it.name == account
}.stack
}

private String convertVpcNameToId(String awsAccount, String region, String name) {
if (!amazonVpcs) {
amazonVpcs = amazonVpcProvider.all
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ class NetflixTitusCredentials implements AccountCredentials<TitusCredentials> {
final String awsAccount
final String awsVpc
final boolean discoveryEnabled
final String stack

private final List<TitusRegion> regions

Expand All @@ -46,7 +47,9 @@ class NetflixTitusCredentials implements AccountCredentials<TitusCredentials> {
String awsAccount,
String awsVpc,
boolean discoveryEnabled,
String discovery) {
String discovery,
String stack
) {
this.name = name
this.environment = environment
this.accountType = accountType
Expand All @@ -57,6 +60,7 @@ class NetflixTitusCredentials implements AccountCredentials<TitusCredentials> {
this.awsVpc = awsVpc
this.discoveryEnabled = discoveryEnabled
this.discovery = discovery
this.stack = stack
}

@Override
Expand Down Expand Up @@ -93,5 +97,8 @@ class NetflixTitusCredentials implements AccountCredentials<TitusCredentials> {
return discoveryEnabled
}

String getStack() {
return stack
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ class TitusConfiguration {
if (!account.bastionHost && titusCredentialsConfig.defaultBastionHostTemplate) {
account.bastionHost = titusCredentialsConfig.defaultBastionHostTemplate.replaceAll(Pattern.quote('{{environment}}'), account.environment)
}
NetflixTitusCredentials credentials = new NetflixTitusCredentials(account.name, account.environment, account.accountType, regions, account.bastionHost, account.registry, account.awsAccount, account.awsVpc ?: titusCredentialsConfig.awsVpc, account.discoveryEnabled, account.discovery)
NetflixTitusCredentials credentials = new NetflixTitusCredentials(account.name, account.environment, account.accountType, regions, account.bastionHost, account.registry, account.awsAccount, account.awsVpc ?: titusCredentialsConfig.awsVpc, account.discoveryEnabled, account.discovery, account.stack ?: 'mainvpc')
accounts.add(credentials)
repository.save(account.name, credentials)
}
Expand Down Expand Up @@ -95,6 +95,7 @@ class TitusConfiguration {
String registry
List<Region> regions
String awsVpc
String stack
}

static class Region {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class TitusDeployHandlerSpec extends Specification {
}

NetflixTitusCredentials testCredentials = new NetflixTitusCredentials(
'test', 'test', 'test', [new TitusRegion('us-east-1', 'test', 'http://foo')], 'test', 'test', 'test', 'test', false, ''
'test', 'test', 'test', [new TitusRegion('us-east-1', 'test', 'http://foo')], 'test', 'test', 'test', 'test', false, '', 'mainvpc'
)

@Subject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class DestroyTitusServerGroupAtomicOperationSpec extends Specification {
}

NetflixTitusCredentials testCredentials = new NetflixTitusCredentials(
'test', 'test', 'test', [new TitusRegion('us-east-1', 'test', 'http://foo')], 'test', 'test', 'test', 'test', false, ''
'test', 'test', 'test', [new TitusRegion('us-east-1', 'test', 'http://foo')], 'test', 'test', 'test', 'test', false, '', 'mainvpc'
)

DestroyTitusServerGroupDescription description = new DestroyTitusServerGroupDescription(
Expand Down

0 comments on commit 7d769a7

Please sign in to comment.