Search in sources :

Example 46 with Node

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

the class UpgradeCcmOrchestratorService method createStateParams.

private OrchestratorStateParams createStateParams(Long stackId, String saltState) {
    Stack stack = stackService.getByIdWithListsInTransaction(stackId);
    Set<InstanceMetaData> instanceMetaDatas = stack.getNotDeletedInstanceMetaDataSet();
    Set<Node> allNodes = freeIpaNodeUtilService.mapInstancesToNodes(instanceMetaDatas);
    OrchestratorStateParams stateParams = new OrchestratorStateParams();
    stateParams.setState(saltState);
    stateParams.setPrimaryGatewayConfig(gatewayConfigService.getPrimaryGatewayConfig(stack));
    stateParams.setTargetHostNames(allNodes.stream().map(Node::getHostname).collect(Collectors.toSet()));
    stateParams.setAllNodes(allNodes);
    stateParams.setExitCriteriaModel(new StackBasedExitCriteriaModel(stack.getId()));
    return stateParams;
}
Also used : InstanceMetaData(com.sequenceiq.freeipa.entity.InstanceMetaData) Node(com.sequenceiq.cloudbreak.common.orchestration.Node) StackBasedExitCriteriaModel(com.sequenceiq.freeipa.orchestrator.StackBasedExitCriteriaModel) OrchestratorStateParams(com.sequenceiq.cloudbreak.orchestrator.host.OrchestratorStateParams) Stack(com.sequenceiq.freeipa.entity.Stack)

Example 47 with Node

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

the class SaltOrchestratorTest method testStopClusterManagerAgent.

@Test
public void testStopClusterManagerAgent() throws Exception {
    Set<Node> downscaleTargets = new HashSet<>();
    downscaleTargets.add(new Node("10.0.0.2", "1.1.1.2", "10-0-0-2.example.com", "hg", "fqdn2", null));
    downscaleTargets.add(new Node("10.0.0.3", "1.1.1.3", "10-0-0-3.example.com", "hg", "fqdn3", null));
    PowerMockito.mockStatic(SaltStates.class);
    Set<String> responsiveAddresses = new HashSet<>();
    responsiveAddresses.add("10.0.0.1");
    responsiveAddresses.add("10.0.0.2");
    responsiveAddresses.add("10.0.0.3");
    PowerMockito.when(SaltStates.collectMinionIpAddresses(any(), any())).thenReturn(responsiveAddresses);
    Set<OrchestrationNode> allNodes = new HashSet<>();
    allNodes.add(() -> new Node("10.0.0.1", "1.1.1.1", "10-0-0-1.example.com", "hg", "fqdn3", null));
    allNodes.addAll(downscaleTargets.stream().map(node -> (OrchestrationNode) () -> node).collect(Collectors.toSet()));
    Callable pillarSaveCallable = mock(Callable.class);
    when(saltRunner.runner(any(), any(), any())).thenReturn(pillarSaveCallable);
    when(saltRunner.runner(any(), any(), any(), anyInt(), anyBoolean())).thenReturn(mock(Callable.class));
    saltOrchestrator.stopClusterManagerAgent(() -> allNodes, gatewayConfig, targets, downscaleTargets, exitCriteriaModel, new CmAgentStopFlags(false, false, false));
    ArgumentCaptor<ModifyGrainBase> modifyGrainBaseArgumentCaptor = ArgumentCaptor.forClass(ModifyGrainBase.class);
    ArgumentCaptor<PillarSave> pillarSaveArgumentCaptor = ArgumentCaptor.forClass(PillarSave.class);
    verify(pillarSaveCallable, times(1)).call();
    InOrder inOrder = inOrder(saltCommandRunner, saltRunner);
    inOrder.verify(saltCommandRunner).runModifyGrainCommand(any(), modifyGrainBaseArgumentCaptor.capture(), any(), any());
    ModifyGrainBase modifyGrainBase = modifyGrainBaseArgumentCaptor.getValue();
    assertThat(modifyGrainBase, instanceOf(GrainAddRunner.class));
    assertEquals("roles", modifyGrainBase.getKey());
    assertEquals("cloudera_manager_agent_stop", modifyGrainBase.getValue());
    inOrder.verify(saltRunner).runner(pillarSaveArgumentCaptor.capture(), any(), any());
    PillarSave capturedPillarSave = pillarSaveArgumentCaptor.getValue();
    ArgumentCaptor<SaltJobIdTracker> saltJobIdCaptor = ArgumentCaptor.forClass(SaltJobIdTracker.class);
    inOrder.verify(saltRunner).runner(saltJobIdCaptor.capture(), any(), any(), anyInt(), anyBoolean());
    inOrder.verify(saltCommandRunner).runModifyGrainCommand(any(), modifyGrainBaseArgumentCaptor.capture(), any(), any());
    inOrder.verifyNoMoreInteractions();
    modifyGrainBase = modifyGrainBaseArgumentCaptor.getValue();
    assertThat(modifyGrainBase, instanceOf(GrainRemoveRunner.class));
    assertEquals("roles", modifyGrainBase.getKey());
    assertEquals("cloudera_manager_agent_stop", modifyGrainBase.getValue());
    Set<String> targets = Whitebox.getInternalState(capturedPillarSave, "targets");
    assertTrue(targets.contains("10.0.0.1"));
    Pillar pillar = Whitebox.getInternalState(capturedPillarSave, "pillar");
    Map<String, Map> hosts = (Map) ((Map) pillar.getJson()).get("hosts");
    assertTrue(hosts.keySet().contains("10.0.0.1"));
    assertTrue(hosts.keySet().contains("10.0.0.2"));
    assertTrue(hosts.keySet().contains("10.0.0.3"));
}
Also used : InOrder(org.mockito.InOrder) 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) GrainAddRunner(com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.GrainAddRunner) OrchestrationNode(com.sequenceiq.cloudbreak.common.orchestration.OrchestrationNode) Callable(java.util.concurrent.Callable) ModifyGrainBase(com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.ModifyGrainBase) CmAgentStopFlags(com.sequenceiq.cloudbreak.orchestrator.model.CmAgentStopFlags) GrainRemoveRunner(com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.GrainRemoveRunner) Pillar(com.sequenceiq.cloudbreak.orchestrator.salt.domain.Pillar) Map(java.util.Map) HashMap(java.util.HashMap) HashSet(java.util.HashSet) PillarSave(com.sequenceiq.cloudbreak.orchestrator.salt.poller.PillarSave) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Example 48 with Node

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

the class SaltOrchestratorTest method testExistingIsPrimaryReplacement.

@Test
public void testExistingIsPrimaryReplacement() throws Exception {
    ObjectMapper mapper = new ObjectMapper();
    GatewayConfig replica1 = mock(GatewayConfig.class);
    GatewayConfig replica2 = mock(GatewayConfig.class);
    Node replicaNode1 = mock(Node.class);
    Node replicaNode2 = mock(Node.class);
    when(replica1.getHostname()).thenReturn("replica1.domain");
    when(replica2.getHostname()).thenReturn("replica2.domain");
    when(replicaNode1.getHostname()).thenReturn("replica1.domain");
    when(replicaNode2.getHostname()).thenReturn("replica2.domain");
    PowerMockito.mockStatic(SaltStates.class);
    HostAndRoleTarget replicaTarget = new HostAndRoleTarget("freeipa_replica", Set.of("replica1.domain", "replica2.domain"));
    ArrayNode replicaRole = mapper.createArrayNode();
    replicaRole.add("freeipa_replica");
    PowerMockito.when(SaltStates.getGrains(eq(saltConnector), eq(replicaTarget), eq("roles"))).thenReturn(Map.of("replica1.domain", replicaRole, "replica2.domain", replicaRole));
    saltOrchestrator.installFreeIpa(replica1, List.of(replica1, replica2), Set.of(replicaNode1, replicaNode2), exitCriteriaModel);
    ArgumentCaptor<ModifyGrainBase> modifyGrainCaptor = ArgumentCaptor.forClass(ModifyGrainBase.class);
    verify(saltCommandRunner, times(2)).runModifyGrainCommand(eq(saltConnector), modifyGrainCaptor.capture(), eq(exitCriteriaModel), eq(exitCriteria));
    List<ModifyGrainBase> modifyGrains = modifyGrainCaptor.getAllValues();
    GrainAddRunner addReplacementRole = (GrainAddRunner) modifyGrains.get(0);
    assertEquals("freeipa_primary_replacement", addReplacementRole.getValue());
    assertEquals(Set.of("replica1.domain"), addReplacementRole.getTargetHostnames());
    GrainRemoveRunner removeReplicaRole = (GrainRemoveRunner) modifyGrains.get(1);
    assertEquals("freeipa_replica", removeReplicaRole.getValue());
    assertEquals(Set.of("replica1.domain"), removeReplicaRole.getTargetHostnames());
    ArgumentCaptor<SaltJobIdTracker> saltJobIdTrackerCaptor = ArgumentCaptor.forClass(SaltJobIdTracker.class);
    verify(saltRunner, times(3)).runner(saltJobIdTrackerCaptor.capture(), eq(exitCriteria), eq(exitCriteriaModel), anyInt(), anyBoolean());
    List<SaltJobIdTracker> saltJobIdTrackers = saltJobIdTrackerCaptor.getAllValues();
    HighStateRunner highStateRunner = (HighStateRunner) saltJobIdTrackers.get(0).getSaltJobRunner();
    assertTrue(highStateRunner.getTargetHostnames().contains("replica1.domain") || highStateRunner.getTargetHostnames().contains("replica2.domain"));
    assertEquals(1, highStateRunner.getTargetHostnames().size());
    HighStateRunner highStateRunner2 = (HighStateRunner) saltJobIdTrackers.get(1).getSaltJobRunner();
    assertTrue(highStateRunner2.getTargetHostnames().contains("replica2.domain") || highStateRunner2.getTargetHostnames().contains("replica1.domain"));
    assertEquals(1, highStateRunner2.getTargetHostnames().size());
    assertFalse(highStateRunner.getTargetHostnames().containsAll(highStateRunner2.getTargetHostnames()));
    HighStateRunner highStateRunner3 = (HighStateRunner) saltJobIdTrackers.get(2).getSaltJobRunner();
    assertTrue(highStateRunner3.getTargetHostnames().contains("replica1.domain"));
    assertEquals(1, highStateRunner3.getTargetHostnames().size());
}
Also used : HighStateRunner(com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.HighStateRunner) 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) GrainAddRunner(com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.GrainAddRunner) ModifyGrainBase(com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.ModifyGrainBase) GrainRemoveRunner(com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.GrainRemoveRunner) HostAndRoleTarget(com.sequenceiq.cloudbreak.orchestrator.salt.client.target.HostAndRoleTarget) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) GatewayConfig(com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Example 49 with Node

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

the class SaltOrchestratorTest method testNewInstanceIsPrimaryReplacement.

@Test
public void testNewInstanceIsPrimaryReplacement() throws Exception {
    ObjectMapper mapper = new ObjectMapper();
    GatewayConfig newInstance = mock(GatewayConfig.class);
    GatewayConfig replica2 = mock(GatewayConfig.class);
    Node newInstanceNode = mock(Node.class);
    Node replicaNode2 = mock(Node.class);
    when(newInstance.getHostname()).thenReturn("newInstance.domain");
    when(replica2.getHostname()).thenReturn("replica2.domain");
    when(newInstanceNode.getHostname()).thenReturn("newInstance.domain");
    when(replicaNode2.getHostname()).thenReturn("replica2.domain");
    PowerMockito.mockStatic(SaltStates.class);
    HostAndRoleTarget replicaTarget = new HostAndRoleTarget("freeipa_replica", Set.of("newInstance.domain", "replica2.domain"));
    ArrayNode replicaRole = mapper.createArrayNode();
    replicaRole.add("freeipa_replica");
    PowerMockito.when(SaltStates.getGrains(eq(saltConnector), eq(replicaTarget), eq("roles"))).thenReturn(Map.of("replica2.domain", replicaRole));
    saltOrchestrator.installFreeIpa(newInstance, List.of(newInstance, replica2), Set.of(newInstanceNode, replicaNode2), exitCriteriaModel);
    ArgumentCaptor<ModifyGrainBase> modifyGrainCaptor = ArgumentCaptor.forClass(ModifyGrainBase.class);
    verify(saltCommandRunner, times(2)).runModifyGrainCommand(eq(saltConnector), modifyGrainCaptor.capture(), eq(exitCriteriaModel), eq(exitCriteria));
    List<ModifyGrainBase> modifyGrains = modifyGrainCaptor.getAllValues();
    GrainAddRunner addReplacementRole = (GrainAddRunner) modifyGrains.get(0);
    assertEquals("freeipa_primary_replacement", addReplacementRole.getValue());
    assertEquals(Set.of("newInstance.domain"), addReplacementRole.getTargetHostnames());
    GrainRemoveRunner removeReplicaRole = (GrainRemoveRunner) modifyGrains.get(1);
    assertEquals("freeipa_replica", removeReplicaRole.getValue());
    assertEquals(Set.of("newInstance.domain"), removeReplicaRole.getTargetHostnames());
    ArgumentCaptor<SaltJobIdTracker> saltJobIdTrackerCaptor = ArgumentCaptor.forClass(SaltJobIdTracker.class);
    verify(saltRunner, times(2)).runner(saltJobIdTrackerCaptor.capture(), eq(exitCriteria), eq(exitCriteriaModel), anyInt(), anyBoolean());
    List<SaltJobIdTracker> saltJobIdTrackers = saltJobIdTrackerCaptor.getAllValues();
    HighStateRunner highStateRunner = (HighStateRunner) saltJobIdTrackers.get(0).getSaltJobRunner();
    assertTrue(highStateRunner.getTargetHostnames().contains("replica2.domain"));
    assertEquals(1, highStateRunner.getTargetHostnames().size());
    HighStateRunner highStateRunner2 = (HighStateRunner) saltJobIdTrackers.get(1).getSaltJobRunner();
    assertTrue(highStateRunner2.getTargetHostnames().contains("newInstance.domain"));
    assertEquals(1, highStateRunner2.getTargetHostnames().size());
}
Also used : HighStateRunner(com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.HighStateRunner) 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) GrainAddRunner(com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.GrainAddRunner) ModifyGrainBase(com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.ModifyGrainBase) GrainRemoveRunner(com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.GrainRemoveRunner) HostAndRoleTarget(com.sequenceiq.cloudbreak.orchestrator.salt.client.target.HostAndRoleTarget) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) GatewayConfig(com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Example 50 with Node

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

the class SaltOrchestratorTest method testInstallFreeIpaHaRepairTwoInstance.

@Test
public void testInstallFreeIpaHaRepairTwoInstance() throws Exception {
    GatewayConfig primaryGateway = mock(GatewayConfig.class);
    GatewayConfig newReplica1Config = mock(GatewayConfig.class);
    GatewayConfig newReplica2Config = mock(GatewayConfig.class);
    Node primaryNode = mock(Node.class);
    Node newReplica1Node = mock(Node.class);
    Node newReplica2Node = mock(Node.class);
    Callable<Boolean> callable = mock(Callable.class);
    when(primaryNode.getHostname()).thenReturn("primary.example.com");
    when(newReplica1Node.getHostname()).thenReturn("new_replica1.example.com");
    when(newReplica2Node.getHostname()).thenReturn("new_replica2.example.com");
    when(primaryGateway.getHostname()).thenReturn("primary.example.com");
    when(newReplica1Config.getHostname()).thenReturn("new_replica1.example.com");
    when(newReplica2Config.getHostname()).thenReturn("new_replica2.example.com");
    PowerMockito.mockStatic(SaltStates.class);
    PowerMockito.when(SaltStates.getGrains(any(), any(), any())).thenReturn(Map.of("primary.example.com", mock(JsonNode.class))).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, newReplica1Config, newReplica2Config), Set.of(primaryNode, newReplica1Node, newReplica2Node), 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("new_replica1.example.com", "new_replica2.example.com"), jobIdTrackers.get(1).getSaltJobRunner().getTargetHostnames());
    PowerMockito.verifyStatic(SaltStates.class, times(3));
    ArgumentCaptor<Target<String>> targetArgumentCaptor = ArgumentCaptor.forClass(Target.class);
    SaltStates.getGrains(any(), targetArgumentCaptor.capture(), any());
    List<Target<String>> targets = targetArgumentCaptor.getAllValues();
    String target1 = targets.get(0).getTarget();
    assertTrue(target1.contains("primary.example.com"));
    assertTrue(target1.contains("new_replica1.example.com"));
    assertTrue(target1.contains("new_replica2.example.com"));
    String target2 = targets.get(1).getTarget();
    assertTrue(target2.contains("primary.example.com"));
    assertTrue(target2.contains("new_replica1.example.com"));
    assertTrue(target2.contains("new_replica2.example.com"));
    String target3 = targets.get(2).getTarget();
    assertTrue(target3.startsWith("G@roles:freeipa_replica and L@"));
    assertTrue(target3.contains("primary.example.com"));
    assertTrue(target3.contains("new_replica1.example.com"));
    assertTrue(target3.contains("new_replica2.example.com"));
}
Also used : ExitCriteriaModel(com.sequenceiq.cloudbreak.orchestrator.state.ExitCriteriaModel) OrchestratorBootstrap(com.sequenceiq.cloudbreak.orchestrator.OrchestratorBootstrap) 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) Target(com.sequenceiq.cloudbreak.orchestrator.salt.client.target.Target) HostAndRoleTarget(com.sequenceiq.cloudbreak.orchestrator.salt.client.target.HostAndRoleTarget) ExitCriteria(com.sequenceiq.cloudbreak.orchestrator.state.ExitCriteria) ArgumentMatchers.anyBoolean(org.mockito.ArgumentMatchers.anyBoolean) GatewayConfig(com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig) 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