in helix-core/src/main/java/org/apache/helix/tools/ClusterSetup.java [777:1191]
private static Options constructCommandLineOptions() {
Option helpOption =
OptionBuilder.withLongOpt(help).withDescription("Prints command-line options info")
.create();
Option zkServerOption =
OptionBuilder.withLongOpt(zkServerAddress).withDescription("Provide zookeeper address")
.create();
zkServerOption.setArgs(1);
zkServerOption.setRequired(true);
zkServerOption.setArgName("ZookeeperServerAddress(Required)");
Option listClustersOption =
OptionBuilder.withLongOpt(listClusters).withDescription("List existing clusters").create();
listClustersOption.setArgs(0);
listClustersOption.setRequired(false);
Option listResourceOption =
OptionBuilder.withLongOpt(listResources)
.withDescription("List resources hosted in a cluster").create();
listResourceOption.setArgs(1);
listResourceOption.setRequired(false);
listResourceOption.setArgName("clusterName <-tag TagValue>");
Option listInstancesOption =
OptionBuilder.withLongOpt(listInstances).withDescription("List Instances in a cluster")
.create();
listInstancesOption.setArgs(1);
listInstancesOption.setRequired(false);
listInstancesOption.setArgName("clusterName <-tag tagName>");
Option addClusterOption =
OptionBuilder.withLongOpt(addCluster).withDescription("Add a new cluster").create();
addClusterOption.setArgs(1);
addClusterOption.setRequired(false);
addClusterOption.setArgName("clusterName");
Option activateClusterOption =
OptionBuilder.withLongOpt(activateCluster)
.withDescription("Enable/disable a cluster in distributed controller mode").create();
activateClusterOption.setArgs(3);
activateClusterOption.setRequired(false);
activateClusterOption.setArgName("clusterName grandCluster true/false");
Option deleteClusterOption =
OptionBuilder.withLongOpt(dropCluster).withDescription("Delete a cluster").create();
deleteClusterOption.setArgs(1);
deleteClusterOption.setRequired(false);
deleteClusterOption.setArgName("clusterName");
Option addInstanceOption =
OptionBuilder.withLongOpt(addInstance).withDescription("Add a new Instance to a cluster")
.create();
addInstanceOption.setArgs(2);
addInstanceOption.setRequired(false);
addInstanceOption.setArgName("clusterName InstanceId");
Option addResourceOption =
OptionBuilder.withLongOpt(addResource).withDescription("Add a resource to a cluster")
.create();
addResourceOption.setArgs(4);
addResourceOption.setRequired(false);
addResourceOption
.setArgName("clusterName resourceName partitionNum stateModelRef <-mode modeValue>");
Option expandResourceOption =
OptionBuilder.withLongOpt(expandResource)
.withDescription("Expand resource to additional nodes").create();
expandResourceOption.setArgs(2);
expandResourceOption.setRequired(false);
expandResourceOption.setArgName("clusterName resourceName");
Option expandClusterOption =
OptionBuilder.withLongOpt(expandCluster)
.withDescription("Expand a cluster and all the resources").create();
expandClusterOption.setArgs(1);
expandClusterOption.setRequired(false);
expandClusterOption.setArgName("clusterName");
Option resourceModeOption =
OptionBuilder.withLongOpt(mode)
.withDescription("Specify resource mode, used with addResourceGroup command").create();
resourceModeOption.setArgs(1);
resourceModeOption.setRequired(false);
resourceModeOption.setArgName("IdealState mode");
Option resourceTagOption =
OptionBuilder.withLongOpt(tag)
.withDescription("Specify resource tag, used with listResources command").create();
resourceTagOption.setArgs(1);
resourceTagOption.setRequired(false);
resourceTagOption.setArgName("tag");
Option resourceBucketSizeOption =
OptionBuilder.withLongOpt(bucketSize)
.withDescription("Specify size of a bucket, used with addResourceGroup command")
.create();
resourceBucketSizeOption.setArgs(1);
resourceBucketSizeOption.setRequired(false);
resourceBucketSizeOption.setArgName("Size of a bucket for a resource");
Option maxPartitionsPerNodeOption =
OptionBuilder.withLongOpt(maxPartitionsPerNode)
.withDescription("Specify max partitions per node, used with addResourceGroup command")
.create();
maxPartitionsPerNodeOption.setArgs(1);
maxPartitionsPerNodeOption.setRequired(false);
maxPartitionsPerNodeOption.setArgName("Max partitions per node for a resource");
Option resourceKeyOption =
OptionBuilder.withLongOpt(resourceKeyPrefix)
.withDescription("Specify resource key prefix, used with rebalance command").create();
resourceKeyOption.setArgs(1);
resourceKeyOption.setRequired(false);
resourceKeyOption.setArgName("Resource key prefix");
Option instanceGroupTagOption =
OptionBuilder.withLongOpt(instanceGroupTag)
.withDescription("Specify instance group tag, used with rebalance command").create();
instanceGroupTagOption.setArgs(1);
instanceGroupTagOption.setRequired(false);
instanceGroupTagOption.setArgName("Instance group tag");
Option addStateModelDefOption =
OptionBuilder.withLongOpt(addStateModelDef)
.withDescription("Add a State model to a cluster").create();
addStateModelDefOption.setArgs(2);
addStateModelDefOption.setRequired(false);
addStateModelDefOption.setArgName("clusterName <filename>");
Option addIdealStateOption =
OptionBuilder.withLongOpt(addIdealState).withDescription("Add a State model to a cluster")
.create();
addIdealStateOption.setArgs(3);
addIdealStateOption.setRequired(false);
addIdealStateOption.setArgName("clusterName resourceName <filename>");
Option dropInstanceOption =
OptionBuilder.withLongOpt(dropInstance)
.withDescription("Drop an existing Instance from a cluster").create();
dropInstanceOption.setArgs(2);
dropInstanceOption.setRequired(false);
dropInstanceOption.setArgName("clusterName InstanceId");
Option swapInstanceOption =
OptionBuilder.withLongOpt(swapInstance)
.withDescription("Swap an old instance from a cluster with a new instance").create();
swapInstanceOption.setArgs(3);
swapInstanceOption.setRequired(false);
swapInstanceOption.setArgName("clusterName oldInstance newInstance");
Option dropResourceOption =
OptionBuilder.withLongOpt(dropResource)
.withDescription("Drop an existing resource from a cluster").create();
dropResourceOption.setArgs(2);
dropResourceOption.setRequired(false);
dropResourceOption.setArgName("clusterName resourceName");
Option enableResourceOption =
OptionBuilder.withLongOpt(enableResource).withDescription("Enable/disable a resource")
.hasArgs(3).isRequired(false)
.withArgName("clusterName resourceName true/false <-tag resourceTag>")
.create();
Option rebalanceOption =
OptionBuilder.withLongOpt(rebalance).withDescription("Rebalance a resource in a cluster")
.create();
rebalanceOption.setArgs(3);
rebalanceOption.setRequired(false);
rebalanceOption.setArgName("clusterName resourceName replicas");
Option instanceInfoOption =
OptionBuilder.withLongOpt(listInstanceInfo)
.withDescription("Query info of a Instance in a cluster").create();
instanceInfoOption.setArgs(2);
instanceInfoOption.setRequired(false);
instanceInfoOption.setArgName("clusterName InstanceName");
Option clusterInfoOption =
OptionBuilder.withLongOpt(listClusterInfo).withDescription("Query info of a cluster")
.create();
clusterInfoOption.setArgs(1);
clusterInfoOption.setRequired(false);
clusterInfoOption.setArgName("clusterName");
Option resourceInfoOption =
OptionBuilder.withLongOpt(listResourceInfo).withDescription("Query info of a resource")
.create();
resourceInfoOption.setArgs(2);
resourceInfoOption.setRequired(false);
resourceInfoOption.setArgName("clusterName resourceName");
Option addResourcePropertyOption =
OptionBuilder.withLongOpt(addResourceProperty).withDescription("Add a resource property")
.create();
addResourcePropertyOption.setArgs(4);
addResourcePropertyOption.setRequired(false);
addResourcePropertyOption.setArgName("clusterName resourceName propertyName propertyValue");
Option removeResourcePropertyOption =
OptionBuilder.withLongOpt(removeResourceProperty)
.withDescription("Remove a resource property").create();
removeResourcePropertyOption.setArgs(3);
removeResourcePropertyOption.setRequired(false);
removeResourcePropertyOption.setArgName("clusterName resourceName propertyName");
Option partitionInfoOption =
OptionBuilder.withLongOpt(listPartitionInfo).withDescription("Query info of a partition")
.create();
partitionInfoOption.setArgs(3);
partitionInfoOption.setRequired(false);
partitionInfoOption.setArgName("clusterName resourceName partitionName");
Option enableInstanceOption =
OptionBuilder.withLongOpt(enableInstance).withDescription("Enable/disable an instance")
.create();
enableInstanceOption.setArgs(3);
enableInstanceOption.setRequired(false);
enableInstanceOption.setArgName("clusterName instanceName true/false");
Option enablePartitionOption =
OptionBuilder.hasArgs().withLongOpt(enablePartition)
.withDescription("Enable/disable partitions").create();
enablePartitionOption.setRequired(false);
enablePartitionOption
.setArgName("true/false clusterName instanceName resourceName partitionName1...");
Option enableClusterOption =
OptionBuilder.withLongOpt(enableCluster)
.withDescription("pause/resume the controller of a cluster").create();
enableClusterOption.setArgs(2);
enableClusterOption.setRequired(false);
enableClusterOption.setArgName("clusterName true/false");
Option resetPartitionOption =
OptionBuilder.withLongOpt(resetPartition)
.withDescription("Reset a partition in error state").create();
resetPartitionOption.setArgs(4);
resetPartitionOption.setRequired(false);
resetPartitionOption.setArgName("clusterName instanceName resourceName partitionName");
Option resetInstanceOption =
OptionBuilder.withLongOpt(resetInstance)
.withDescription("Reset all partitions in error state for an instance").create();
resetInstanceOption.setArgs(2);
resetInstanceOption.setRequired(false);
resetInstanceOption.setArgName("clusterName instanceName");
Option resetResourceOption =
OptionBuilder.withLongOpt(resetResource)
.withDescription("Reset all partitions in error state for a resource").create();
resetResourceOption.setArgs(2);
resetResourceOption.setRequired(false);
resetResourceOption.setArgName("clusterName resourceName");
Option listStateModelsOption =
OptionBuilder.withLongOpt(listStateModels)
.withDescription("Query info of state models in a cluster").create();
listStateModelsOption.setArgs(1);
listStateModelsOption.setRequired(false);
listStateModelsOption.setArgName("clusterName");
Option listStateModelOption =
OptionBuilder.withLongOpt(listStateModel)
.withDescription("Query info of a state model in a cluster").create();
listStateModelOption.setArgs(2);
listStateModelOption.setRequired(false);
listStateModelOption.setArgName("clusterName stateModelName");
Option addInstanceTagOption =
OptionBuilder.withLongOpt(addInstanceTag).withDescription("Add a tag to instance").create();
addInstanceTagOption.setArgs(3);
addInstanceTagOption.setRequired(false);
addInstanceTagOption.setArgName("clusterName instanceName tag");
Option removeInstanceTagOption =
OptionBuilder.withLongOpt(removeInstanceTag).withDescription("Remove tag from instance")
.create();
removeInstanceTagOption.setArgs(3);
removeInstanceTagOption.setRequired(false);
removeInstanceTagOption.setArgName("clusterName instanceName tag");
// TODO need deal with resource-names containing ","
// set/get/remove configs options
Option setConfOption =
OptionBuilder
.hasArgs(3)
.isRequired(false)
.withArgName(
"ConfigScope(e.g. RESOURCE) ConfigScopeArgs(e.g. myCluster,testDB) KeyValueMap(e.g. k1=v1,k2=v2)")
.withLongOpt(setConfig).withDescription("Set configs").create();
Option getConfOption =
OptionBuilder
.hasArgs(3)
.isRequired(false)
.withArgName(
"ConfigScope(e.g. RESOURCE) ConfigScopeArgs(e.g. myCluster,testDB) Keys(e.g. k1,k2)")
.withLongOpt(getConfig).withDescription("Get configs").create();
Option removeConfOption =
OptionBuilder
.hasArgs(3)
.isRequired(false)
.withArgName(
"ConfigScope(e.g. RESOURCE) ConfigScopeArgs(e.g. myCluster,testDB) Keys(e.g. k1,k2)")
.withLongOpt(removeConfig).withDescription("Remove configs").create();
// set/get/remove constraints options
Option setConstraintOption =
OptionBuilder
.hasArgs(4)
.isRequired(false)
.withArgName(
"clusterName ConstraintType(e.g. MESSAGE_CONSTRAINT) ConstraintId KeyValueMap(e.g. k1=v1,k2=v2)")
.withLongOpt(setConstraint)
.withDescription("Set a constraint associated with a give id. create if not exist")
.create();
Option getConstraintsOption =
OptionBuilder.hasArgs(2).isRequired(false)
.withArgName("clusterName ConstraintType(e.g. MESSAGE_CONSTRAINT)")
.withLongOpt(getConstraints)
.withDescription("Get constraints associated with given type").create();
Option removeConstraintOption =
OptionBuilder.hasArgs(3).isRequired(false)
.withArgName("clusterName ConstraintType(e.g. MESSAGE_CONSTRAINT) ConstraintId")
.withLongOpt(removeConstraint)
.withDescription("Remove a constraint associated with given id").create();
Option setCloudConfigOption = OptionBuilder.withLongOpt(setCloudConfig).withDescription(
"Set the Cloud Configuration of the cluster. Example:\n sh helix-admin.sh --zkSvr ZookeeperServerAddress --setCloudConfig ClusterName '{\"simpleFields\" : {\"CLOUD_ENABLED\" : \"true\",\"CLOUD_PROVIDER\": \"AZURE\"}}'")
.create();
setCloudConfigOption.setArgs(2);
setCloudConfigOption.setRequired(false);
setCloudConfigOption.setArgName("clusterName CloudConfigurationManifest");
Option removeCloudConfigOption = OptionBuilder.withLongOpt(removeCloudConfig)
.withDescription("Remove the Cloud Configuration of the cluster").create();
removeCloudConfigOption.setArgs(1);
removeCloudConfigOption.setRequired(false);
removeCloudConfigOption.setArgName("clusterName");
Option setPartitionsToErrorOption =
OptionBuilder.withLongOpt(setPartitionsToError)
.withDescription("Set a Partition to Error State").create();
setPartitionsToErrorOption.setArgs(4);
setPartitionsToErrorOption.setRequired(false);
setPartitionsToErrorOption.setArgName("clusterName instanceName resourceName partitionName");
OptionGroup group = new OptionGroup();
group.setRequired(true);
group.addOption(rebalanceOption);
group.addOption(addResourceOption);
group.addOption(resourceModeOption);
group.addOption(resourceTagOption);
group.addOption(resourceBucketSizeOption);
group.addOption(maxPartitionsPerNodeOption);
group.addOption(expandResourceOption);
group.addOption(expandClusterOption);
group.addOption(resourceKeyOption);
group.addOption(addClusterOption);
group.addOption(activateClusterOption);
group.addOption(deleteClusterOption);
group.addOption(addInstanceOption);
group.addOption(listInstancesOption);
group.addOption(listResourceOption);
group.addOption(listClustersOption);
group.addOption(addIdealStateOption);
group.addOption(rebalanceOption);
group.addOption(dropInstanceOption);
group.addOption(swapInstanceOption);
group.addOption(dropResourceOption);
group.addOption(enableResourceOption);
group.addOption(instanceInfoOption);
group.addOption(clusterInfoOption);
group.addOption(resourceInfoOption);
group.addOption(partitionInfoOption);
group.addOption(enableInstanceOption);
group.addOption(enablePartitionOption);
group.addOption(enableClusterOption);
group.addOption(resetPartitionOption);
group.addOption(resetInstanceOption);
group.addOption(resetResourceOption);
group.addOption(addStateModelDefOption);
group.addOption(listStateModelsOption);
group.addOption(listStateModelOption);
group.addOption(addResourcePropertyOption);
group.addOption(removeResourcePropertyOption);
group.addOption(setPartitionsToErrorOption);
// set/get/remove config options
group.addOption(setConfOption);
group.addOption(getConfOption);
group.addOption(removeConfOption);
// set/get/remove constraint options
group.addOption(setConstraintOption);
group.addOption(getConstraintsOption);
group.addOption(removeConstraintOption);
// set/remove cloud configs
group.addOption(setCloudConfigOption);
group.addOption(removeCloudConfigOption);
group.addOption(addInstanceTagOption);
group.addOption(removeInstanceTagOption);
group.addOption(instanceGroupTagOption);
Options options = new Options();
options.addOption(helpOption);
options.addOption(zkServerOption);
options.addOptionGroup(group);
return options;
}