ClusterCommands implements CommandMarker { @CliCommand(value = "cluster assign", help = "Assign host to host group") public String assign( @CliOption(key = "host", mandatory = true, help = "Fully qualified host name") Host host, @CliOption(key = "hostGroup", mandatory = true, help = "Host group which to assign the host") String group) { String message; String hostName = host.getName(); if (client.getHostNames().keySet().contains(hostName)) { if (addHostToGroup(hostName, group)) { context.setHint(Hints.CREATE_CLUSTER); message = String.format("%s has been added to %s", hostName, group); } else { message = String.format("%s is not a valid host group", group); } } else { message = String.format("%s is not a valid hostname", hostName); } return message; } @Autowired  ClusterCommands(AmbariClient client, AmbariContext context, FlashService flashService); @CliAvailabilityIndicator("cluster build") boolean isClusterBuildCommandAvailable(); @CliCommand(value = "cluster build", help = "Starts to build a cluster") String buildCluster(
    @CliOption(key = "blueprint", mandatory = true, help = "Id of the blueprint, use 'blueprints' command to see the list") Blueprint id); @CliAvailabilityIndicator("cluster assign") boolean isAssignCommandAvailable(); @CliCommand(value = "cluster assign", help = "Assign host to host group") String assign(
    @CliOption(key = "host", mandatory = true, help = "Fully qualified host name") Host host,
    @CliOption(key = "hostGroup", mandatory = true, help = "Host group which to assign the host") String group); @CliAvailabilityIndicator(value = "cluster autoAssign") boolean isClusterAutoAssignAvailable(); @CliCommand(value = "cluster autoAssign", help = "Automatically assigns hosts to different host groups base on the provided strategy") String autoAssign(); @CliAvailabilityIndicator("cluster preview") boolean isClusterPreviewCommandAvailable(); @CliCommand(value = "cluster preview", help = "Shows the currently assigned hosts") String showAssignments(); @CliAvailabilityIndicator("cluster create") boolean isCreateClusterCommandAvailable(); @CliCommand(value = "cluster create", help = "Create a cluster based on current blueprint and assigned hosts") String createCluster(
    @CliOption(key = "exitOnFinish", mandatory = false, help = "Quits the shell when the cluster creation finishes") Boolean exit); @CliAvailabilityIndicator("cluster delete") boolean isDeleteClusterCommandAvailable(); @CliCommand(value = "cluster delete", help = "Delete the cluster") String deleteCluster(); @CliAvailabilityIndicator(value = "cluster reset") boolean isClusterResetCommandAvailable(); @CliCommand(value = "cluster reset", help = "Clears the host - host group assignments") void reset();  }
@Test public void testAssignForInvalidHostGroup() { Map<String, List<String>> map = singletonMap("group1", asList("host", "host2")); ReflectionTestUtils.setField(clusterCommands, "hostGroups", map); when(client.getHostNames()).thenReturn(singletonMap("host3", "HEALTHY")); String result = clusterCommands.assign(new Host("host3"), "group0"); assertEquals("group0 is not a valid host group", result); }
@Test public void testAssignForValidHostGroup() { Map<String, List<String>> map = new HashMap<String, List<String>>(); map.put("group1", new ArrayList<String>()); ReflectionTestUtils.setField(clusterCommands, "hostGroups", map); when(client.getHostNames()).thenReturn(singletonMap("host3", "HEALTHY")); String result = clusterCommands.assign(new Host("host3"), "group1"); assertEquals("host3 has been added to group1", result); }
@Test public void testAssignForInvalidHost() { Map<String, List<String>> map = new HashMap<String, List<String>>(); map.put("group1", new ArrayList<String>()); ReflectionTestUtils.setField(clusterCommands, "hostGroups", map); when(client.getHostNames()).thenReturn(singletonMap("host2", "HEALTHY")); String result = clusterCommands.assign(new Host("host3"), "group1"); assertEquals("host3 is not a valid hostname", result); }