Skip to content

Commit

Permalink
feat(provider/openstack): consul enable/disable (#1612)
Browse files Browse the repository at this point in the history
  • Loading branch information
emjburns authored and lwander committed May 2, 2017
1 parent a389665 commit e6ece37
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class ConsulProviderUtils {
running = true
} catch (RetrofitError e) {
// Instance can't be connected to on hostname:port/v1/agent/checks
log.debug(e)
log.debug(e.message)
}
return new ConsulNode(healths: healths, running: running, services: services)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.netflix.spinnaker.clouddriver.openstack.deploy.ops.servergroup

import com.netflix.spinnaker.clouddriver.consul.deploy.ops.EnableDisableConsulInstance
import com.netflix.spinnaker.clouddriver.data.task.Task
import com.netflix.spinnaker.clouddriver.data.task.TaskRepository
import com.netflix.spinnaker.clouddriver.openstack.client.BlockingStatusChecker
Expand All @@ -24,13 +25,17 @@ import com.netflix.spinnaker.clouddriver.openstack.deploy.description.servergrou
import com.netflix.spinnaker.clouddriver.openstack.deploy.exception.OpenstackOperationException
import com.netflix.spinnaker.clouddriver.openstack.deploy.ops.LoadBalancerStatusAware
import com.netflix.spinnaker.clouddriver.orchestration.AtomicOperation
import groovy.util.logging.Slf4j
import org.openstack4j.model.compute.Server
import org.openstack4j.model.heat.Stack
import org.openstack4j.model.network.ext.LoadBalancerV2StatusTree
import retrofit.RetrofitError

import java.util.concurrent.CompletableFuture
import java.util.concurrent.Future
import java.util.function.Supplier

@Slf4j
abstract class AbstractEnableDisableOpenstackAtomicOperation implements AtomicOperation<Void>, LoadBalancerStatusAware {
abstract boolean isDisable()

Expand All @@ -54,7 +59,29 @@ abstract class AbstractEnableDisableOpenstackAtomicOperation implements AtomicOp
Void operate(List priorOutputs) {
String verb = disable ? 'disable' : 'enable'
String gerund = disable ? 'Disabling' : 'Enabling'

task.updateStatus phaseName, "Initializing $verb server group operation for $description.serverGroupName in $description.region..."
def credentials = description.credentials

if (credentials.credentials.consulConfig?.enabled) {
task.updateStatus phaseName, "$gerund server group in Consul..."

List<String> instanceIds = provider.getInstanceIdsForStack(description.region, description.serverGroupName)
instanceIds.each { String instanceId ->
Server instance = provider.getServerInstance(description.region, instanceId)
try {
EnableDisableConsulInstance.operate(credentials.credentials.consulConfig,
instance.name,
disable
? EnableDisableConsulInstance.State.disable
: EnableDisableConsulInstance.State.enable)
} catch (RetrofitError e) {
// Consul isn't running
log.warn(e.message)
}
}
}

try {
task.updateStatus phaseName, "Getting stack details for $description.serverGroupName..."
List<String> instanceIds = provider.getInstanceIdsForStack(description.region, description.serverGroupName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
package com.netflix.spinnaker.clouddriver.openstack.provider.agent

import com.fasterxml.jackson.databind.ObjectMapper
import com.netflix.spinnaker.cats.agent.*
import com.netflix.spinnaker.cats.agent.AgentDataType
import com.netflix.spinnaker.cats.agent.CacheResult
import com.netflix.spinnaker.cats.provider.ProviderCache
import com.netflix.spinnaker.clouddriver.consul.model.ConsulNode
import com.netflix.spinnaker.clouddriver.consul.provider.ConsulProviderUtils
Expand All @@ -26,11 +27,11 @@ import com.netflix.spinnaker.clouddriver.openstack.cache.Keys
import com.netflix.spinnaker.clouddriver.openstack.model.OpenstackInstance
import com.netflix.spinnaker.clouddriver.openstack.security.OpenstackNamedAccountCredentials
import groovy.util.logging.Slf4j
import org.openstack4j.model.compute.Server
import retrofit.RetrofitError

import static com.netflix.spinnaker.clouddriver.openstack.provider.OpenstackInfrastructureProvider.ATTRIBUTES
import static com.netflix.spinnaker.cats.agent.AgentDataType.Authority.AUTHORITATIVE
import static com.netflix.spinnaker.clouddriver.openstack.cache.Keys.Namespace.INSTANCES
import static com.netflix.spinnaker.clouddriver.openstack.provider.OpenstackInfrastructureProvider.ATTRIBUTES

@Slf4j
class OpenstackInstanceCachingAgent extends AbstractOpenstackCachingAgent {
Expand Down Expand Up @@ -64,8 +65,14 @@ class OpenstackInstanceCachingAgent extends AbstractOpenstackCachingAgent {
clientProvider.getInstances(region)?.each { server ->
String instanceKey = Keys.getInstanceKey(server.id, accountName, region)

ConsulNode consulNode = account?.consulConfig?.enabled ?
ConsulProviderUtils.getHealths(account.consulConfig, server.name) : null
ConsulNode consulNode = null
if (account?.consulConfig?.enabled) {
try{
consulNode = ConsulProviderUtils.getHealths(account.consulConfig, server.name)
} catch (RetrofitError e){
log.warn(e.message)
}
}

Map<String, Object> instanceAttributes = objectMapper.convertValue(OpenstackInstance.from(server, consulNode, accountName, region), ATTRIBUTES)

Expand Down

0 comments on commit e6ece37

Please sign in to comment.