ClusterCommands implements CommandMarker { @CliCommand(value = "cluster create", help = "Create a cluster based on current blueprint and assigned hosts") public String createCluster( @CliOption(key = "exitOnFinish", mandatory = false, help = "Quits the shell when the cluster creation finishes") Boolean exit) { String message = "Successfully created the cluster"; String blueprint = context.getFocusValue(); try { client.createCluster(blueprint, blueprint, hostGroups); context.setCluster(blueprint); context.resetFocus(); context.setHint(Hints.PROGRESS); flashService.showInstallProgress(exit == null ? false : exit); } catch (HttpResponseException e) { createNewHostGroups(); message = "Failed to create the cluster: " + e.getMessage(); try { deleteCluster(blueprint); } catch (HttpResponseException e1) { message += ". Failed to cleanup cluster creation: " + e1.getMessage(); } } 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 testCreateCluster() throws HttpResponseException { String blueprint = "blueprint"; Map<String, List<String>> map = singletonMap("group1", asList("host", "host2")); ReflectionTestUtils.setField(clusterCommands, "hostGroups", map); when(context.getFocusValue()).thenReturn(blueprint); when(client.getClusterName()).thenReturn("cluster"); String result = clusterCommands.createCluster(false); verify(client).createCluster(blueprint, blueprint, map); verify(context).resetFocus(); assertFalse(result.contains("Failed")); assertTrue(result.contains("Successfully")); }