package com.sequenceiq.cloudbreak.util;
import java.util.HashSet;
import java.util.Set;
import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import com.sequenceiq.cloudbreak.core.CloudbreakException;
import com.sequenceiq.cloudbreak.core.bootstrap.service.OrchestratorType;
import com.sequenceiq.cloudbreak.core.bootstrap.service.OrchestratorTypeResolver;
import com.sequenceiq.cloudbreak.domain.InstanceGroup;
import com.sequenceiq.cloudbreak.domain.InstanceMetaData;
import com.sequenceiq.cloudbreak.domain.Stack;
import com.sequenceiq.cloudbreak.orchestrator.model.Node;
import com.sequenceiq.cloudbreak.repository.InstanceMetaDataRepository;
@Service
public class StackUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(StackUtil.class);
@Inject
private OrchestratorTypeResolver orchestratorTypeResolver;
@Inject
private InstanceMetaDataRepository instanceMetaDataRepository;
public Set<Node> collectNodes(Stack stack) {
Set<Node> agents = new HashSet<>();
for (InstanceGroup instanceGroup : stack.getInstanceGroups()) {
for (InstanceMetaData instanceMetaData : instanceGroup.getInstanceMetaData()) {
Node node = new Node(instanceMetaData.getPrivateIp(), instanceMetaData.getPublicIp(), instanceMetaData.getDiscoveryFQDN());
node.setHostGroup(instanceGroup.getGroupName());
agents.add(node);
}
}
return agents;
}
public String extractAmbariIp(Stack stack) {
String ambariIp = null;
try {
OrchestratorType orchestratorType = orchestratorTypeResolver.resolveType(stack.getOrchestrator().getType());
if (orchestratorType != null && orchestratorType.containerOrchestrator()) {
ambariIp = stack.getCluster().getAmbariIp();
} else {
InstanceMetaData gatewayInstance = stack.getPrimaryGatewayInstance();
if (stack.getCluster() != null && stack.getCluster().getAmbariIp() != null && gatewayInstance != null) {
ambariIp = gatewayInstance.getPublicIpWrapper();
}
}
} catch (CloudbreakException ex) {
LOGGER.error("Could not resolve orchestrator type: ", ex);
}
return ambariIp;
}
}