in hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/main.c [278:476]
static int validate_arguments(int argc, char **argv , int *operation) {
if (argc < 2) {
display_usage(stdout);
return INVALID_ARGUMENT_NUMBER;
}
/*
* Check if it is a known module, if yes, redirect to module
*/
if (strcmp("--module-gpu", argv[1]) == 0) {
return handle_gpu_request(&update_cgroups_parameters, "gpu", argc - 1,
&argv[1]);
}
if (strcmp("--module-fpga", argv[1]) == 0) {
return handle_fpga_request(&update_cgroups_parameters, "fpga", argc - 1,
&argv[1]);
}
if (strcmp("--module-devices", argv[1]) == 0) {
return handle_devices_request(&update_cgroups_parameters, "devices", argc - 1,
&argv[1]);
}
if (strcmp("--checksetup", argv[1]) == 0) {
*operation = CHECK_SETUP;
return 0;
}
if (strcmp("--mount-cgroups", argv[1]) == 0) {
if (is_mount_cgroups_support_enabled()) {
if (argc < 4) {
display_usage(stdout);
return INVALID_ARGUMENT_NUMBER;
}
optind++;
cmd_input.cgroups_hierarchy = argv[optind++];
*operation = MOUNT_CGROUPS;
return 0;
} else {
display_feature_disabled_message("mount cgroup");
return FEATURE_DISABLED;
}
}
if (strcmp("--tc-modify-state", argv[1]) == 0) {
if(is_tc_support_enabled()) {
if (argc != 3) {
display_usage(stdout);
return INVALID_ARGUMENT_NUMBER;
}
optind++;
cmd_input.traffic_control_command_file = argv[optind++];
*operation = TRAFFIC_CONTROL_MODIFY_STATE;
return 0;
} else {
display_feature_disabled_message("traffic control");
return FEATURE_DISABLED;
}
}
if (strcmp("--tc-read-state", argv[1]) == 0) {
if(is_tc_support_enabled()) {
if (argc != 3) {
display_usage(stdout);
return INVALID_ARGUMENT_NUMBER;
}
optind++;
cmd_input.traffic_control_command_file = argv[optind++];
*operation = TRAFFIC_CONTROL_READ_STATE;
return 0;
} else {
display_feature_disabled_message("traffic control");
return FEATURE_DISABLED;
}
}
if (strcmp("--tc-read-stats", argv[1]) == 0) {
if(is_tc_support_enabled()) {
if (argc != 3) {
display_usage(stdout);
return INVALID_ARGUMENT_NUMBER;
}
optind++;
cmd_input.traffic_control_command_file = argv[optind++];
*operation = TRAFFIC_CONTROL_READ_STATS;
return 0;
} else {
display_feature_disabled_message("traffic control");
return FEATURE_DISABLED;
}
}
if (strcmp("--exec-container", argv[1]) == 0) {
if(is_terminal_support_enabled()) {
if (argc != 3) {
display_usage(stdout);
return INVALID_ARGUMENT_NUMBER;
}
optind++;
cmd_input.command_file = argv[optind++];
*operation = EXEC_CONTAINER;
return 0;
} else {
display_feature_disabled_message("feature.terminal.enabled");
return FEATURE_DISABLED;
}
}
if (strcmp("--run-docker", argv[1]) == 0) {
if(is_docker_support_enabled()) {
if (argc != 3) {
display_usage(stdout);
return INVALID_ARGUMENT_NUMBER;
}
optind++;
cmd_input.command_file = argv[optind++];
*operation = RUN_DOCKER;
return 0;
} else {
display_feature_disabled_message("docker");
return FEATURE_DISABLED;
}
}
if (strcmp("--remove-docker-container", argv[1]) == 0) {
if(is_docker_support_enabled()) {
if ((argc != 3) && (argc != 4)) {
display_usage(stdout);
return INVALID_ARGUMENT_NUMBER;
}
optind++;
*operation = REMOVE_DOCKER_CONTAINER;
return 0;
} else {
display_feature_disabled_message("docker");
return FEATURE_DISABLED;
}
}
if (strcmp("--inspect-docker-container", argv[1]) == 0) {
if(is_docker_support_enabled()) {
if (argc != 4) {
display_usage(stdout);
return INVALID_ARGUMENT_NUMBER;
}
optind++;
*operation = INSPECT_DOCKER_CONTAINER;
return 0;
} else {
display_feature_disabled_message("docker");
return FEATURE_DISABLED;
}
}
if (strcmp("--run-runc-container", argv[1]) == 0) {
if (is_runc_support_enabled()) {
if (argc != 3) {
display_usage(stdout);
return INVALID_ARGUMENT_NUMBER;
}
optind++;
cmd_input.command_file = argv[optind++];
*operation = RUN_RUNC_CONTAINER;
return 0;
} else {
display_feature_disabled_message("runc");
return FEATURE_DISABLED;
}
}
if (strcmp("--reap-runc-layer-mounts", argv[1]) == 0) {
if (is_runc_support_enabled()) {
if (argc != 3) {
display_usage(stdout);
return INVALID_ARGUMENT_NUMBER;
}
optind++;
const char* valstr = argv[optind++];
if (sscanf(valstr, "%d", &cmd_input.runc_layer_count) != 1
|| cmd_input.runc_layer_count < 0) {
fprintf(ERRORFILE, "Bad runc layer count: %s\n", valstr);
return INVALID_COMMAND_PROVIDED;
}
*operation = REAP_RUNC_LAYER_MOUNTS;
return 0;
} else {
display_feature_disabled_message("runc");
return FEATURE_DISABLED;
}
}
/* Now we have to validate 'run as user' operations that don't use
a 'long option' - we should fix this at some point. The validation/argument
parsing here is extensive enough that it done in a separate function */
return validate_run_as_user_commands(argc, argv, operation);
}