Search in sources :

Example 51 with Node

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

the class SaltOrchestratorTest method testInstallFreeIpa.

@Test
public void testInstallFreeIpa() throws Exception {
    GatewayConfig primaryGateway = mock(GatewayConfig.class);
    Node primaryNode = mock(Node.class);
    Callable<Boolean> callable = mock(Callable.class);
    when(primaryNode.getHostname()).thenReturn("primary.example.com");
    when(primaryGateway.getHostname()).thenReturn("primary.example.com");
    PowerMockito.mockStatic(SaltStates.class);
    PowerMockito.when(SaltStates.getGrains(any(), any(), any())).thenReturn(Map.of()).thenReturn(Map.of()).thenReturn(Map.of());
    when(saltRunner.runner(any(OrchestratorBootstrap.class), any(ExitCriteria.class), any(ExitCriteriaModel.class))).thenReturn(callable);
    ArgumentCaptor<SaltJobIdTracker> saltJobIdTrackerArgumentCaptor = ArgumentCaptor.forClass(SaltJobIdTracker.class);
    saltOrchestrator.installFreeIpa(primaryGateway, List.of(primaryGateway), Set.of(primaryNode), exitCriteriaModel);
    verify(saltRunner, times(1)).runner(saltJobIdTrackerArgumentCaptor.capture(), any(), any(), anyInt(), anyBoolean());
    List<SaltJobIdTracker> jobIdTrackers = saltJobIdTrackerArgumentCaptor.getAllValues();
    assertEquals(Set.of("primary.example.com"), jobIdTrackers.get(0).getSaltJobRunner().getTargetHostnames());
}
Also used : ExitCriteriaModel(com.sequenceiq.cloudbreak.orchestrator.state.ExitCriteriaModel) OrchestratorBootstrap(com.sequenceiq.cloudbreak.orchestrator.OrchestratorBootstrap) ExitCriteria(com.sequenceiq.cloudbreak.orchestrator.state.ExitCriteria) JsonNode(com.fasterxml.jackson.databind.JsonNode) OrchestrationNode(com.sequenceiq.cloudbreak.common.orchestration.OrchestrationNode) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) Node(com.sequenceiq.cloudbreak.common.orchestration.Node) SaltJobIdTracker(com.sequenceiq.cloudbreak.orchestrator.salt.poller.SaltJobIdTracker) ArgumentMatchers.anyBoolean(org.mockito.ArgumentMatchers.anyBoolean) GatewayConfig(com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Example 52 with Node

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

the class SaltOrchestratorTest method testInstallFreeIpaHa.

@Test
public void testInstallFreeIpaHa() throws Exception {
    GatewayConfig primaryGateway = mock(GatewayConfig.class);
    GatewayConfig replica1Config = mock(GatewayConfig.class);
    GatewayConfig replica2Config = mock(GatewayConfig.class);
    Node primaryNode = mock(Node.class);
    Node replica1Node = mock(Node.class);
    Node replica2Node = mock(Node.class);
    Callable<Boolean> callable = mock(Callable.class);
    when(primaryNode.getHostname()).thenReturn("primary.example.com");
    when(replica1Node.getHostname()).thenReturn("replica1.example.com");
    when(replica2Node.getHostname()).thenReturn("replica2.example.com");
    when(primaryGateway.getHostname()).thenReturn("primary.example.com");
    when(replica1Config.getHostname()).thenReturn("replica1.example.com");
    when(replica2Config.getHostname()).thenReturn("replica2.example.com");
    PowerMockito.mockStatic(SaltStates.class);
    PowerMockito.when(SaltStates.getGrains(any(), any(), any())).thenReturn(Map.of()).thenReturn(Map.of()).thenReturn(Map.of());
    when(saltRunner.runner(any(OrchestratorBootstrap.class), any(ExitCriteria.class), any(ExitCriteriaModel.class))).thenReturn(callable);
    ArgumentCaptor<SaltJobIdTracker> saltJobIdTrackerArgumentCaptor = ArgumentCaptor.forClass(SaltJobIdTracker.class);
    saltOrchestrator.installFreeIpa(primaryGateway, List.of(primaryGateway, replica1Config, replica2Config), Set.of(primaryNode, replica1Node, replica2Node), exitCriteriaModel);
    verify(saltRunner, times(2)).runner(saltJobIdTrackerArgumentCaptor.capture(), any(), any(), anyInt(), anyBoolean());
    List<SaltJobIdTracker> jobIdTrackers = saltJobIdTrackerArgumentCaptor.getAllValues();
    assertEquals(Set.of("primary.example.com"), jobIdTrackers.get(0).getSaltJobRunner().getTargetHostnames());
    assertEquals(Set.of("replica1.example.com", "replica2.example.com"), jobIdTrackers.get(1).getSaltJobRunner().getTargetHostnames());
}
Also used : ExitCriteriaModel(com.sequenceiq.cloudbreak.orchestrator.state.ExitCriteriaModel) OrchestratorBootstrap(com.sequenceiq.cloudbreak.orchestrator.OrchestratorBootstrap) ExitCriteria(com.sequenceiq.cloudbreak.orchestrator.state.ExitCriteria) JsonNode(com.fasterxml.jackson.databind.JsonNode) OrchestrationNode(com.sequenceiq.cloudbreak.common.orchestration.OrchestrationNode) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) Node(com.sequenceiq.cloudbreak.common.orchestration.Node) SaltJobIdTracker(com.sequenceiq.cloudbreak.orchestrator.salt.poller.SaltJobIdTracker) ArgumentMatchers.anyBoolean(org.mockito.ArgumentMatchers.anyBoolean) GatewayConfig(com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Example 53 with Node

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

the class SaltBootstrapTest method callFailTest.

@Test
public void callFailTest() throws IOException {
    List<Map<String, JsonNode>> result = new ArrayList<>();
    Map<String, JsonNode> ipAddressesForMinions = new HashMap<>();
    ipAddressesForMinions.put("10-0-0-1.example.com", JsonUtil.readTree("[\"10.0.0.1\"]"));
    ipAddressesForMinions.put("10-0-0-2.example.com", JsonUtil.readTree("[\"10.0.0.2\"]"));
    result.add(ipAddressesForMinions);
    minionIpAddressesResponse.setResult(result);
    Set<Node> targets = new HashSet<>();
    targets.add(new Node("10.0.0.1", null, null, "hg"));
    targets.add(new Node("10.0.0.2", null, null, "hg"));
    String missingNodeIp = "10.0.0.3";
    targets.add(new Node(missingNodeIp, null, null, "hg"));
    SaltBootstrap saltBootstrap = new SaltBootstrap(saltConnector, List.of(saltConnector), Collections.singletonList(gatewayConfig), targets, new BootstrapParams());
    saltBootstrap = spy(saltBootstrap);
    doReturn(mock(MinionAcceptor.class)).when(saltBootstrap).createMinionAcceptor();
    try {
        saltBootstrap.call();
        fail("should throw exception");
    } catch (Exception e) {
        assertEquals(CloudbreakOrchestratorFailedException.class.getSimpleName(), e.getClass().getSimpleName());
        assertThat(e.getMessage(), containsString("10.0.0.3"));
        assertThat(e.getMessage(), not(containsString("10.0.0.2")));
        assertThat(e.getMessage(), not(containsString("10.0.0.1")));
    }
}
Also used : 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) StringContains.containsString(org.hamcrest.core.StringContains.containsString) IOException(java.io.IOException) CloudbreakOrchestratorFailedException(com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorFailedException) BootstrapParams(com.sequenceiq.cloudbreak.orchestrator.model.BootstrapParams) HashMap(java.util.HashMap) Map(java.util.Map) HashSet(java.util.HashSet) MinionAcceptor(com.sequenceiq.cloudbreak.orchestrator.salt.poller.join.MinionAcceptor) Test(org.junit.Test)

Example 54 with Node

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

the class SaltBootstrapTest method callTest.

@Test
public void callTest() throws Exception {
    List<Map<String, JsonNode>> result = new ArrayList<>();
    Map<String, JsonNode> ipAddressesForMinions = new HashMap<>();
    ipAddressesForMinions.put("10-0-0-1.example.com", JsonUtil.readTree("[\"10.0.0.1\"]"));
    ipAddressesForMinions.put("10-0-0-2.example.com", JsonUtil.readTree("[\"10.0.0.2\"]"));
    ipAddressesForMinions.put("10-0-0-3.example.com", JsonUtil.readTree("[\"10.0.0.3\"]"));
    result.add(ipAddressesForMinions);
    minionIpAddressesResponse.setResult(result);
    Set<Node> targets = new HashSet<>();
    targets.add(new Node("10.0.0.1", null, null, "hg"));
    targets.add(new Node("10.0.0.2", null, null, "hg"));
    targets.add(new Node("10.0.0.3", null, null, "hg"));
    SaltBootstrap saltBootstrap = new SaltBootstrap(saltConnector, List.of(saltConnector), Collections.singletonList(gatewayConfig), targets, new BootstrapParams());
    saltBootstrap = spy(saltBootstrap);
    doReturn(mock(MinionAcceptor.class)).when(saltBootstrap).createMinionAcceptor();
    saltBootstrap.call();
}
Also used : 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) StringContains.containsString(org.hamcrest.core.StringContains.containsString) BootstrapParams(com.sequenceiq.cloudbreak.orchestrator.model.BootstrapParams) HashMap(java.util.HashMap) Map(java.util.Map) HashSet(java.util.HashSet) MinionAcceptor(com.sequenceiq.cloudbreak.orchestrator.salt.poller.join.MinionAcceptor) Test(org.junit.Test)

Example 55 with Node

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

the class GrainAddRunnerTest method submitTest.

@Test
public void submitTest() throws SaltJobFailedException {
    Set<String> targets = new HashSet<>();
    targets.add("10-0-0-1.example.com");
    targets.add("10-0-0-2.example.com");
    targets.add("10-0-0-3.example.com");
    Set<Node> allNode = new HashSet<>();
    allNode.add(new Node("10.0.0.1", "5.5.5.1", "i-1234", "m5.xlarge", "10-0-0-1.example.com", "hg"));
    allNode.add(new Node("10.0.0.2", "5.5.5.2", "i-1234", "m5.xlarge", "10-0-0-2.example.com", "hg"));
    allNode.add(new Node("10.0.0.3", "5.5.5.3", "i-1234", "m5.xlarge", "10-0-0-3.example.com", "hg"));
    PowerMockito.mockStatic(SaltStates.class);
    ApplyResponse applyResponse = new ApplyResponse();
    List<Map<String, JsonNode>> result = new ArrayList<>();
    Map<String, JsonNode> nodes = new HashMap<>();
    ObjectMapper objectMapper = new ObjectMapper();
    String[] grains = { "ambari_server" };
    nodes.put("10-0-0-1.example.com", objectMapper.valueToTree(grains));
    nodes.put("10-0-0-2.example.com", objectMapper.valueToTree(grains));
    nodes.put("10-0-0-3.example.com", objectMapper.valueToTree(grains));
    result.add(nodes);
    applyResponse.setResult(result);
    PowerMockito.when(SaltStates.addGrain(any(), any(), anyString(), any())).thenReturn(applyResponse);
    PowerMockito.when(SaltStates.getGrains(any(), any(), any())).thenReturn(nodes);
    GrainAddRunner addRoleChecker = new GrainAddRunner(targets, allNode, "ambari_server");
    SaltConnector saltConnector = Mockito.mock(SaltConnector.class);
    String missingIps = addRoleChecker.submit(saltConnector);
    assertThat(addRoleChecker.getTargetHostnames(), empty());
    assertEquals(missingIps, "[]");
}
Also used : 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) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) SaltConnector(com.sequenceiq.cloudbreak.orchestrator.salt.client.SaltConnector) HashMap(java.util.HashMap) Map(java.util.Map) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) HashSet(java.util.HashSet) ApplyResponse(com.sequenceiq.cloudbreak.orchestrator.salt.domain.ApplyResponse) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

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