Search in sources :

Example 56 with Node

use of com.sequenceiq.cloudbreak.common.orchestration.Node in project cloudbreak by hortonworks.

the class HighStateRunnerTest method submit.

@Test
public void submit() {
    String target1 = "10.0.0.1";
    String target2 = "10.0.0.2";
    targets = new HashSet<>();
    targets.add(target1);
    targets.add(target2);
    allNode = new HashSet<>();
    allNode.add(new Node("10.0.0.1", "5.5.5.1", "10-0-0-1.example.com", "hg"));
    allNode.add(new Node("10.0.0.2", "5.5.5.2", "10-0-0-2.example.com", "hg"));
    allNode.add(new Node("10.0.0.3", "5.5.5.3", "10-0-0-3.example.com", "hg"));
    HighStateRunner highStateRunner = new HighStateRunner(targets, allNode);
    SaltConnector saltConnector = Mockito.mock(SaltConnector.class);
    PowerMockito.mockStatic(SaltStates.class);
    String jobId = "1";
    PowerMockito.when(SaltStates.highstate(any(), any())).thenReturn(jobId);
    String jid = highStateRunner.submit(saltConnector);
    assertEquals(jobId, jid);
    PowerMockito.verifyStatic(SaltStates.class);
    ArgumentCaptor<Target<String>> targetCaptor = ArgumentCaptor.forClass(Target.class);
    SaltStates.highstate(eq(saltConnector), targetCaptor.capture());
    String order1 = target1 + "," + target2;
    String order2 = target2 + "," + target1;
    String actual = targetCaptor.getValue().getTarget();
    assertTrue(order1.equals(actual) || order2.equals(actual));
}
Also used : Target(com.sequenceiq.cloudbreak.orchestrator.salt.client.target.Target) Node(com.sequenceiq.cloudbreak.common.orchestration.Node) SaltConnector(com.sequenceiq.cloudbreak.orchestrator.salt.client.SaltConnector) Test(org.junit.Test) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest)

Example 57 with Node

use of com.sequenceiq.cloudbreak.common.orchestration.Node in project cloudbreak by hortonworks.

the class StateRunnerTest method submit.

@Test
public void submit() throws Exception {
    targets = new HashSet<>();
    targets.add("10-0-0-1.example.com");
    allNode = new HashSet<>();
    allNode.add(new Node("10.0.0.1", "5.5.5.1", "10-0-0-1.example.com", "hg"));
    allNode.add(new Node("10.0.0.2", "5.5.5.2", "10-0-0-2.example.com", "hg"));
    allNode.add(new Node("10.0.0.3", "5.5.5.3", "10-0-0-3.example.com", "hg"));
    StateRunner stateRunner = new StateRunner(targets, allNode, "example_state");
    SaltConnector saltConnector = Mockito.mock(SaltConnector.class);
    PowerMockito.mockStatic(SaltStates.class);
    String jobId = "1";
    ApplyResponse applyResponse = new ApplyResponse();
    List<Map<String, JsonNode>> result = new ArrayList<>();
    Map<String, JsonNode> nodes = new HashMap<>();
    ObjectMapper objectMapper = new ObjectMapper();
    nodes.put("jid", objectMapper.valueToTree(jobId));
    result.add(nodes);
    applyResponse.setResult(result);
    PowerMockito.when(SaltStates.applyState(any(), any(), any())).thenReturn(applyResponse);
    String jid = stateRunner.submit(saltConnector);
    assertEquals(jobId, jid);
    PowerMockito.verifyStatic(SaltStates.class);
    ArgumentCaptor acHostList = ArgumentCaptor.forClass(HostList.class);
    SaltStates.applyState(eq(saltConnector), eq("example_state"), (Target<String>) acHostList.capture());
    assertThat(acHostList.getValue(), IsInstanceOf.instanceOf(HostList.class));
    HostList hostList = (HostList) acHostList.getValue();
    assertEquals("10-0-0-1.example.com", hostList.getTarget());
}
Also used : ArgumentCaptor(org.mockito.ArgumentCaptor) HashMap(java.util.HashMap) JsonNode(com.fasterxml.jackson.databind.JsonNode) Node(com.sequenceiq.cloudbreak.common.orchestration.Node) ArrayList(java.util.ArrayList) JsonNode(com.fasterxml.jackson.databind.JsonNode) HostList(com.sequenceiq.cloudbreak.orchestrator.salt.client.target.HostList) SaltConnector(com.sequenceiq.cloudbreak.orchestrator.salt.client.SaltConnector) HashMap(java.util.HashMap) Map(java.util.Map) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) ApplyResponse(com.sequenceiq.cloudbreak.orchestrator.salt.domain.ApplyResponse) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Example 58 with Node

use of com.sequenceiq.cloudbreak.common.orchestration.Node in project cloudbreak by hortonworks.

the class PillarSaveTest method testDiscovery.

@Test
public void testDiscovery() throws Exception {
    SaltConnector saltConnector = mock(SaltConnector.class);
    GenericResponses responses = new GenericResponses();
    GenericResponse response = new GenericResponse();
    response.setStatusCode(HttpStatus.OK.value());
    response.setAddress("10.0.0.2");
    responses.setResponses(Collections.singletonList(response));
    when(saltConnector.pillar(any(), any(Pillar.class))).thenReturn(responses);
    Set<Node> nodes = new HashSet<>();
    nodes.add(new Node("10.0.0.1", "1.1.1.1", "i-1234", "m5.xlarge", "10-0-0-1.example.com", "hg"));
    nodes.add(new Node("10.0.0.2", "1.1.1.2", "i-1234", "m5.xlarge", "10-0-0-2.example.com", "hg"));
    nodes.add(new Node("10.0.0.3", "1.1.1.3", "i-1234", "m5.xlarge", "10-0-0-3.example.com", "hg"));
    PillarSave pillarSave = PillarSave.createHostsPillar(saltConnector, Sets.newHashSet("10.0.0.1"), nodes);
    pillarSave.call();
    ArgumentCaptor<Pillar> pillarCaptor = ArgumentCaptor.forClass(Pillar.class);
    ArgumentCaptor<Set<String>> targetCaptor = ArgumentCaptor.forClass(Set.class);
    verify(saltConnector).pillar(targetCaptor.capture(), pillarCaptor.capture());
    Pillar pillar = pillarCaptor.getValue();
    Map<String, Map<String, Map<String, Object>>> pillarJson = (Map<String, Map<String, Map<String, Object>>>) pillar.getJson();
    Map<String, Map<String, Object>> hostMap = pillarJson.entrySet().iterator().next().getValue();
    for (Node node : nodes) {
        Assert.assertEquals(node.getHostname(), hostMap.get(node.getPrivateIp()).get("fqdn"));
        Assert.assertEquals(node.getHostname().split("\\.")[0], hostMap.get(node.getPrivateIp()).get("hostname"));
        Assert.assertEquals(Boolean.TRUE, hostMap.get(node.getPrivateIp()).get("public_address"));
    }
}
Also used : Set(java.util.Set) HashSet(java.util.HashSet) GenericResponse(com.sequenceiq.cloudbreak.orchestrator.model.GenericResponse) Node(com.sequenceiq.cloudbreak.common.orchestration.Node) GenericResponses(com.sequenceiq.cloudbreak.orchestrator.model.GenericResponses) SaltConnector(com.sequenceiq.cloudbreak.orchestrator.salt.client.SaltConnector) Pillar(com.sequenceiq.cloudbreak.orchestrator.salt.domain.Pillar) Map(java.util.Map) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 59 with Node

use of com.sequenceiq.cloudbreak.common.orchestration.Node in project cloudbreak by hortonworks.

the class CloudStorageValidationService method validateCloudStorage.

public void validateCloudStorage(Long stackId) throws CloudbreakOrchestratorException {
    Stack stack = stackService.getByIdWithClusterInTransaction(stackId);
    String accountId = Crn.safeFromString(stack.getResourceCrn()).getAccountId();
    if (!entitlementService.cloudStorageValidationOnVmEnabled(accountId)) {
        LOGGER.info("Cloud storage validation on VM entitlement is missing, not validating cloud storage on VM.");
        return;
    }
    DetailedEnvironmentResponse environment = environmentClientService.getByCrn(stack.getEnvironmentCrn());
    if (environment.isCloudStorageLoggingEnabled()) {
        ExitCriteriaModel exitCriteriaModel = new ClusterDeletionBasedExitCriteriaModel(stack.getId(), stack.getCluster().getId());
        List<GatewayConfig> allGateways = gatewayConfigService.getAllGatewayConfigs(stack);
        Set<Node> allNodes = stackUtil.collectNodes(stack);
        runIdBrokerValidation(stack, allGateways, allNodes, environment, exitCriteriaModel);
        runRandomHostValidation(stack, allGateways, allNodes, environment, exitCriteriaModel);
    }
}
Also used : ExitCriteriaModel(com.sequenceiq.cloudbreak.orchestrator.state.ExitCriteriaModel) ClusterDeletionBasedExitCriteriaModel(com.sequenceiq.cloudbreak.core.bootstrap.service.ClusterDeletionBasedExitCriteriaModel) Node(com.sequenceiq.cloudbreak.common.orchestration.Node) DetailedEnvironmentResponse(com.sequenceiq.environment.api.v1.environment.model.response.DetailedEnvironmentResponse) ClusterDeletionBasedExitCriteriaModel(com.sequenceiq.cloudbreak.core.bootstrap.service.ClusterDeletionBasedExitCriteriaModel) Stack(com.sequenceiq.cloudbreak.domain.stack.Stack) GatewayConfig(com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig)

Example 60 with Node

use of com.sequenceiq.cloudbreak.common.orchestration.Node in project cloudbreak by hortonworks.

the class StackUtil method collectNewNodesWithDiskData.

public Set<Node> collectNewNodesWithDiskData(Stack stack, Set<String> newNodeAddresses) {
    Set<Node> agents = new HashSet<>();
    List<Resource> volumeSets = stack.getDiskResources();
    Map<String, Map<String, Object>> instanceToVolumeInfoMap = createInstanceToVolumeInfoMap(volumeSets);
    for (InstanceGroup instanceGroup : stack.getInstanceGroups()) {
        if (instanceGroup.getNodeCount() != 0) {
            for (InstanceMetaData im : instanceGroup.getNotDeletedAndNotZombieInstanceMetaDataSet()) {
                if (im.getDiscoveryFQDN() != null && (newNodeAddresses.isEmpty() || newNodeAddresses.contains(im.getPrivateIp()))) {
                    String instanceId = im.getInstanceId();
                    String instanceType = instanceGroup.getTemplate().getInstanceType();
                    String dataVolumes = getOrDefault(instanceToVolumeInfoMap, instanceId, "dataVolumes", "");
                    String serialIds = getOrDefault(instanceToVolumeInfoMap, instanceId, "serialIds", "");
                    String fstab = getOrDefault(instanceToVolumeInfoMap, instanceId, "fstab", "");
                    String uuids = getOrDefault(instanceToVolumeInfoMap, instanceId, "uuids", "");
                    Integer databaseVolumeIndex = getOrDefault(instanceToVolumeInfoMap, instanceId, "dataBaseVolumeIndex", -1);
                    TemporaryStorage temporaryStorage = Optional.ofNullable(instanceGroup.getTemplate().getTemporaryStorage()).orElse(TemporaryStorage.ATTACHED_VOLUMES);
                    NodeVolumes nodeVolumes = new NodeVolumes(databaseVolumeIndex, dataVolumes, serialIds, fstab, uuids);
                    agents.add(new Node(im.getPrivateIp(), im.getPublicIp(), instanceId, instanceType, im.getDiscoveryFQDN(), im.getInstanceGroupName(), nodeVolumes, temporaryStorage));
                }
            }
        }
    }
    return agents;
}
Also used : Node(com.sequenceiq.cloudbreak.common.orchestration.Node) Resource(com.sequenceiq.cloudbreak.domain.Resource) InstanceGroup(com.sequenceiq.cloudbreak.domain.stack.instance.InstanceGroup) InstanceMetaData(com.sequenceiq.cloudbreak.domain.stack.instance.InstanceMetaData) NodeVolumes(com.sequenceiq.cloudbreak.common.orchestration.NodeVolumes) TemporaryStorage(com.sequenceiq.cloudbreak.common.type.TemporaryStorage) Map(java.util.Map) HashSet(java.util.HashSet)

Aggregations

Node (com.sequenceiq.cloudbreak.common.orchestration.Node)126 GatewayConfig (com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig)57 HashSet (java.util.HashSet)42 Map (java.util.Map)32 JsonNode (com.fasterxml.jackson.databind.JsonNode)30 CloudbreakOrchestratorFailedException (com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorFailedException)29 Test (org.junit.Test)29 HashMap (java.util.HashMap)28 Stack (com.sequenceiq.cloudbreak.domain.stack.Stack)27 CloudbreakOrchestratorException (com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorException)26 ArrayList (java.util.ArrayList)26 InstanceMetaData (com.sequenceiq.cloudbreak.domain.stack.instance.InstanceMetaData)25 ExitCriteriaModel (com.sequenceiq.cloudbreak.orchestrator.state.ExitCriteriaModel)25 Set (java.util.Set)25 Test (org.junit.jupiter.api.Test)25 List (java.util.List)22 CloudbreakServiceException (com.sequenceiq.cloudbreak.common.exception.CloudbreakServiceException)21 IOException (java.io.IOException)21 Collectors (java.util.stream.Collectors)21 BootstrapParams (com.sequenceiq.cloudbreak.orchestrator.model.BootstrapParams)19