@CliCommand(value = "instancegroup configure", help = "Configure instance groups") public String create( @CliOption(key = "instanceGroup", mandatory = true, help = "Name of the instanceGroup") InstanceGroup instanceGroup, @CliOption(key = "nodecount", mandatory = true, help = "Nodecount for instanceGroup") Integer nodeCount, @CliOption( key = "ambariServer", mandatory = true, help = "Ambari server will be installed here if true") boolean ambariServer, @CliOption(key = "templateId", help = "TemplateId of the instanceGroup") InstanceGroupTemplateId instanceGroupTemplateId, @CliOption(key = "templateName", help = "TemplateName of the instanceGroup") InstanceGroupTemplateName instanceGroupTemplateName, @CliOption(key = "securityGroupId", help = "SecurityGroupId of the instanceGroup") SecurityGroupId instanceGroupSecurityGroupId, @CliOption(key = "securityGroupName", help = "SecurityGroupName of the instanceGroup") SecurityGroupName instanceGroupSecurityGroupName) throws Exception { try { String templateId; if (instanceGroupTemplateId != null) { templateId = instanceGroupTemplateId.getName(); } else if (instanceGroupTemplateName != null) { TemplateResponse aPublic = shellContext .cloudbreakClient() .templateEndpoint() .getPublic(instanceGroupTemplateName.getName()); if (aPublic != null) { templateId = aPublic.getId().toString(); } else { return String.format( "Template not found by name: %s", instanceGroupTemplateName.getName()); } } else { return "Template name or id is not defined for instanceGroup (use --templateName or --templateId)"; } String securityGroupId; if (instanceGroupSecurityGroupId != null) { securityGroupId = instanceGroupSecurityGroupId.getName(); } else if (instanceGroupSecurityGroupName != null) { SecurityGroupResponse aPublic = shellContext .cloudbreakClient() .securityGroupEndpoint() .getPublic(instanceGroupSecurityGroupName.getName()); if (aPublic != null) { securityGroupId = aPublic.getId().toString(); } else { return String.format( "SecurityGroup not found by name: %s", instanceGroupSecurityGroupName.getName()); } } else { return "SecurityGroup name or id is not defined for instanceGroup (use --securityGroupName or --securityGroupId)"; } Long parsedTemplateId = Longs.tryParse(templateId); Long parsedsecurityGroupId = Longs.tryParse(securityGroupId); if (parsedTemplateId != null && parsedsecurityGroupId != null) { if (ambariServer) { boolean ambariSpecified = shellContext .getInstanceGroups() .values() .stream() .filter(e -> e.getType().equals("GATEWAY")) .findAny() .isPresent(); if (ambariSpecified) { return "Ambari server is already specified"; } if (nodeCount != 1) { return "Allowed node count for Ambari server: 1"; } shellContext.putInstanceGroup( instanceGroup.getName(), new InstanceGroupEntry( parsedTemplateId, parsedsecurityGroupId, nodeCount, "GATEWAY")); } else { shellContext.putInstanceGroup( instanceGroup.getName(), new InstanceGroupEntry(parsedTemplateId, parsedsecurityGroupId, nodeCount, "CORE")); } shellContext.putHostGroup( instanceGroup.getName(), new HostgroupEntry(nodeCount, new HashSet<>(), RecoveryMode.MANUAL)); if (shellContext.getActiveHostGroups().size() == shellContext.getInstanceGroups().size() && shellContext.getActiveHostGroups().size() != 0) { shellContext.setHint(Hints.SELECT_NETWORK); } else { shellContext.setHint(Hints.CONFIGURE_HOSTGROUP); } return shellContext .outputTransformer() .render(shellContext.getInstanceGroups(), "instanceGroup"); } else { return "TemplateId is not a number."; } } catch (Exception ex) { throw shellContext.exceptionTransformer().transformToRuntimeException(ex); } }